Алгоритм масштабирования потока — различия между версиями
(→Оценка времени работы) |
|||
Строка 32: | Строка 32: | ||
[[Файл:Scaling.jpg|250px|thumb|right|Разрез <tex> \langle A, \overline{A} \rangle </tex>.]] | [[Файл:Scaling.jpg|250px|thumb|right|Разрез <tex> \langle A, \overline{A} \rangle </tex>.]] | ||
Пусть вершина <tex> s </tex> — [[Определение_сети,_потока#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.B5.D1.82.D0.B8|источник]] графа, вершина <tex> t </tex> — [[Определение_сети,_потока#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.B5.D1.82.D0.B8|сток]]. | Пусть вершина <tex> s </tex> — [[Определение_сети,_потока#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.B5.D1.82.D0.B8|источник]] графа, вершина <tex> t </tex> — [[Определение_сети,_потока#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D1.81.D0.B5.D1.82.D0.B8|сток]]. | ||
− | [[Дополняющая_сеть,_дополняющий_путь|Дополняющая сеть]] <tex> G_{f_0} </tex> — [[Отношение_связности,_компоненты_связности#.D0.A1.D0.BB.D1.83.D1.87.D0.B0.D0.B9_.D0.BE.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_.D0.B3.D1.80.D0.B0.D1.84.D0.B0|несвязна]]. Обозначим за <tex> A </tex> компоненту связности графа, содержащую вершину <tex> s </tex>. Тогда <tex> t \notin A </tex>. Источник и сток лежат в разных компонентах связности, значит <tex> c_{0_{f_0}}(A, \overline{A}) = c_0(A, \overline{A}) - f_0(A, \overline{A}) = 0 </tex>. | + | [[Дополняющая_сеть,_дополняющий_путь|Дополняющая сеть]] <tex> G_{0_{f_0}} </tex> — [[Отношение_связности,_компоненты_связности#.D0.A1.D0.BB.D1.83.D1.87.D0.B0.D0.B9_.D0.BE.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D0.BE.D0.B3.D0.BE_.D0.B3.D1.80.D0.B0.D1.84.D0.B0|несвязна]]. Обозначим за <tex> A </tex> компоненту связности графа, содержащую вершину <tex> s </tex>. Тогда <tex> t \notin A </tex>. Источник и сток лежат в разных компонентах связности, значит <tex> c_{0_{f_0}}(A, \overline{A}) = c_0(A, \overline{A}) - f_0(A, \overline{A}) = 0 </tex>. |
Следовательно, в сети <tex> G_1 </tex> с пропускными способностями <tex> c_1 </tex>: | Следовательно, в сети <tex> G_1 </tex> с пропускными способностями <tex> c_1 </tex>: |
Версия 02:54, 17 января 2012
Алгоритм
Пусть дана сеть , все ребра которой имеют целочисленную пропускную способность. Обозначим за максимальную пропускную способность: .
Если записать пропускную способность любого ребра в двоичном виде, то длина полученной битовой последовательности не будет превышать
бит, а значение пропускной способности определяется формулой: .Идея алгоритма заключается в нахождении путей с высокой пропускной способностью в первую очередь, чтобы сразу сильно увеличивать поток по ним, а затем по всем остальным.
Методом Форда-Фалкерсона находим поток для сети с урезанными пропускными способностями . Добавим следующий бит и находим следующее приближение для графа с новыми пропускными способностями .
После
итерации получим ответ к задаче, так как .Оценка времени работы
Утверждение: | ||||||||||||
Время работы алгоритма — . | ||||||||||||
Докажем, что время работы каждой итерации — .
| ||||||||||||