Алгоритм масштабирования потока — различия между версиями
(→Псевдокод) |
(→Суть) |
||
Строка 3: | Строка 3: | ||
== Суть == | == Суть == | ||
− | Этот алгоритм работает в предположении, что все пропускные способности ребер целые. Пусть есть граф <tex>G</tex>, <tex>\forall (u,v)\in E\colon u_{(u,v)}\in\mathbb N</tex>. Пусть <tex>U</tex> - максимальная пропускная способность. Введем параметр <tex>\Delta</tex>. Это большое число, к примеру, равное <tex>U</tex>. На каждом шаге будем искать в остаточном графе увеличивающие пути с пропускной способностью не меньше <tex>\Delta</tex> и увеличивать поток вдоль этих путей. В конце шага будем уменьшать <tex>\Delta</tex> в два раза, и на следующем шаге будем искать увеличивающий путь с новым <tex>\Delta</tex>. При <tex>\Delta == 1</tex> алгоритм масштабирования идентичен алгоритму Эдмондса - Карпа, поэтому алгоритм масштабирования корректен. | + | Этот алгоритм работает в предположении, что все пропускные способности ребер целые. Пусть есть граф <tex>G</tex>, <tex>\forall (u,v)\in E\colon u_{(u,v)}\in\mathbb N</tex>. Пусть <tex>U</tex> - максимальная пропускная способность. Введем параметр <tex>\Delta</tex>. Это большое число, к примеру, равное <tex>U</tex>. На каждом шаге будем искать в остаточном графе увеличивающие пути с пропускной способностью не меньше <tex>\Delta</tex> и увеличивать поток вдоль этих путей. В конце шага будем уменьшать <tex>\Delta</tex> в два раза, и на следующем шаге будем искать увеличивающий путь с новым <tex>\Delta</tex>. При <tex>\Delta == 1</tex> алгоритм масштабирования идентичен [[Алоритм_Эдмондса-Карпа | алгоритму Эдмондса - Карпа]], поэтому алгоритм масштабирования корректен. |
== Оценка сложности == | == Оценка сложности == |
Версия 20:13, 15 января 2011
Алгоритм масштабирования потока - алгоритм поиска максимального потока путем регулирования пропускной способности ребер.
Суть
Этот алгоритм работает в предположении, что все пропускные способности ребер целые. Пусть есть граф алгоритму Эдмондса - Карпа, поэтому алгоритм масштабирования корректен.
, . Пусть - максимальная пропускная способность. Введем параметр . Это большое число, к примеру, равное . На каждом шаге будем искать в остаточном графе увеличивающие пути с пропускной способностью не меньше и увеличивать поток вдоль этих путей. В конце шага будем уменьшать в два раза, и на следующем шаге будем искать увеличивающий путь с новым . При алгоритм масштабирования идентиченОценка сложности
На каждом шаге алгоритм выполняет BFS. Количество шагов . Итоговая сложность .
увеличений потока в худшем случае (т.к. минимальный разрез на каждом шаге меньше, чем ). Дополняющий путь можно найти за используяПсевдокод
Capacity-Scalingwhile while в существует путь найти путь увеличить поток по ребрам на обновить return f