Потоки. Апогей. (30 сентября 2024)
- [20 минут] Алгоритм Диница поиска потока
- Алгоритм Диница: поиск дополняющего пути за O(V).
- Оценка времени O(V2E); спаривание с масштабированием, оценка времени O(VElogC).
- Диниц для единичных сетей: блокирующий поток за O(E), общее время O(VE).
- Хопркрофт-Карп для поиска паросочетания в двудольном графе, оценка O(EV1/2).
- Реализация Хопркрофта-Карпа.
- [20 минут] Остаточные сети и теоремы Каразанова
- Напоминание: рассмотрим любые два потока |f1| ≥ |f|, (f1 - f) − поток в Gf
- Карзанов #1: число фаз Диница не более C1/2, где C = ∑vc[v], c[v] = min(input[v],output[v])
- Карзанов #2: число фаз Диница не более (V2U)1/3, где U = maxe ce
- Доказательства: рассмотрим максимальный поток f* и поток fk после k фаз Диница. Рассмотрим декомпозицию (f* - fk), она состоит из путей длины хотя бы k
- Доказательство теоремы Карзанова #1: не более (∑vc[v]) / k путей.
- Доказательство теоремы Карзанова #2: не более minCut путей, minCut ≤ (V/k)2U.
− Перерыв −
- [10 минут] Модификая Диница с LinkCut-Tree за O(VElogV).
- Нарисуем дерево кратчайших путей с корнем в стоке.
- Возьмём путь от истока до стока. Как за O(logn) учесть этот путь?
- [30 минут] Глобальный разрез
- Алгоритм Штор-Вагнера за O(V3) и O(VE + V2logV) (Wagner, Stoer, 1997) (без доказательства)
- Алгоритм Каргера-Штейна, версия за O(V4)
- Алгоритм Каргера-Штейна, версия за O(V2log2V) (Karger, Stein, 1993)