Определите, насколько увеличился бы максимальный поток, если бы я изменил пропускную способность одного ребра на бесконечность - PullRequest
0 голосов
/ 27 апреля 2020

Я читал об упражнении в книге по алгоритмам. Одно из упражнений: для данной сети потоков G=(s,t,V,E,U), где s - единственный источник, t - единственная цель, V - набор вершин, E - набор ребер (предполагается, что он направлен), и U - установленная емкость (предполагается, что неотрицательные целые числа) дают алгоритм для всех ребер (i,j) увеличения максимального расхода, если их емкость установлена ​​в бесконечность (емкости других ребер остаются неизменными, конечно).

Пусть m будет числом ребер и n числом вершин.

Самый наивный алгоритм - изменить емкость (i,j), а затем запустите Ford-Fulkerson и сравните новое значение потока. Этот алгоритм имеет сложность O (m ^ 3 n), предполагая, что мы принимаем реализацию Форда-Фулкерсона со сложностью O (m ^ 2 n).

Мое улучшение состоит в том, чтобы рассмотреть это:

  1. Запустите Ford-Fulkerson на исходном графике G и получите максимальный поток x.

  2. Получите остаточную сеть G(x). Найдите множество всех вершин S, к которым мы можем прийти из s (конечно, по пути с ненулевой емкостью).

  3. Для каждого ребра (i,j), если i=s и j=t, ответ - бесконечность; если i и j находятся одновременно в S или нет в S, ответ равен нулю; в противном случае мы повторно запустим Ford-Fulkerson в новой сети с измененными мощностями.

Обратите внимание, что улучшение в основном выполняется на шаге 3 и является улучшением, только если число ребер, соединяющих S и V\S мало. Для некоторых конкретных графиков сложность асимптотики c такая же, как и у простого алгоритма, описанного выше.

Есть ли лучшее улучшение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...