Алгоритм Динича
Алгоритм Диница или алгоритм Диница — это сильно полиномиальный алгоритм вычисления максимального потока в потоковой сети , задуманный в 1970 году израильским (ранее советским) учёным-компьютерщиком Ефимом Диницем . [1] Алгоритм работает в время и похож на алгоритм Эдмондса-Карпа , который работает в время, поскольку он использует кратчайшие дополняющие пути. Введение понятий графа уровней и потока блокировки позволяет алгоритму Динича достичь своей производительности.
История
[ редактировать ]Диниц изобрел алгоритм в январе 1969 года, будучи студентом магистратуры в Георгия Адельсона-Вельского группе . Несколько десятилетий спустя он вспоминал: [2]
На уроке «Алгоритмы» Адельсона-Вельского лектор имел привычку давать студентам задачу для обсуждения на следующем заседании в качестве упражнения. DA был изобретен в ответ на такое упражнение. В то время автору не были известны основные факты, касающиеся [ алгоритма Форда-Фалкерсона ]….
⋮
Незнание иногда имеет свои преимущества. Вполне вероятно, что DA не был бы изобретен тогда, если бы автору была известна идея возможного обесцвечивания насыщенных краев.
В 1970 году Диниц опубликовал описание алгоритма в «Докладах Академии наук СССР» . В 1974 году Шимон Эвен и (его тогдашний аспирант) Алон Итай из Техниона в Хайфе были очень любопытны и заинтригованы алгоритмом Диница, а также Александра В. Карзанова связанной с ним идеей о блокировании потока. Однако им было трудно расшифровать эти две статьи, каждая из которых была ограничена четырьмя страницами в соответствии с ограничениями журнала « Доклады Академии наук СССР» . Эвен не сдался и после трех дней усилий сумел понять обе статьи, за исключением вопроса обслуживания многоуровневой сети. В течение следующих нескольких лет Эвен читал лекции по «Алгоритму Динича», неправильно произнося имя автора при его популяризации. Эвен и Итай также внесли свой вклад в этот алгоритм, объединив BFS и DFS , как сейчас обычно представляют алгоритм. [2]
В течение примерно 10 лет после изобретения алгоритма Форда-Фалкерсона было неизвестно, можно ли заставить его завершаться за полиномиальное время в общем случае иррациональных граничных мощностей. Это привело к отсутствию какого-либо известного алгоритма с полиномиальным временем для решения проблемы максимального потока в общих случаях. Алгоритм Диница и алгоритм Эдмондса-Карпа (опубликованный в 1972 году) независимо друг от друга показали, что в алгоритме Форда-Фалкерсона, если каждый увеличивающий путь является кратчайшим, то длина увеличивающих путей не уменьшается, и алгоритм всегда завершается.
Определение
[ редактировать ]Позволять быть сетью с и мощность и поток кромки , соответственно.
- Остаточная емкость представляет собой отображение определяется как,
- если ,
- если ,
- в противном случае.
- если ,
- представляет Остаточный граф собой невзвешенный граф , где
- .
- – Дополняющий путь это – путь в остаточном графе .
- Определять быть длиной кратчайшего пути из к в . Тогда уровня график это график , где
- .
- – Блокирующий поток это – поток такой, что график с не содержит – путь. [Примечание 1] [3]
Алгоритм
[ редактировать ]Алгоритм Динича
- Вход : сеть. .
- Выход : Ан – поток максимального значения.
- Набор для каждого .
- Построить от из . Если , остановка и вывод .
- Найдите блокирующий поток в .
- Добавить поток дополнения к и вернитесь к шагу 2.
Анализ
[ редактировать ]Можно показать, что количество слоев в каждом блокирующем потоке каждый раз увеличивается как минимум на 1 и, таким образом, существует не более блокировка потоков в алгоритме. Для каждого из них:
- график уровней можно построить поиском в ширину время
- блокирующий поток в графе уровней можно найти в время [Примечание 2]
с общим временем работы для каждого слоя. Как следствие, время работы алгоритма Динича равно . [2]
Используя структуру данных, называемую динамическими деревьями , время поиска блокирующего потока на каждом этапе можно сократить до и, следовательно, время работы алгоритма Динича можно улучшить до .
Особые случаи
[ редактировать ]В сетях с единичной пропускной способностью сохраняется гораздо более строгая временная привязка. Каждый блокирующий поток можно найти в время, и можно показать, что число фаз не превышает и . [Примечание 3] Таким образом, алгоритм работает в время. [4]
В сетях, возникающих в результате задачи двустороннего сопоставления , количество фаз ограничено , что приводит к привязано ко времени. Полученный алгоритм также известен как алгоритм Хопкрофта-Карпа . В более общем смысле, эта оценка справедлива для любой единичной сети — сети, в которой каждая вершина, за исключением источника и приемника, имеет либо одно входное ребро с емкостью один, либо одно выходное ребро с емкостью один, а все остальные мощности являются произвольными целыми числами. . [3]
Пример
[ редактировать ]Ниже приведена симуляция алгоритма Динича. На графике уровней , вершины с красными метками — это значения . Пути, выделенные синим цветом, образуют блокирующий поток.
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Это означает, что подграф, полученный в результате удаления всех насыщенных ребер (ребер с ) не содержит пути из к . Другими словами, блокирующий поток таков, что каждый возможный путь от к содержит насыщенный край.
- ^ Нахождение потока блокировки можно реализовать в за каждый путь посредством последовательности операций наступления и отступления. см . на странице http://courses.csail.mit.edu/6.854/06/scribe/scribe11.pdf . Дополнительную информацию
- ^ граница предполагает, что никакие два ребра не соединяют одну и ту же пару вершин в одном направлении, в то время как Bound не делает такого предположения.
- ^ Э. А. Динич (1970). «Алгоритм решения задачи максимального потока в сети с оценкой мощности» (PDF) . Доклады Академии наук СССР . 11 : 1277–1280.
- ^ Jump up to: а б с Диниц, Ефим (2006). «Алгоритм Диница: оригинальная версия и версия Эвена» . В Одеде Гольдрейхе ; Арнольд Л. Розенберг ; Алан Л. Селман (ред.). Теоретическая информатика: Очерки памяти Шимона Эвена . Спрингер. стр. 218–240. ISBN 978-3-540-32880-3 .
- ^ Jump up to: а б Тарьян 1983 , стр. 102.
- ^ Даже Шимон; Тарьян, Р. Эндре (1975). «Сетевой поток и тестирование связности графов». SIAM Journal по вычислительной технике . 4 (4): 507–518. дои : 10.1137/0204043 . ISSN 0097-5397 .
Ссылки
[ редактировать ]- Диниц, Ефим (2006). «Алгоритм Диница: оригинальная версия и версия Эвена» . В Одеде Гольдрейхе ; Арнольд Л. Розенберг ; Алан Л. Селман (ред.). Теоретическая информатика: Очерки памяти Шимона Эвена . Спрингер. стр. 218–240. ISBN 978-3-540-32880-3 .
- Кадар, Илан; Албаглы, Сиван (18 апреля 2019 г.). Алгоритм Диница для поиска максимального потока в сети . Университет Бен-Гуриона. Архивировано из оригинала 22 декабря 2023 года.
- Корте, БХ; Виген, Йенс (2008). «8.4 Блокирующие потоки и алгоритм Фудзисигэ». Комбинаторная оптимизация: теория и алгоритмы (Алгоритмы и комбинаторика, 21) . Шпрингер Берлин Гейдельберг. стр. 174–176. ISBN 978-3-540-71844-4 .
- Тарьян, Р.Э. (1983). Структуры данных и сетевые алгоритмы .