Первое утверждение верно. Второе утверждение неверно.
G_f обозначает остаточную сеть G, c_f — пропускную способность в G_f. Насколько я знаю, это метод Форда-Фулкерсона:
1) Define: f(u,v) = 0, for all (u,v) in E.
2) while there exits a path p from s to t, in G_f:
3) c_f(p) = min{c_f(e) : for all e in p}
4) for (u,v) in p:
5) if (u,v) in E:
6) f(u,v) += c_f(p)
7) else:
8) f(u,v) -= c_f(p)
К концу процесса f является максимальным потоком. (Вы можете прочитать доказательство в «Введение в алгоритм», автор CLRS)
Время работы этого алгоритма равно O(X(V+E)), где X — количество итераций цикла while.
Теперь мы можем найти p в строке (2) с помощью поиска BFS. Такой метод гарантирует, что мы повторяем цикл while O (VE) раз. Эта реализация также известна как алгоритм Эдмондса-Карпа. Таким образом, общее время работы составляет: O(VE*(E+V)).
Это должно ответить на ваш первый вопрос: мы всегда можем найти максимальный поток, увеличивая пути s-t за полиномиальное время.
О вашем втором вопросе: рассмотрите граф G, где все емкости имеют значение 1. Ясно, что максимальное значение потока меньше, чем |E|.
Поскольку каждая итерация цикла while увеличивает текущее значение потока f на положительное целое число (фактически на единицу. Если вам нужно доказательство, обратитесь к CLRS), мы имеем, что цикл while выполняет не более |E| раз. Таким образом, у нас есть время работы O (E * (E + V), независимо от того, как мы выбираем увеличивающие пути. Этот график противоречит второму утверждению.
person
NG_
schedule
29.10.2019