Алгоритм масштабирования потока
Алгоритм масштабирования потока — алгоритм поиска максимального потока путём регулирования пропускной способности рёбер. Этот алгоритм работает в предположении, что все пропускные способности рёбер целые, так как они легко представимы в двоичном виде.
Содержание
Идея
Идея алгоритма в нахождении путей с высокой пропускной способностью в первую очередь, чтобы сразу сильно увеличивать поток по ним, а затем по всем остальным.
Пусть — граф, — максимальная пропускная способность. Запишем пропускную способность каждого ребра в двоичном виде. Тогда каждое число будет занимать бит.
Методом Форда-Фалкерсона находим поток для графа с урезанными пропускными способностями . Добавим следующий бит и находим следующее приближение для графа с новыми пропускными способностями .
После итерации получим ответ к задаче, так как после с каждым шагом приближение становится точнее.
Оценка сложности
| Утверждение: | 
| Время работы алгоритма — . | 
| На каждом шаге алгоритм выполняет в худшем случае увеличений потока. Докажем это. Пусть . В конце шага множество вершин графа можно разбить на две части: и . Все рёбра, выходящие из , имеют остаточную пропускную способность менее . Наибольшее количество рёбер между и равно . Следовательно, остаточный поток (поток, который может быть получен на оставшихся шагах) на фазе с текущим значением максимально составляет . Каждый увеличивающий путь при данном имеет пропускную способность как минимум . На предыдущем шаге, с масштабом , остаточный поток ограничен . Значит максимальное число появившихся увеличивающих путей равно . Увеличивающий путь можно найти за , используя BFS. Количество шагов . Итоговая сложность . | 
Псевдокод
Capacity-Scaling
    
    
    while 
        do while в  существует  путь с пропускной способностью большей 
               do  путь с пропускной способностью большей 
                  
                  увеличить поток по рёбрам  на 
                  обновить 
                  
           

