Алгоритм масштабирования потока — различия между версиями
(→Суть) |
(→Псевдокод) |
||
Строка 13: | Строка 13: | ||
<tex>\Delta\leftarrow 2^{\lfloor\log_2U\rfloor}</tex> | <tex>\Delta\leftarrow 2^{\lfloor\log_2U\rfloor}</tex> | ||
'''while''' <tex>\Delta>0</tex> | '''while''' <tex>\Delta>0</tex> | ||
− | '''while''' в <tex>G_f</tex> существует <tex>s-t</tex> путь | + | '''while''' в <tex>G_f</tex> существует <tex>s-t</tex> путь с пропускной способностью большей <tex>\Delta</tex> |
− | + | <tex>P\leftarrow</tex> путь с пропускной способностью большей <tex>\Delta</tex> | |
− | <tex>\delta\leftarrow\min{ | + | <tex>\delta\leftarrow\min\{c_{ij}\colon(i,j)\in P\}</tex> |
увеличить поток по ребрам <tex>P</tex> на <tex>\delta</tex> | увеличить поток по ребрам <tex>P</tex> на <tex>\delta</tex> | ||
обновить <tex>G_f</tex> | обновить <tex>G_f</tex> |
Версия 20:22, 15 января 2011
Алгоритм масштабирования потока - алгоритм поиска максимального потока путем регулирования пропускной способности ребер.
Суть
Этот алгоритм работает в предположении, что все пропускные способности ребер целые. Пусть есть граф алгоритму Эдмондса - Карпа, поэтому алгоритм масштабирования корректен.
, . Пусть - максимальная пропускная способность. Введем параметр . Это большое число, к примеру, равное . На каждом шаге будем искать в остаточном графе увеличивающие пути с пропускной способностью не меньше и увеличивать поток вдоль этих путей. В конце шага будем уменьшать в два раза, и на следующем шаге будем искать увеличивающий путь с новым . При алгоритм масштабирования идентиченОценка сложности
На каждом шаге алгоритм выполняет BFS. Количество шагов . Итоговая сложность .
увеличений потока в худшем случае (т.к. минимальный разрез на каждом шаге меньше, чем ). Дополняющий путь можно найти за используяПсевдокод
Capacity-Scalingwhile while в существует путь с пропускной способностью большей путь с пропускной способностью большей увеличить поток по ребрам на обновить return f