Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину — различия между версиями
Строка 30: | Строка 30: | ||
! rowspan=2 | Шаг !! rowspan=2 | Найденный путь !! rowspan=2 | Добавленный поток !! colspan=3 | Остаточные пропускные способности | ! rowspan=2 | Шаг !! rowspan=2 | Найденный путь !! rowspan=2 | Добавленный поток !! colspan=3 | Остаточные пропускные способности | ||
|- | |- | ||
− | ! < | + | ! <tex>e_1</tex> !! <tex>e_2</tex> !! <tex>e_3</tex> |
|- | |- | ||
− | | 0 || || || < | + | | 0 || || || <tex>r^0=1</tex> || <tex>r</tex> || <tex>1</tex> |
|- | |- | ||
− | | 1 || < | + | | 1 || <tex>\{ s, v_2, v_3, t \}</tex> || <tex>1</tex> || <tex>r^0</tex> || <tex>r^1</tex> || <tex>0</tex> |
|- | |- | ||
− | | 2 || < | + | | 2 || <tex>p_1</tex> || <tex>r^1</tex> || <tex>r^2</tex> || <tex>0</tex> || <tex>r^1</tex> |
|- | |- | ||
− | | 3 || < | + | | 3 || <tex>p_2</tex> || <tex>r^1</tex> || <tex>r^2</tex> || <tex>r^1</tex> || <tex>0</tex> |
|- | |- | ||
− | | 4 || < | + | | 4 || <tex>p_1</tex> || <tex>r^2</tex> || <tex>0</tex> || <tex>r^3</tex> || <tex>r^2</tex> |
|- | |- | ||
− | | 5 || < | + | | 5 || <tex>p_3</tex> || <tex>r^2</tex> || <tex>r^2</tex> || <tex>r^3</tex> || <tex>0</tex> |
|} | |} | ||
Версия 05:21, 15 января 2011
Алгоритм Форда-Фалкерсона — алгоритм, решающий задачу нахождения максимального потока в транспортной сети.
Содержание
Идея
Идея алгоритма заключается в следующем. Изначально величине потока присваивается значение 0: обхода в глубину (dfs). Процесс повторяется, пока можно найти увеличивающий путь.
для всех из . Затем величина потока итеративно увеличивается посредством поиска увеличивающего пути (путь от источника s к стоку t, вдоль которого можно послать ненулевой поток). В данной статье рассматривается алгоритм, осуществляющий этот поиск с помощьюРеализация
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, остаточные способности рёбер
, и имеют форму , и , соответственно, для какого-то натурального . Это значит, что мы можем использовать увеличивающие пути , , и бесконечно много раз, и остаточные пропускные способности этих рёбер всегда будут в той же форме. Полный поток после шага 5 равен . За бесконечное время полный поток сойдётся к , тогда как максимальный поток равен . Таким образом, алгоритм не только работает бесконечно долго, но даже и не сходится к оптимальному решению.Пример медленной работы алгоритма Форда-Фалкерсона с использованием поиска в глубину по сравнению с реализацией, использующей поиск в ширину
При использовании поиска в ширину алгоритму потребуется всего лишь 2 шага. Дана сеть (рис. 2).
Благодаря двум итерациям (рис. 3 и рис. 4)
рёбра
насытились лишь на 1. Конечная сеть будет получена ещё через 1998 итераций (рис. 5).См. также
Литература
Википедия: Алгоритм Форда — Фалкерсона Томас Х. Кормен и др. Алгоритмы: построение и анализ = INTRODUCTION TO ALGORITHMS. — 2-е изд. — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1