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