Потоки-3 (7 апреля)
- Определение
- Остаточная сеть
- [не успеем] Блокирующий поток. Алгоритм Диница в терминах блокирующего потока.
- Вес, стоимость, цена, пропускная способность.
- Min Cost Flow - 1
- Задачи min cost circulation, min cost k-flow, min cost flow, min cost max flow
- Lm: любой макс поток можно получить из другого макс потока добавлением циркуляции в остаточной сети
- Lm: любую циркуляцию можно получить из любой другой добавлением циркуляции в остаточной сети
- Lm: mincost ⇔ не существует отрицательного цикла в остаточной сети
- Mincost k-flow → Mincost circulation → m × Mincost flow
- Решение задачи min cost circulation последовательным вычеркиванием циклов отрицательного веса. Алгоритм Клейна: ищем произвольный отрицательный цикл, увеличиваем по нему поток.
- Решение задачи min cost flow в графе без отрицательных циклов дополняющими путями. Алгоритм: ищем произвольный путь минимального минимального веса алгоритмом Форда-Беллмана.
- Доказательство корректности: разность потоков.
- Потенциалы и дейкстра. Mincost flow за O(FordBellman + |f|×Dijkstra)
- Задача о назначениях. Решение за O(V2E), решение за O(V3).
- Транспортная задача.
- Min Cost Flow - 2
- Mean cycle canceling: вычёркиваем не произвольный отрицательный цикл, а минимальный по среднему весу.
- Решение работает за O(nm × min(log(nC),mlogn) × FindCycle)
- FindCycle можно делать за O(logn), тогда получается алгоритм за O(nmlog(nC)logn)
- Capacity Scaling: ищем циклы/пути/циркуляцию, в графе с пропускными способностями u/2k. После чего уменьшаем k на 1.
- Эту идею можно применить к любому алгоритму для Mincost Circulation
- Итеративное добавление рёбер: Mincost Circulation = O(m * Mincost Flow)
- Cost Scaling: фаза − уменьшить минимальную стоимость с -С до -С/2 (процесс очень похож на алгоритм Гольдберга)
- Венгреский алгоритм
- Условие: ищем min по стоимости паросочетание совершенное в двудольном графе. Перестановка на матрице с min суммой.
- Критерий оптимальности: все числа в матрице неотрицательны, сумма равна нулю ⇒ минимальна
- Основные операции: к строке прибавить число, к столбцу прибавить число
- Венгерка = из каждой строки вычесть минимум + запустить Куна (первая доля − строки)
- Шаг Куна: взять все посещённые строки, все непосещённые столбцы, найти минимум, обнулить его, пойти в него