Я ищу быстрый алгоритм для расчета максимального потока в динамических графиках. то есть, учитывая граф и s , t ∈ V, мы имеем максимальный поток F в G от s к t . Затем новый / старый узел u добавляется / удаляется с соответствующими ему ребрами для формирования графа G 1 . Каков максимальный поток во вновь созданном графике? Есть ли способ предотвратить пересчет максимального расхода?
Любая предварительная обработка, которая не занимает много времени и памяти, приветствуется.
Простейшая идея - пересчитать поток.
Другая простая идея заключается в том, чтобы сохранить все пути расширения, которые использовались в предыдущем вычислении максимального потока, для добавления вершины мы можем найти простые пути (в обновленном графе пропускной способности на предыдущем шаге), которые начинаются с источника, идут к v, затем идут до места назначения, но проблема в том, что этот путь должен быть простым, я не мог найти лучше, чем O ( n ⋅ m ) для этого случая, для m = | E | , (Также обратите внимание, что если бы это был только один путь, это можно было бы сделать за O ( n + m ), но это не так.)
Также для удаления узла выше идея не работает.
Кроме того, я уже видел такие документы, как инкрементальный подход для ребер , но, кажется, они недостаточно хороши в этом случае, они превышают для каждого ребра и, кажется, не подходят для этого расширения (мы просто пересчитываем поток). Также в настоящее время я использую алгоритм максимального потока Форда-Фулкерсона. Если есть лучший вариант для онлайн-алгоритмов, это хорошо знать.