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