Алгоритм масштабирования потока — различия между версиями
(→Оценка сложности) |
(→Псевдокод) |
||
Строка 18: | Строка 18: | ||
увеличить поток по ребрам <tex>P</tex> на <tex>\delta</tex> | увеличить поток по ребрам <tex>P</tex> на <tex>\delta</tex> | ||
обновить <tex>G_f</tex> | обновить <tex>G_f</tex> | ||
+ | <tex>f\leftarrow f+\delta</tex> | ||
<tex>\Delta\leftarrow\Delta/2</tex> | <tex>\Delta\leftarrow\Delta/2</tex> | ||
'''return''' f | '''return''' f |
Версия 20:04, 15 января 2011
Алгоритм масштабирования потока - алгоритм поиска максимального потока путем регулирования пропускной способности ребер.
Суть
Этот алгоритм работает в предположении, что все пропускные способности ребер целые. Пусть есть граф
, . Пусть - максимальная пропускная способность. Введем параметр . Это большое число, к примеру, равное . На каждом шаге будем искать в остаточном графе увеличивающие пути с пропускной способностью не меньше и увеличивать поток вдоль этих путей. В конце шага будем уменьшать в два раза, и на следующем шаге будем искать увеличивающий путь с новым . При алгоритм масштабирования идентичен алгоритму Эдмондса - Карпа, поэтому алгоритм масштабирования корректен.Оценка сложности
На каждом шаге алгоритм выполняет BFS. Количество шагов . Итоговая сложность .
увеличений потока в худшем случае (т.к. минимальный разрез на каждом шаге меньше, чем ). Дополняющий путь можно найти за используяПсевдокод
Capacity-Scalingwhile while в существует путь найти путь увеличить поток по ребрам на обновить return f