Алгоритм масштабирования потока — различия между версиями
(→Оценка сложности) |
|||
Строка 6: | Строка 6: | ||
== Оценка сложности == | == Оценка сложности == | ||
− | На каждом шаге алгорит выполняет <tex>O(E)</tex> увеличений потока в худшем случае (т.к. минимальный разрез на каждом шаге меньше, чем <tex>2E\Delta</tex>). Дополняющий путь можно найти за <tex>O(E)</tex> используя BFS. Количество шагов <tex>O(log_2U)</tex>. Итоговая сложность <tex>O(E^2log_2U)</tex>. | + | На каждом шаге алгорит выполняет <tex>O(E)</tex> увеличений потока в худшем случае (т.к. минимальный разрез на каждом шаге меньше, чем <tex>2E\Delta</tex>). Дополняющий путь можно найти за <tex>O(E)</tex> используя [[Обход_в_ширину | BFS]]. Количество шагов <tex>O(log_2U)</tex>. Итоговая сложность <tex>O(E^2log_2U)</tex>. |
== Псевдокод == | == Псевдокод == |
Версия 22:53, 14 января 2011
Алгоритм масштабирования потока - алгоритм поиска максимального потока путем регулирования пропускной способности ребер.
Суть
Этот алгоритм работает в предположении, что все пропускные способности ребер целые. Пусть есть граф
, . Пусть - максимальная пропускная способность. Введем параметр . Это большое число, к примеру, равное . На каждом шаге будем искать в остаточном графе увеличивающие пути с пропускной способностью не меньше и увеличивать поток вдоль этих путей. В конце шага будем уменьшать в два раза, и на следующем шаге будем искать увеличивающий путь с новым . При алгоритм масштабирования идентичен алгоритму Эдмондса - Карпа, поэтому алгоритм масштабирования корректен.Оценка сложности
На каждом шаге алгорит выполняет BFS. Количество шагов . Итоговая сложность .
увеличений потока в худшем случае (т.к. минимальный разрез на каждом шаге меньше, чем ). Дополняющий путь можно найти за используяПсевдокод
Capacity-Scalingwhile while в существует путь найти путь увеличить поток по ребрам на обновить return f