Mincost Потоки (2 октября 2017)
- Min Cost k-Flow в графе без отрицательных циклов
- Lm: mincost ⇔ не существует отрицательного цикла в остаточной сети
- Решение задачи min cost k-flow в графе без отрицательных циклов. Алгоритм: ищем произвольный путь min веса в остаточной сети алгоритмом Форда-Беллмана.
- Доказательство корректности: разность потоков.
- Потенциалы и Дейкстра. Mincost k-flow за O(FordBellman + k×Dijkstra)
- Задачи min cost circulation, min cost k-flow, min cost flow, min cost max flow
- Mincost k-flow = Flow + Mincost circulation
- Решение задачи min cost circulation. Алгоритм Клейна: ищем произвольный отрицательный цикл, увеличиваем по нему поток.
- Mincost flow: пользуемся леммой ``длина пути растёт'', получаем возрастающую производную функции W(|f|)
- Последовательный перебор |f|
- Бинпоиск по ответу
− Перерыв −
- Min Cost k-Flow: полиномиальное решение
- Mean cycle canceling: вычёркиваем не произвольный отрицательный цикл, а минимальный по среднему весу.
- Решение работает за O(nm × min(log(nC),mlogn) × FindCycle)
- FindCycle можно делать за O(logn), тогда получается алгоритм за O(nmlog(nC)logn)
- Capacity Scaling для mincost circulation у графа с целочисленными пропускными способностями
- FOR k=logU..0 DO FOR edge DO IF capacity[edge] & 2k THEN add(edge, 2k)
- Как добавить ребро? Если появился отрицательный цикл, он проходит по ребру, найдём его.
- Время работы = Dijkstra*m*logU
- Cost Scaling
- Фаза − уменьшить минимальную стоимость с -С до -С/2 (процесс очень похож на алгоритм Гольдберга)
- Что мы можем делать, чтобы уменьшить стоимости? Подкрутить потенциалы и толкнуть отрицательный цикл