![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Int negcyc(int);
int negcyc(); public: MINCOST(const Graph & G, int s, int t): G(G), s(s), t(t), st(G.V()), wt(G.V()) { MAXFLOW< Graph, Edge> (G, s, t); for (int x = negcyc (); x! = -1; x = negcyc ()) { augment(x, x); } } };
Часть 5. Алгоритмы на графах
РИСУНОК 22.41. ОСТАТОЧНЫЕ СЕТИ (ВЫЧЕРКИВАНИЕ ЦИКЛОВ) Каждый из потоков, показанных на этом рисунке, представляет собой максимальный поток в транспортной сети в верхней части рисунка, но только поток, изображенный в нижней части является максимальным потоком минимальной стоимости. Чтобы найти его, мы начинаем вычисления, имея произвольный максимальный поток, и наращиваем поток, используя отрицательные циклы. Стоимость начального максимального потока (второй вверху) равна 22 единицам, но он не является максимальным потоком минимальной стоимости, поскольку остаточная сеть (показана справа) содержит три отрицательных цикла. В этом примере мы производим наращивание потока вдоль пути 4-1-0-2-4, чтобы получит максимальный поток со стоимостью 21 (третий сверху), который все еще сохраняет один отрицательный цикл. Наращивание вдоль этого цикла дает поток минимальной стоимости (внизу). Обратите внимание на тот факт, что наращивание вдоль пути 3-2-4-1-3 дало бы нам максимальный поток минимальной стоимости всего за один шаг. Глава 22. Потоки в сетях
С технической точки зрения, для алгоритма вычеркивания циклов использование инициализации фиктивным потоком является ни более, и ни менее универсальным, нежели использование инициализации максимальным потоком. Первая затрагивает все алгоритмы вычисления максимального потока посредством построения аугментальных путей, однако с помощью алгоритма могут быть вычислены не все максимальные потоки (см. упражнение 22.40). С одной стороны, использование такой технологии может привести в утрате всех преимуществ, обеспечиваемых сложным алгоритмом вычисления максимального потока. С другой стороны, мы можем приобрести в плане снижения затрат в процессе построения максимального потока. На практике инициализация фиктивным потоком широко используется в силу простоты ее реализации. Как и в случае вычисления максимальных потоков, существование этого обобщенного алгоритма служит гарантией того, что каждая задача о максимальном потоке минимальной стоимости (с заданными пропускными способностями ребер и целочисленными стоимостями) имеет решение, обеспечивающее целочисленные величины всех потоков, и этот алгоритм позволяет получить это решение (см. упражнение 22.107). Учитывая упомянутый факт, легко установить верхнюю границу времени, необходимого для выполнения произвольного алгоритма вычеркивания циклов. Свойство 22.24. Число аугментальных циклов, необходимых для выполнения обобщенного алгоритма вычеркивания циклов, не превосходит ЕСМ. Доказательство: В худшем случае каждое ребро в начальном потоке имеет пропускную способность М, стоимость С и заполнено. Каждый цикл уменьшает эту стоимость, по меньшей мере, на 1. ■ Следствие. Время, необходимое для решения задачи о максимальном потоке минимальной стоимости в разреженной сети, есть O(V3CM). Доказательство: Непосредственно следует из умножения числа аугментальных циклов в худшем случае на затраты на их поиск, которые определяет для худшего случая алгоритм Беллмана-Форда (см. свойство 21.20). ■ Подобно методам аугментальных путей, эта оценка времени выполнения алгоритма чрезвычайно пессимистична, поскольку она предполагает не только ситуацию худшего случая, в условиях которой мы должны выполнить громадное число циклов для минимизации стоимости, но и в силу того, что мы попадаем в другую ситуацию худшего случая, когда для нахождения каждого цикла требуется проверить огромное количество ребер. Часть 5. Алгоритмы на графах
РИС. 22.42. АЛГОРИТМ ВЫЧЕРКИВАНИЯ ЦИКЛОВ БЕЗ НАЧАЛЬНОГО МАКСИМАЛЬНОГО ПОТОКА Данная последовательность диаграмм служит иллюстрацией вычисления максимального потока минимальной стоимости, начинающегося с первоначально нулевого потока, с применением алгоритма вычеркивания циклов, который использует фиктивное ребро из истока в сток в остаточной сети с неограниченной пропускной способностью и неограниченными отрицательными стоимостями. Фиктивное ребро превращает любой аугментальный путь из 0 в 5 отрицательным циклом (однако, мы его игнорируем при наращивании потока и вычислении его стоимости). Наращивание вдоль этого пути ведет к увеличению потока, как это имеет место в рамках алгоритмов построения аугментальных путей (три верхних ряда). Когда нет циклов, в состав которых входит фиктивное ребро, то в остаточной сети отсутствуют пути из истока в сток, следовательно, мы имеем максимальный поток (третий ряд сверху). В этой точке наращивание потока вдоль отрицательного цикла уменьшает стоимость потока без изменения его величины (нижний ряд). В этом примере мы вычисляем максимальный поток, затем уменьшаем его стоимость; однако, не это главное. Например, алгоритм может увеличивать поток в отрицательном цикле 1-4-5-3-1 вместо цикла 0-1-4-5-0 на втором шаге. Поскольку каждое наращивание либо увеличивает поток, либо уменьшает стоимость, мы всегда в итоге получаем максимальный поток минимальной стоимости.
|