Алгоритм Диница
Алгоритм Диница — полиномиальный алгоритм для нахождения максимального потока в транспортной сети, предложенный в 1970 году советским (впоследствии израильским) математиком Ефимом Диницем. Временная сложность алгоритма составляет . Получить такую оценку позволяет введение понятий вспомогательной сети и блокирующего (псевдомаксимального) потока. В сетях с единичными пропускными способностями существует более сильная оценка временной сложности: .
ОписаниеПравить
Пусть — транспортная сеть, в которой и — соответственно пропускная способность и поток через ребро .
- Остаточная пропускная способность — отображение определённое как:
- Если ,
- В других источниках
- иначе.
- Если ,
- Остаточная сеть — граф , где
- .
- Дополняющий путь — путь в остаточном графе .
- Пусть — длина кратчайшего пути из в в графе . Тогда вспомогательная сеть графа — граф , где
- .
- Блокирующий поток — поток такой, что граф с не содержит пути.
АлгоритмПравить
Алгоритм Диница
- Вход: Сеть .
- Выход: поток максимальной величины.
- Установить для каждого .
- Создать из графа . Если , остановиться и вывести .
- Найти блокирующий поток в .
- Дополнить поток потоком и перейти к шагу 2.
АнализПравить
Можно показать, что каждый раз число в рёбер кратчайшем пути из источника в сток увеличивается хотя бы на единицу, поэтому в алгоритме не более блокирующих потоков, где — число вершин в сети. Вспомогательная сеть может быть построена обходом в ширину за время , а блокирующий поток на каждом уровне графа может быть найден за время . Поэтому время работы алгоритма Диница есть .
Используя структуры данных, называемые динамические деревья, можно находить блокирующий поток на каждой фазе за время , тогда время работы алгоритма Диница может быть улучшено до .
ПримерПравить
Ниже приведена симуляция алгоритма Диница. Во вспомогательной сети вершины с красными метками — значения . Блокирующий поток помечен синим.
ИсторияПравить
Алгоритм Диница был опубликован в 1970 г. бывшим советским учёным Ефимом Диницем, который сейчас является членом факультета вычислительной техники университета Бен-Гурион (Израиль), ранее, чем алгоритм Эдмондса — Карпа, который был опубликован в 1972, но создан ранее. Они независимо показали, что в алгоритме Форда — Фалкерсона в случае, если дополняющий путь является кратчайшим, длина дополняющего пути не уменьшается.
Алгоритм Диница с распостранениемПравить
Временную сложность алгоритма можно уменьшить, если оптимизировать процесс поиска блокирующего потока. Для этого необходимо ввести понятие потенциала. Потенциал ребра есть , а потенциал вершины равен . По той же логике , а . Идея улучшения заключается в том, чтобы искать вершину с минимальным положительным потенциалом в вспомогательной сети и строить блокирующий поток через нее, используя очереди.
- Вход: Сеть .
- Выход: поток максимальной величины.
- Установить для каждого .
- Создать из графа . Если , остановиться и вывести .
- Установить для каждого .
- Определить потенциал каждой вершины.
- Пока существует вершина такая, что :
- Определи поток при помощи прямого распостранения из .
- Определи поток при помощи обратного распостранения из .
- Дополни поток потоками и .
- Дополнить поток потоком и перейти к шагу 2.
Алгоритмы прямого и обратного распостранения служат поиску путей из в и из в соответственно. Пример работы алгоритма прямого распостранения с использованием очередей:
- Вход: Вспомогательная сеть , вершина такая, что .
- Выход: Поток из источника в вершину , являющийся частью блокирующего потока.
- Установить для всех : .
- Установить и .
- Добавить в очередь .
- Пока очередь не пуста:
- Установить значение равным последнему элементу очереди.
- Пока :
- Для каждого ребра :
- .
- Обнови .
- Обнови .
- Установи .
- Если и удалить из очереди .
В связи с тем, что в каждой итерации поиска блокирующего потока "насыщается" минимум одна вершина, он завершается за итераций в худшем случае, в каждой из которых рассматриваются максимум вершин. Пусть - количество "насыщенных" ребер в каждой -той итерации поиска блокирующего потока. Тогда его асимптотическая сложность равна , где - количество вершин и - количество ребер в графе. Таким образом, асимптотическая сложность алгоритма Диница с распостранением равна , так как блокирующий поток может проходить максимум через вершин.
ЛитератураПравить
- Yefim Dinitz. Dinitz' Algorithm: The Original Version and Even's Version // Theoretical Computer Science: Essays in Memory of Shimon Even (англ.) (рус. (англ.) / Oded Goldreich (англ.) (рус., Arnold L. Rosenberg, and Alan L. Selman. — Springer, 2006. — P. 218—240. — ISBN 978-3540328803.
- B. H. Korte, Jens Vygen. 8.4 Blocking Flows and Fujishige's Algorithm // Combinatorial Optimization: Theory and Algorithms (Algorithms and Combinatorics, 21) (англ.). — Springer Berlin Heidelberg, 2008. — P. 174—176. — ISBN 978-3-540-71844-4.