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