Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.58 Mб
Скачать

[Править]Оценка производительности

Добавляя поток увеличивающего пути к уже имеющемуся потоку, максимальный поток будет получен, когда нельзя будет найти увеличивающий путь. Тем не менее, если величина пропускной способности — иррациональное число, то алгоритм может работать бесконечно. В целых числах таких проблем не возникает и время работы ограничено  , где   — число рёбер в графе,   — максимальный поток в графе, так как каждый увеличивающий путь может быть найден за   и увеличивает поток как минимум на 1.

[Править]Пример несходящегося алгоритма

рис. 1

Рассмотрим приведённую справа сеть, с источником  , стоком  , пропускными способностями рёбер   и   соответственно   и   и пропускной способностью всех остальных рёбер, равной целому числу  . Константа   выбрана так, что  . Мы используем пути из остаточного графа, приведённые в таблице, причём   и  .

Шаг

Найденный путь

Добавленный поток

Остаточные пропускные способности

0

1

2

3

4

5

Заметим, что после шага 1, как и после шага 5, остаточные способности рёбер  ,   и   имеют форму   и  , соответственно, для какого-то натурального  . Это значит, что мы можем использовать увеличивающие пути  ,  ,   и   бесконечно много раз, и остаточные пропускные способности этих рёбер всегда будут в той же форме. Полный поток после шага 5 равен  . За бесконечное время полный поток сойдётся к  , тогда как максимальный поток равен  . Таким образом, алгоритм не только работает бесконечно долго, но даже и не сходится к оптимальному решению.

[править]Пример медленной работы алгоритма Форда-Фалкерсона с использованием поиска в глубину по сравнению с реализацией, использующей поиск в ширину

При использовании поиска в ширину алгоритму потребуется всего лишь 2 шага. Дана сеть (рис. 2).

рис. 2

Благодаря двум итерациям (рис. 3 и рис. 4)

рис. 3

рис. 4

рёбра   насытились лишь на 1. Конечная сеть будет получена ещё через 1998 итераций (рис. 5).

рис. 5

    Алгоритм Эдмондса-Карпа

Алгоритм

Для заданной сети   алгоритм Эдмондса-Карпа находит поток максимальной величины из заданного истока   в заданный сток   за  .

[править]Псевдокод

Edmonds_Karp (G, s, t)

for (для) каждого ребра

do

while существует кратчайший путь из в в остаточной сети

do

for (для) каждого ребра

do

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]