Алгоритм масштабирования потока — различия между версиями
 (→Идея)  | 
				 (→Оценка сложности)  | 
				||
| Строка 29: | Строка 29: | ||
Сложность первой итерации алгоритма — <tex> O(E^2) </tex>.  | Сложность первой итерации алгоритма — <tex> O(E^2) </tex>.  | ||
|proof=  | |proof=  | ||
| − | На первом шаге ребра имеют пропускную способность <tex> 1 </tex>. Значит, <tex> |f_0| \leq V </tex>. Поиск каждого дополнительного пути требует <tex> O(E) </tex> времени, а их количество не больше <tex> V </tex>. Итоговая сложность первой итерации — <tex> O(VE) \leq O(E^2) </tex>  | + | На первом шаге ребра имеют пропускную способность <tex> 1 </tex>. Значит, <tex> |f_0| \leq V </tex>. Поиск каждого дополнительного пути требует <tex> O(E) </tex> времени, а их количество не больше <tex> V </tex>. Итоговая сложность первой итерации — <tex> O(VE) \leq O(E^2) </tex>.  | 
}}  | }}  | ||
| Строка 46: | Строка 46: | ||
<tex> \langle A, \overline{A} \rangle </tex> — [[Разрез,_лемма_о_потоке_через_разрез|разрез]], значит:  | <tex> \langle A, \overline{A} \rangle </tex> — [[Разрез,_лемма_о_потоке_через_разрез|разрез]], значит:  | ||
<tex> |f'_1| = f'_1(A, \overline{A}) \leq c(A, \overline{A}) \leq E, f_1 = f_0 + f'_1 </tex>.  | <tex> |f'_1| = f'_1(A, \overline{A}) \leq c(A, \overline{A}) \leq E, f_1 = f_0 + f'_1 </tex>.  | ||
| − | Пропускная способность каждого дополняющего пути не меньше <tex> 1 </tex>, а поиск каждого занимает <tex> O(E) </tex> времени. Значит, итоговое время работы — <tex> O(E^2) </tex>  | + | Пропускная способность каждого дополняющего пути не меньше <tex> 1 </tex>, а поиск каждого занимает <tex> O(E) </tex> времени. Значит, итоговое время работы — <tex> O(E^2) </tex>.  | 
}}  | }}  | ||
| − | Оценка сложности остальных итераций доказывается аналогично второму случаю. Количество итераций — <tex> O(\log U) </tex>. Значит, общая сложность алгоритма — <tex> O(E^2 \log U) </tex>  | + | Оценка сложности остальных итераций доказывается аналогично второму случаю. Количество итераций — <tex> O(\log U) </tex>. Значит, общая сложность алгоритма — <tex> O(E^2 \log U) </tex>.    | 
}}  | }}  | ||
Версия 06:35, 20 декабря 2011
| Определение: | 
| Алгоритм масштабирования потока — алгоритм поиска максимального потока путём регулирования пропускной способности рёбер. Этот алгоритм работает в предположении, что все пропускные способности рёбер целые, так как они легко представимы в двоичном виде. | 
Идея
Идея алгоритма заключается в нахождении путей с высокой пропускной способностью в первую очередь, чтобы сразу сильно увеличивать поток по ним, а затем по всем остальным.
Пусть дан граф с целыми пропускными способностями: . — максимальная пропускная способность. Запишем пропускную способность каждого ребра в двоичном виде. Тогда каждое число будет занимать бит.
Методом Форда-Фалкерсона находим поток для графа с урезанными пропускными способностями . Добавим следующий бит и находим следующее приближение для графа с новыми пропускными способностями .
После итерации получим ответ к задаче.
Оценка сложности
| Утверждение: | ||||||||||||
Сложность алгоритма — .  | ||||||||||||
|  
 Докажем, что сложность каждой итерации — . 
 
  | ||||||||||||