Алгоритм Эдмондса-Карпа — различия между версиями
(Новая страница: «{{В разработке}} == Алгоритм == Для заданной транспортной сети <tex>G(V, E, c)</tex> алгоритм Эдмондса…») |
(→Корректность алгоритма Эдмондса-Карпа) |
||
Строка 22: | Строка 22: | ||
{{Лемма | {{Лемма | ||
|statement= | |statement= | ||
− | Если в | + | Если в сети <tex>G(V,E)</tex> с источником <tex>s</tex> и стоком <tex>t</tex> увеличение потока производиться вдоль кратчайших <tex>s \leadsto t</tex> путей в <tex>G_f</tex>. То для всех вершин <tex>v \in V[G]\backslash{s,t}</tex> длина кратчайшего пути <tex>\delta_f(s, v)</tex> в остаточной сети <tex>G_f</tex> не убывает после каждого увеличения потока. |
|proof= | |proof= | ||
− | Пусть <tex> | + | Предположим противное, пусть существует вершина <tex>v \in V \backslash {s,t}</tex>, что после какого-то увеличения потока длина кратчайшего пути из <tex>s</tex> в <tex>v</tex> уменьшилась. Обозначим потоки до и после увеличения соответственно за <tex>f</tex> и <tex>f'</tex>. Пусть <tex>v</tex> {{---}} вершина, расстояние <tex>\delta'_f(s,v) от <tex>s</tex> до которой минимально</tex> и уменьшилось с увеличением потока. Имеем <tex>\delta'_f(s,v) < \delta_f(s,v)</tex>. Рассмотрим путь <tex>p = s \leadsto u \rightarrow v</tex>, являющийся кратчайшим от <tex>s</tex> к <tex>v</tex> в <tex>G'_f</tex>. Тогда верно, что <tex>\delta'_f(s, u) = \delta'_f(s,v) - 1</tex>. |
+ | |||
+ | По выбору <tex>v</tex> и из предыдущего утверждения получаем, что <tex>\delta'_f (s, u) \ge \delta_f(s,u)</tex>. | ||
+ | |||
+ | Предположим <tex>(u, v) \in E_f</tex>, тогда <tex>\delta_f(s,v) \le \delta_f(s, u) + 1 \le \delta'_f(s,u) + 1 = \delta'_f(s, v)</tex>. Это противоречит <tex>\delta'_f(s,v) < \delta_f(s,v)</tex>. | ||
+ | |||
+ | Пусть <tex>(u,v) \notin E_f</tex>, но известно, что <tex>(u,v) \in E_f</tex>. Появление ребра <tex>(u,v)</tex> после увеличения потока означает увеличение потока по обратному ребру <tex>(v, u)</tex>. Увеличение потока производится вдоль кратчайшего пути, поэтому кратчайший путь из <tex>s</tex> в <tex>u</tex> вдоль которого происходило увеличения выглядит как <tex>s \leadsto v \rightarrow v</tex>, из чего получаем <tex>\delta_f(s, v) = \delta_f(s, u) - 1 \le \delta'_f(s, u) - 1 = \delta'(s, v) - 2</tex>. Данное утверждение противоречит <tex>\delta'_f(s,v) < \delta_f(s,v)</tex>. Итак мы пришли к противоречию с существованием вершины <tex>v</tex>, кратчайшее расстояние до которой уменьшилось с увеличением потока. | ||
+ | }} | ||
+ | |||
+ | Опираясь на предшествующую лемму докажем следующую теорему, которая ограничивает сверху число итераций цикла '''while''' в алгоритме Эдмондса-Карпа. | ||
+ | |||
+ | {{Теорема | ||
+ | |statement=Пусть для некоторой сети <tex>G(V,E)</tex> с источником <tex>s</tex> и стоком <tex>t</tex> выполняется алгоритм Эдмондса-Карпа, то общее число итераций цикла '''while''' составляет <tex>O(V E)</tex>. | ||
+ | |proof= | ||
+ | |||
}} | }} |
Версия 01:55, 21 декабря 2010
Эта статья находится в разработке!
Алгоритм
Для заданной транспортной сети
алгоритм Эдмондса-Карпа найходит поток максимальной величины из заданной вершины в заданную вершину .Псевдокод
Edmonds_Karp (G, s, t) for (для) каждого ребраdo while существует кратчайший путь из в в остаточной сети do for (для) каждого ребра do
Корректность алгоритма Эдмондса-Карпа
Алгоритм Эдмондса-Карпа является реализацией метода Форда-Фалкерсона. На каждой итерации цикла while поток в графе теореме Форда-Фалкерсона найденный поток максимальный. Оценка быстродействия будет проведена далее.
увеличивается вдоль одного из кратчайших путей в из истока в сток . Этот процесс повторяется до тех пор пока существует кратчайший путь в . Если в не существует кратчайшего пути из в , значит не существует никакого вообще никакого пути в следовательно поЛемма: |
Если в сети с источником и стоком увеличение потока производиться вдоль кратчайших путей в . То для всех вершин длина кратчайшего пути в остаточной сети не убывает после каждого увеличения потока. |
Доказательство: |
Предположим противное, пусть существует вершина , что после какого-то увеличения потока длина кратчайшего пути из в уменьшилась. Обозначим потоки до и после увеличения соответственно за и . Пусть — вершина, расстояние до которой минимально</tex> и уменьшилось с увеличением потока. Имеем . Рассмотрим путь , являющийся кратчайшим от к в . Тогда верно, что .По выбору и из предыдущего утверждения получаем, что .Предположим Пусть , тогда . Это противоречит . , но известно, что . Появление ребра после увеличения потока означает увеличение потока по обратному ребру . Увеличение потока производится вдоль кратчайшего пути, поэтому кратчайший путь из в вдоль которого происходило увеличения выглядит как , из чего получаем . Данное утверждение противоречит . Итак мы пришли к противоречию с существованием вершины , кратчайшее расстояние до которой уменьшилось с увеличением потока. |
Опираясь на предшествующую лемму докажем следующую теорему, которая ограничивает сверху число итераций цикла while в алгоритме Эдмондса-Карпа.
Теорема: |
Пусть для некоторой сети с источником и стоком выполняется алгоритм Эдмондса-Карпа, то общее число итераций цикла while составляет . |