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