Паросочетания-1 (4 сентября 2017)
- Введение
- Определения: паросочетание, совершенное паросочетание, вершинное покрытие, независимое множество, клика
- Сведения задач друг к другу: max клика = max независимое множество = min контролирующее множество
- Сложность задач: в произвольном графе класс задач clique NP-hard, в двудольном графе все задачи решаются
- Поиск паросочетания
- Дополняющая чередующаяся цепь: определение, увеличение паросочетания с помощью пути
- Лемма о дополняющем пути для произвольного графа
- Алгоритм поиска дополняющей цепи за O(E) (dfs в графе G')
- Техническая реализация: восстановление пути на обратном ходе рекурсии
- Алгоритм Куна за O(VE) (от каждой вершины искать лишь один раз). Доказательство от противного.
- Оптимизация Куна
- Не обнуляем пометки: время поиска паросочетания теперь равно O(kE)
- Обнуляем пометки за O(1)
- Жадная инициализация алгоритма Куна: ускорение в два раза
- Не обнуляем пометки даже после того, как успешно найдём путь.
- Поиск контролирующего и независимого множеств
- Лемма: ∀C, M : |C| ≥ |M|
- Алгоритм поиска за O(E) по паросочетанию: I = A+ + B-, C = A- + B+
- Мы искали дополняющий путь, но не нашли, поэтому Afree ⊂ A+; Bfree ⊂ B-
- I независимо (из A+ нет рёбер в B-), C контролирующее (как дополнение)
- |C| = |M| из конструкции выше, т.к. A- и B+ − разные концы рёбер паросочетания (разные т.к. нет рёбер из B+ в A-)
- Теорема Кёнига: min|C| = max|M|
- Обзор решений
- Двудольный граф: Куна за O(VE)
- Двудольный граф: Хопкрофт-Карп за O(EV1/2)
- Произвольный граф
- Произвольный граф: сжатие соцветий. Реализации Габова и Тарьяна за O(V3) и O*(VE).
- Произвольный граф: матрица Татта, Th о проверке за O(V3), алгоритм построения за O(V5)
- Произвольный граф: алгоритм Вазирани, O(EV1/2).