Изменения

Перейти к: навигация, поиск

Алгоритм масштабирования потока

2 байта добавлено, 22:26, 15 января 2011
Нет описания правки
== Оценка сложности ==
[[Файл:Scaling.jpg|right]]
На каждом шаге алгоритм выполняет в худшем случае <tex>O(E)</tex> увеличений потока. Докажем это. <tex>\Delta = 2^k</tex>. В конце шага множество вершин множество вершин можно разбить на две части: <tex>A_k</tex> и <tex>\overline{A_k}</tex>. Все ребра выходящие из <tex>A_k</tex> имеют остаточную пропускную способность менее <tex>2^k</tex>. Наибольшее количество ребер между <tex>A_k</tex> и <tex>\overline{A_k}</tex> равно <tex>E</tex>. Итого остаточный поток(поток, который может быть получен на оставшихся шагах) на текущей фазе с <tex>k</tex> максимально составляет <tex>2^kE</tex>. Каждый увеличивающий путь при данном <tex>k</tex> имеет пропускную способность как минимум <tex>2^k</tex>. На предыдущем шаге с масштабом <tex>k+1</tex> остаточный поток ограничен <tex>2^{k+1}E</tex>. Значит максимальное число появившихся увеличивающих путей равно <tex>2E</tex>. Увеличивающий путь можно найти за <tex>O(E)</tex>, используя [[Обход_в_ширину | BFS]]. Количество шагов <tex>O(\log_2U)</tex>. Итоговая сложность <tex>O(E^2log_2U2\log_2U)</tex>.
== Псевдокод ==
Анонимный участник

Навигация