Алгоритм Эдмондса-Карпа — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Алгоритм)
Строка 1: Строка 1:
 
== Алгоритм ==
 
== Алгоритм ==
  
Для заданной сети <tex>G(V, E, c)</tex> алгоритм Эдмондса-Карпа найходит поток максимальной величины из заданной вершины <tex>s</tex> в заданную вершину <tex>t</tex> за <tex>O(V E^2)</tex>.
+
Для заданной сети <tex>G(V, E, c)</tex> алгоритм Эдмондса-Карпа найходит поток максимальной величины из заданного истока <tex>s</tex> в заданный сток <tex>t</tex> за <tex>O(V E^2)</tex>.
  
 
== Псевдокод ==
 
== Псевдокод ==

Версия 21:18, 15 января 2011

Алгоритм

Для заданной сети G(V,E,c) алгоритм Эдмондса-Карпа найходит поток максимальной величины из заданного истока s в заданный сток t за O(VE2).

Псевдокод

Edmonds_Karp (G, s, t)
    for (для) каждого ребра (u,v)E[G]
        do f[u,v]0
           f[v,u]0
    while существует кратчайший путь p из s в t в остаточной сети Gf
        do cf(p)min{cf(u,v):(u,v)p}
            for (для) каждого ребра (u,v)p
                do f[u,v]f[u,v]+cf(p)
                   f[v,u]f[u,v]

Корректность алгоритма Эдмондса-Карпа

Алгоритм Эдмондса-Карпа является реализацией метода Форда-Фалкерсона. На каждой итерации цикла while поток в графе G увеличивается вдоль одного из кратчайших путей в Gf из истока s в сток t. Этот процесс повторяется до тех пор пока существует кратчайший st путь в Gf. Если в Gf не существует кратчайшего пути из s в t, значит не существует никакого вообще никакого st пути в Gf следовательно по теореме Форда-Фалкерсона найденный поток f максимальный. Оценка быстродействия будет проведена далее.

Оценка быстродействия

Лемма:
Если в сети G(V,E) с источником s и стоком t увеличение потока производиться вдоль кратчайших st путей в Gf. То для всех вершин vVs,t длина кратчайшего пути δf(s,v) в остаточной сети Gf не убывает после каждого увеличения потока.
Доказательство:

Предположим противное, пусть существует вершина vVs,t, что после какого-то увеличения потока длина кратчайшего пути из s в v уменьшилась. Обозначим потоки до и после увеличения соответственно за f и f. Пусть v — вершина, расстояние δf(s,v) от s до которой минимально</tex> и уменьшилось с увеличением потока. Имеем δf(s,v)<δf(s,v). Рассмотрим путь p=suv, являющийся кратчайшим от s к v в Gf. Тогда верно, что δf(s,u)=δf(s,v)1.

По выбору v и из предыдущего утверждения получаем, что δf(s,u)δf(s,u).

Предположим (u,v)Ef, тогда δf(s,v)δf(s,u)+1δf(s,u)+1=δf(s,v). Это противоречит δf(s,v)<δf(s,v).

Пусть (u,v)Ef, но известно, что (u,v)Ef. Появление ребра (u,v) после увеличения потока означает увеличение потока по обратному ребру (v,u). Увеличение потока производится вдоль кратчайшего пути, поэтому кратчайший путь из s в u вдоль которого происходило увеличения выглядит как svv, из чего получаем δf(s,v)=δf(s,u)1δf(s,u)1=δ(s,v)2. Данное утверждение противоречит δf(s,v)<δf(s,v). Итак мы пришли к противоречию с существованием вершины v, кратчайшее расстояние до которой уменьшилось с увеличением потока.

Опираясь на предшествующую лемму докажем следующую теорему, которая ограничивает сверху число итераций цикла while в алгоритме Эдмондса-Карпа.

Теорема:
Пусть для некоторой сети G(V,E) с источником s и стоком t выполняется алгоритм Эдмондса-Карпа, то общее число итераций цикла while составляет O(VE).
Доказательство:

Рассмотрим множество ребер (u,v) остаточной сети Gf, принадлежащих увеличивающему пути p, таких что cf(p)=cf(u,v). Назовем данные ребра критическими. Покажем, что каждое из |E| ребер может становиться критическим не более, чем |V|1 раз. Заметим, что после увеличения потока вдоль пути p все критические ребра исчезают из остаточной сети, кроме того по определению остаточной пропускной способности пути хотя бы одно ребро увеличивающего пути — критическое.

Рассмотрим две вершины u и v принадлежащие V, соединенные некоторым ребром из E. Увеличение производиться вдоль кратчайших путей, поэтому если ребро (u,v) становиться критическим в первый раз, верно, что δf(s,v)=δf(s,u)+1. После увеличения потока ребро (u,v) исчезает из сети. Оно не появится в другом увеличивающем пути до тех, пор пока не будет уменьшен по обратному ребру (u,v). Это может произойти только в том случае, если ребро (u,v) встретится на некотором увеличивающем пути. Пусть в момент перед увеличением поток в сети G составлял f, то поскольку увеличение проищводиться вдоль кратчайших путей, верно: δf(s,u)=δf(s,v)+1. Согласно лемме δf(s,v)δf(s,v), откуда δf(s,u)=δ(s,v)+1δf(s,v)+1=δf(s,u)+2.

Итак в промежутке времени между тем, когда ребро (u,v) становится критическим в первый раз, до момента, когда оно становится критическим в следующий раз, расстояние от s до u увеличивается минимум на 2. Расстояние δ(s,u) в начальный момент времени больше либо равно 0. Среди промежуточных вершин на кратчайшем пути su не могут находиться s, u или t. Следовательно к тому моменту, когда вершина u станет недостижимой из источника расстояние до нее не превысит |V|2. Получаем, что ребро (u,v) могло стать критическим не более (|V|2)/2=|V|/21 раз. Поскольку в графе не более O(E) пар вершин, между которыми могут существовать ребра в остаточной сети, то общее количество критических ребер в ходе выполнения алгоритма Эдмондса-Карпа равно O(VE).

Поскольку каждый увеличивающий путь, содержит по крайней мере одно критическое ребро, следовательно число кратчайших путей составляет O(VE). На каждой итерации цикла while рассматривается ровно один увеличивающий путь, а так как только такого пути не существует выполнение цикла прервается, то число итераций цикла while также составляет O(VE).

Если увеличивающий путь находить поиском в ширину, то каждую итерацию цикла while можно выполнить за время O(E). Инициализация в процедуре Edmonds_Karp производиться за O(E), следовательно время работы алгоритма алгоритма Эдмондса-Карпа составляет O(VE2). Заметим также, что сущетсвует сеть "грибок" на которое нижняя граница времени работы алгоритмы Эдмондса-Карпа также составляет O(VE2).

Литература

  • Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)