Бонусная лекция. Глобальные разрезы (13 марта 2014)
- Формулировка. Разбить V на S + T: C(S, T) = min
- Наивный алгоритм: перебрать s, найти minCut(1, s)
- Алгоритм Штор-Вагнера за O(n*Dijkstra)
- Найдем какие-то s, t и minCut(s, t), после этого или Answer = minCut(s, t), или s и t можно стянуть в одну вершину
- A1 = {1}, Ai+1 = Ai + {ai = вершина с минимальной суммой пропускных способностей по ребрам из нее в Ai}
- t = an, s = an-1. minCut(t, s) : T = {t}, S = V - {t}
- Вероятностный алгоритм Каргера-Штейнера за O(n2logn) с вероятностью успеха 1/2
- Все пропускные способности равны 1, но разрешены мультиребра. Если хотим добавить ребро целой пропускной способности k, добавляем k единичных ребер.
- min deg = k. global min cut ≤ k. |E| ≥ |V|k/2
- выберем случайное ребро, с вероятностью minCut/E ≤ k/E = 2/|V| оно лежит в мин.разрезе, иначе его концы можно стянть в одну вершину
- Алгоритм #1: стягиваем, пока не останется 2 вершины, вероятность того, что ни разу не ошиблись = (|V|-2)/|V| * (|V|-3)/(|V|-1) * ... = Θ(|V|-2)
- Повторим этот процесс |V|2 раз, получим алгоритм за |V|4 с вероятностью успеха 1/2
- Алгоритм #2: делаем первые |V|/2 стягиваний, а затем ветвимся. После |V|/2 стягиваний, мы нигде не ошиблись с вероятностью 1/4. В этот делаем два рекурсивных запуска.
- Получили pk = 1/4 * (1 - (1 - pk-1)2), pk ≈ 1/k, т.е. вероятность успеха = 1/log|V|
- T(n) = n2 + 2T(n/2), докажем, что T(n) ≤ 2n2
- Итого алгоритм с временем работы n2logn и вероятностью успеха 1/2