Потоки. Доказательства.
- Лемма [без док-ва]: после bfs-а длины путей только увеличиваются (d[S,v] и d[v,T]).
- Эдмондс: каждый раз одно ребро насыщается, каждое ребро рассыщается не более V/2 раз
- Масштабирование: на каждой из log фаз есть разрез, через него проходят не более E путей
Потоки. Алгоритм Диница.
- Алгоритм Диница за O(V2E)
- Фаза = найти все пути длины D (где D --- расстояние от S до T)
- Разоббем граф на слои, любой кратчайший путь --- путь по слоям.
- Обычный dfs работает за время O(E), везучий dfs работает за время O(V)
- Главная модивикация: если dfs-у не повезло, можно удалить после себя ребро.
- Время работы dfs = V + удаление ребер, поэтому одная фаза работает за V*k + E, где k --- количество путей.
- Время работы алгоритма Диница = V * (время работы одной фазы) = O(V2E)
- Диница + масштабирование: на каждой из log итераций суммарное время работы всех dfs = VE (поиск путей) + VE (удаление ребер)
- Алгоритм Диница + масштабирование работает O(VElogMax)
- Хопкрофт-Карп за O(EsqrtV)
- Идея: применяем алгоритм Диница к задаче про паросочетание
- Док-во: после первых sqrt(V) фаз (каждая из которых работает за O(E)) остается не более sqrt(N) дополняющих путей
Паросочетание
- Паросочетание. Совершенное паросочетание. Задача о максимальном паросочетании (M).
- Задачи о минимальном контролирующем множестве (C) и максимальном независимом множестве (N). Двойтсвенность. |M| >= |C|.
- Лемма о дополняющем чередующемся пути: если пути нет, паросочетание максимально. Лемма верная для произвольного графа.
- Доказательство леммы через симметрическую разность (состоит из путей и циклов).
- Поточное доказательство того, что |M| = |C| (смотрим на двудольный граф, ищем поток, видим биекцию matching-flow, cut-cover).
- Способ получать C и N из M и пометок последнего dfs-а (N = A+ and B-, C = A- and B+).
- Конструктивное доказательство того, что |M| = |C|.
- Простой алгоритм поиска дополняющего пути.
- Получили алгоритм за O(VE). Улучшим его до Алгоритма Куна, тоже O(VE), но проще в реализации и меньше константа.
- Напоминание: а еще вы знаете алгоритм Хопкрофта-Карпа и умеете искать паросочетание за времы O(EsqrtV).
Задачи
- [matching] Задачка про такси, сведение к паросочетанию.
- [matching] Покрытие ацикличного графа цепями
- [cover] Замощение грида минимальным числом палок 1xN
- [independent set] party
- [max clique] birthday
Про раскраску графов
- Вершины гарфа можно покрасить в maxDeg + 1 цветов
- Теорема Визинга: min число цветом, в котороые можно покрасить ребра --- или maxD, или maxD + 1
- Для двудольного графа: ребра можно раскрасить в maxDeg цвет.
- Лемма Холла (совершенное паросочетание существует тогда и только тогда).
- k-регулярный граф по Лемме Холла имеет совершенное паросочетание.
- k-полурегулярный граф по Лемме Холла имеет совершенное паросочетание.
- Алгоритмы раскраски ребер произвольного двудольного графа.
- Простой алгоритм: дополним до регулярного, раскрасим
- Кратные ребра разрешены
- Алгоритмы раскраски ребер двудольного регулярного графа.
- Простой: ищем паросочетание D раз = O(D*Matching)
- Если D = 2k, то можно k раз найти эйлеров цикл и разбить граф на 2. O(ElogD)
- Если D - произвольно, то можно нечетное уменьшать на 1, а четное делить попалам = O(logD*Matching)
- Not read Эйлерово разбиение графа на 2 части (степень делится пополам, нечетное округляется куда-нибудь)
- Not read Алгоритм построения максимального паросочетания в регулярном графе за O(ElogV): разбить граф эйлерово + перебаллансировать.
- Not read Алгоритм покраски полурегулярного графа = D-- такое же, а D /= 2: разбить граф эйлерово.
- Not read Асимптотика = O(ElogDlogV) для всех видом графов (Регулярный, Полурегулярный, Произвольный)
- Not read Редукция регулярного графа из E = VD/2 ребер в граф из VlogD ребер, в котором также существует max паросочетание.
- Not read Теперь алгоритм для регулярного графа работает за O(ElogV).
MinCost Потоки.
- Улучшенные алгоритмы поиска пути: Форд-Белман с очередью и Дейкстра.
- Потенциалы и Дейкстра.
- Нахождение паросочетания миимального веса в двудольном графе с помощью mincost потока за O(V3).