Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину — различия между версиями
| Строка 48: | Строка 48: | ||
=== Пример медленной работы алгоритма Форда-Фалкерсона с использованием поиска в глубину по сравнению с реализацией, использующей поиск в ширину === | === Пример медленной работы алгоритма Форда-Фалкерсона с использованием поиска в глубину по сравнению с реализацией, использующей поиск в ширину === | ||
При использовании поиска в ширину алгоритму потребуется всего лишь 2 шага. | При использовании поиска в ширину алгоритму потребуется всего лишь 2 шага. | ||
| − | + | Дана сеть (рис. 1). | |
| + | [[Файл:F-f.1.png|thumb|center|рис. 1]] | ||
| + | Благодаря двум итерациям (рис. 2 и рис. 3) | ||
| + | [[Файл:F-f.2.png|thumb|center|рис. 2]] | ||
| + | [[Файл:F-f.3.png|thumb|center|рис. 3]] | ||
| + | рёбра <tex>AB, AC, BD, CD</tex> насытились лишь на 1. | ||
| + | Конечная сеть будет получена ещё через 1998 итераций (рис. 4). | ||
| + | [[Файл:F-f.4.png|thumb|center|рис. 4]] | ||
== См. также == | == См. также == | ||
* [[Теорема Форда-Фалкерсона]] | * [[Теорема Форда-Фалкерсона]] | ||
| + | |||
| + | == Литература == | ||
| + | Томас Х. Кормен и др. Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1 | ||
| + | |||
| + | [[Категория: Алгоритмы и структуры данных]] | ||
| + | [[Категория: Задача о максимальном потоке ]] | ||
Версия 01:13, 22 декабря 2010
Алгоритм Форда — Фалкерсона — алгоритм, решающий задачу нахождения максимального потока в транспортной сети.
Содержание
Идея
Идея алгоритма заключается в следующем. Изначально величине потока присваивается значение 0: для всех из . Затем величина потока итеративно увеличивается посредством поиска увеличивающего пути (путь от источника s к стоку t, вдоль которого можно послать больший поток). В данной статье рассматривается алгоритм, осуществляющий этот поиск с помощью обхода в глубину (dfs). Процесс повторяется, пока можно найти увеличивающий путь.
Реализация
dfs(u, Cmin) {
if (u = t)
return Cmin
u.vis <- true
for (uv in E)
if (!v.vis) && (uv.f < uv.c)
дельта <- dfs(v, min(Cmin, uv.c - uv.f))
if (дельта > 0) {
uv.f += дельта
uv.backEdge.f -= дельта
return дельта
}
}
Оценка производительности
Добавляя поток увеличивающего пути к уже имеющемуся потоку, максимальный поток будет получен, когда нельзя будет найти увеличивающий путь. Тем не менее, если величина пропускной способности — иррациональное число, то алгоритм может работать бесконечно. В целых числах таких проблем не возникает и время работы ограничено , где — число рёбер в графе, — максимальный поток в графе, так как каждый увеличивающий путь может быть найден за и увеличивает поток как минимум на 1.
Пример несходящегося алгоритма
Рассмотрим приведённую справа сеть, с источником , стоком , пропускными способностями рёбер , и соответственно , и и пропускной способностью всех остальных рёбер, равной целому числу . Константа выбрана так, что . Мы используем пути из остаточного графа, приведённые в таблице, причём , и .
| Шаг | Найденный путь | Добавленный поток | Остаточные пропускные способности | ||
|---|---|---|---|---|---|
| 0 | |||||
| 1 | |||||
| 2 | |||||
| 3 | |||||
| 4 | |||||
| 5 | |||||
Заметим, что после шага 1, как и после шага 5, остаточные способности рёбер , и имеют форму , and , соответственно, для какого-то натурального . Это значит, что мы можем использовать увеличивающие пути , , и бесконечно много раз, и остаточные пропускные способности этих рёбер всегда будут в той же форме.Полный поток после шага 5 равен . За бесконечное время полный поток сойдётся к , тогда как максимальный поток равен . Таким образом, алгоритм не только работает бесконечно долго, но даже и не сходится к оптимальному решению.
Пример медленной работы алгоритма Форда-Фалкерсона с использованием поиска в глубину по сравнению с реализацией, использующей поиск в ширину
При использовании поиска в ширину алгоритму потребуется всего лишь 2 шага. Дана сеть (рис. 1).
Благодаря двум итерациям (рис. 2 и рис. 3)
рёбра насытились лишь на 1. Конечная сеть будет получена ещё через 1998 итераций (рис. 4).
См. также
Литература
Томас Х. Кормен и др. Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1