![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Глава 22. Потоки в сетях. сводимости. Для обширного класса комбинаторных алгоритмов эти задачи представляют собой водораздел
У нас есть все основания разрабатывать максимально универсальную модель, поскольку чем выше уровень универсальности модели, тем больше задач она охватывает, благодаря чему повышается коэффициент полезного действия алгоритма, который может решать задачу, сводимую к этой модели. Разработка такого алгоритма может представлять собой трудно решаемую, если не неразрешимую Задачу. Если в нашем распоряжении нет алгоритма, который гарантирует приемлемую эффективность решения, у нас обычно имеется алгоритм, который хорошо работает на специальных классах задач, которые нас интересуют. Специальные аналитические выкладки дают неконкретные результаты, однако, довольно-таки часто мы опираемся на эмпирические исследования. Действительно, практики обычно проводят апробацию наиболее общей модели из числа доступных (или той, которая предлагает хорошо отлаженный пакет решений) и не идут дальше, если модель не выходит за пределы приемлемого времени. Тем не менее, мы должны избегать использования чрезмерно общих моделей, ибо это может привести к излишним затратам времени на решение тех задач, для которых более специализированные модели могут обеспечить более высокую эффективность. С другой стороны, мы склонны искать более совершенные алгоритмы решения важных специальных задач, в частности, алгоритмы решения крупных задач или большого числа меньших задач, когда вычислительные ресурсы являются узким местом. Как мы уже могли убедиться на многих примерах в этой книге и в частях 1-4, мы часто находим подходящий алгоритм, который позволяет снизить затраты ресурсов во многие сотни и тысячи раз и даже больше, что исключительно важно, когда мы измеряем затраты в часах или в долларах. Общий подход, описанный в главе 2, который мы успешно применяли во многих областях, исключительно полезен в таких ситуациях, и мы с нетерпением ждем появления более совершенных алгоритмов в спектре алгоритмов на графах и комбинаторных алгоритмов. Возможно, основной недостаток перенесения центра тяжести на специальные алгоритмы заключается в том, что довольно часто небольшое изменение, внесенное в модель, приводит к тому, что алгоритм становится для нее непригодным. В то же время, когда мы прибегаем к помощи чрезмерно обобщенной модели и алгоритма, обеспечивающего решения нашей задачи, мы меньше подвержены воздействиям упомянутого недостатка. Программные библиотеки, охватывающие множество алгоритмов, с которыми мы ознакомились, можно найти во многих средах программирования. Такие библиотеки, несомненно, представляют собой важные ресурсы, которые нужно принимать во внимание при решении конкретных задач. Тем не менее, иногда такими библиотеками трудно пользоваться, они устаревают либо плохо соответствуют текущей задаче. Опытные программисты хорошо представляют себе, насколько важно найти компромисс между использованием преимуществ библиотечного ресурса и чрезмерной зависимостью от этого ресурса (даже если он преждевременно не устареет). Некоторые из рассмотренных ранее реализаций являются эффективными, простыми в разработке и широко используемы- Часть 5. Алгоритмы на графах
Напряженность между теоретические исследованиями, которые ограничены тем, что мы можем доказать, и эмпирическими исследованиями, которые имеют отношение только к текущим проблемам, становятся все более заметными по мере возрастания трудности решаемых нами задач. Теория обеспечивает руководство, которое нам необходимо, чтобы постигнуть суть задачи, а практический опыт подсказывает нам, куда направить свои усилия во время разработки реализаций. Более того, приобретенный опыт решения практических задач открывает новые направления развития теории, сохраняя цикл, дающий возможность расширить класс практических задач, которые мы можем решать. В конечном итоге, какой бы подход мы не выбрали, цель остается прежней. Нам нужен широкий спектр моделей решения задач, эффективные алгоритмы решения задач в рамках этих моделей, а также эффективные реализации этих алгоритмов, позволяющих нам решать практические задачи. Разработка все более универсальных моделей решения задач (таких как задачи вычисления кратчайших путей, максимальных потоков, потоков минимальной стоимости), все более мощных алгоритмов общего характера (такие как алгоритм Беллмана-Форда решения задачи вычисления кратчайших путей, алгоритм построения аугментальных путей для задачи о максимальном потоке и сетевой симплексный алгоритм для задачи о максимальном потоке минимальной стоимости) позволили нам существенно продвинуться в направлении этой цели. Многое было достигнуто в пятидесятые и шестидесятые годы. Несколько позже появились фундаментальные структуры данных (части 1—4) и алгоритмы, обеспечивающие эффективные реализации этих общих методов (данная книга), ставшие той мощной силой, которая наделила нас способностью решать такой широкий класс крупных задач.
|