Алгоритм масштабирования потока — различия между версиями
(→Алгоритм) |
(→Оценка времени работы) |
||
Строка 21: | Строка 21: | ||
Время работы алгоритма {{---}} <tex> O(E^2 \log U) </tex>. | Время работы алгоритма {{---}} <tex> O(E^2 \log U) </tex>. | ||
|proof= | |proof= | ||
− | Пусть <tex> S = \{2^{\lfloor \log_2 U \rfloor}, \ldots, 2^k, \ldots, 2, 1, 0\} </tex> {{---}} множество | + | Пусть <tex> S = \{2^{\lfloor \log_2 U \rfloor}, \ldots, 2^k, \ldots, 2, 1, 0\} </tex> {{---}} множество масштабов. Тогда <tex> |S| </tex> {{---}} количество итераций алгоритма. |
{{Лемма | {{Лемма | ||
Строка 36: | Строка 36: | ||
2 | 2 | ||
|statement= | |statement= | ||
− | Количество | + | Количество дополняющих путей с масштабом <tex> 2^k </tex> не превосходит <tex> 2E </tex>. |
|proof= | |proof= | ||
− | Каждый | + | Каждый дополняющий путь имеет пропускную способность не меньше <tex> 2^k </tex>. |
− | На предыдущей итерации поток ограничен значением <tex> 2^{k + 1} E </tex> по предыдущей лемме. Следовательно, количество дополняющих путей не превосходит <tex> 2E </tex>. | + | На предыдущей итерации дополняющий поток ограничен значением <tex> 2^{k + 1} E </tex> по предыдущей лемме. Следовательно, количество дополняющих путей не превосходит <tex> 2E </tex>. |
}} | }} | ||
Строка 48: | Строка 48: | ||
Общее количество увеличивающих путей не превышает <tex> O(E \log U) </tex>. | Общее количество увеличивающих путей не превышает <tex> O(E \log U) </tex>. | ||
|proof= | |proof= | ||
− | Следует из предыдущей леммы и факта, что количество | + | Следует из предыдущей леммы и факта, что количество итераций {{---}} <tex> O(\log U) </tex>. |
}} | }} | ||
Версия 01:40, 29 февраля 2012
Алгоритм
Пусть дана сеть , все ребра которой имеют целочисленную пропускную способность. Обозначим за максимальную пропускную способность: .
Идея алгоритма заключается в нахождении путей с высокой пропускной способностью в первую очередь, чтобы сразу сильно увеличивать поток по ним, а затем по всем остальным. Для этого воспользуемся масштабом
. Изначально положим .На каждой итерации в дополняющей сети находим дополняющие пути с пропускной способностью не меньшей , увеличиваем поток вдоль них. Уменьшив масштаб в раза, переходим к следующей итерации.
Количество необходимых дополнений путей, основанных на кратчайших путях, может быть много больше количества дополнений, основанных на путях с высокой пропускной способностью.
Корректность алгоритма
Заметим, что при Эдмондса-Карпа, вследствие чего является корректным.
алгоритм вырождается в алгоритмОценка времени работы
Утверждение: | ||||||||||||||
Время работы алгоритма — . | ||||||||||||||
Пусть — множество масштабов. Тогда — количество итераций алгоритма.
| ||||||||||||||
Псевдокод
Max_Flow_By_Scaling(G,s,t)while do while в существует увеличивающий путь с пропускной способностью не меньшей do увеличить поток по рёбрам на обновить return