Алгоритм Эдмондса-Карпа
Версия от 15:55, 29 декабря 2010; 192.168.0.2 (обсуждение)
Содержание
Алгоритм
Для заданной сети
алгоритм Эдмондса-Карпа найходит поток максимальной величины из заданной вершины в заданную вершину за .Псевдокод
Edmonds_Karp (G, s, t) for (для) каждого ребраdo while существует кратчайший путь из в в остаточной сети do for (для) каждого ребра do
Корректность алгоритма Эдмондса-Карпа
Алгоритм Эдмондса-Карпа является реализацией метода Форда-Фалкерсона. На каждой итерации цикла while поток в графе теореме Форда-Фалкерсона найденный поток максимальный. Оценка быстродействия будет проведена далее.
увеличивается вдоль одного из кратчайших путей в из истока в сток . Этот процесс повторяется до тех пор пока существует кратчайший путь в . Если в не существует кратчайшего пути из в , значит не существует никакого вообще никакого пути в следовательно поОценка быстродействия
Лемма: |
Если в сети с источником и стоком увеличение потока производиться вдоль кратчайших путей в . То для всех вершин длина кратчайшего пути в остаточной сети не убывает после каждого увеличения потока. |
Доказательство: |
Предположим противное, пусть существует вершина , что после какого-то увеличения потока длина кратчайшего пути из в уменьшилась. Обозначим потоки до и после увеличения соответственно за и . Пусть — вершина, расстояние от до которой минимально</tex> и уменьшилось с увеличением потока. Имеем . Рассмотрим путь , являющийся кратчайшим от к в . Тогда верно, что .По выбору и из предыдущего утверждения получаем, что .Предположим Пусть , тогда . Это противоречит . , но известно, что . Появление ребра после увеличения потока означает увеличение потока по обратному ребру . Увеличение потока производится вдоль кратчайшего пути, поэтому кратчайший путь из в вдоль которого происходило увеличения выглядит как , из чего получаем . Данное утверждение противоречит . Итак мы пришли к противоречию с существованием вершины , кратчайшее расстояние до которой уменьшилось с увеличением потока. |
Опираясь на предшествующую лемму докажем следующую теорему, которая ограничивает сверху число итераций цикла while в алгоритме Эдмондса-Карпа.
Теорема: |
Пусть для некоторой сети с источником и стоком выполняется алгоритм Эдмондса-Карпа, то общее число итераций цикла while составляет . |
Доказательство: |
Рассмотрим множество ребер остаточной сети , принадлежащих увеличивающему пути , таких что . Назовем данные ребра критическими. Покажем, что каждое из ребер может становиться критическим не более, чем раз. Заметим, что после увеличения потока вдоль пути все критические ребра исчезают из остаточной сети, кроме того по определению остаточной пропускной способности пути хотя бы одно ребро увеличивающего пути — критическое.Рассмотрим две вершины лемме , откуда . и принадлежащие , соединенные некоторым ребром из . Увеличение производиться вдоль кратчайших путей, поэтому если ребро становиться критическим в первый раз, верно, что . После увеличения потока ребро исчезает из сети. Оно не появится в другом увеличивающем пути до тех, пор пока не будет уменьшен по обратному ребру . Это может произойти только в том случае, если ребро встретится на некотором увеличивающем пути. Пусть в момент перед увеличением поток в сети составлял , то поскольку увеличение проищводиться вдоль кратчайших путей, верно: . СогласноИтак в промежутке времени между тем, когда ребро Поскольку каждый увеличивающий путь, содержит по крайней мере одно критическое ребро, следовательно число кратчайших путей составляет становится критическим в первый раз, до момента, когда оно становится критическим в следующий раз, расстояние от до увеличивается минимум на . Расстояние в начальный момент времени больше либо равно . Среди промежуточных вершин на кратчайшем пути не могут находиться , или . Следовательно к тому моменту, когда вершина станет недостижимой из источника расстояние до нее не превысит . Получаем, что ребро могло стать критическим не более раз. Поскольку в графе не более пар вершин, между которыми могут существовать ребра в остаточной сети, то общее количество критических ребер в ходе выполнения алгоритма Эдмондса-Карпа равно . . На каждой итерации цикла while рассматривается ровно один увеличивающий путь, а так как только такого пути не существует выполнение цикла прервается, то число итераций цикла while также составляет . |
Если увеличивающий путь находить поиском в ширину, то каждую итерацию цикла while можно выполнить за время
. Инициализация в процедуре Edmonds_Karp производиться за , следовательно время работы алгоритма алгоритма Эдмондса-Карпа составляет . Заметим также, что сущетсвует сеть "грибок" на которое нижняя граница времени работы алгоритмы Эдмондса-Карпа также составляет .Литература
- Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)