Теория по паросочетаниям (7 апреля)
- Введение
- Определения: паросочетание, совершенное (полное) паросочетание, контролирующее множество, независимое множество, клика
- Сведения задач друг к другу: max клика = max независимое множество = min контролирующее множество
- Поиск паросочетания
- Дополняющая чередующаяся цепь: определение, увелечение паросочетания с помощью пути
- Лемма о дополняющем пути для произвольного графа
- Алгоритм поиска дополняющей цепи за O(E) = dfs в орграфе (не писать код dfs-а)
- Алгоритм Куна за O(VE) (от каждой вершины искать лишь один раз)
- Оптимизация Куна
- Оптимизация Куна до O(|M|×E)
- Жадная инициализация алгоритма Куна: ускорение в два раза
- Поиск контролирующего и независимого множеств
- Лемма: ∀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-)
- Лемма Холла
- Доказательство Куном
- В регулярном графе есть совершенное паросочетание (док-во Холлом, док-во Кёнигом)
Практика по паросочетаниям (7 апреля)
- Кодим
- Паросочетание [code] (код можно писать на доске)
- Контролирующее множество [code] (код можно писать на доске)
- Задачи
- Максимальная двудольная клика (matching)
- Выбрать такое множество вершин первой доли, чтобы |A| - |N(A)| было максимально. Здесь N(A) − количество соседей (independent set)
- Выбрать макс число попарно несмежных клеток на дырчатой шахматной доске (independent set)
- Нарисовать чёрно-белый шедевр минимальным числом, возможно перекрывающихся, чёрных мазков (cover)
- Удаление орграфа, за ход можно удалить или входящие в v, или исходящие из v рёбра (cover)
- [не успеем] Максимальное мультипаросочетание в произвольном графе (выбрать рёбра так, чтобы у любой вершины степень ≤ 2).
- [не успеем] Покрытие вершин орграфа простыми непересекающимися циклами (раздвоили вершины, matching)
- [не успеем] Покрытие вершин ацикличного орграфа минимальным числом путей (раздвоили вершины, matching)
- [не успеем] Есть самолёты (время вылета, вместимость). Есть пассажиры (отрезок допустимых времён вылета). Сделать так, чтобы все пассажиры улетели.
- [не успеем] Есть прямые. Выбрать максимальное подмножество так, чтобы не было параллельных и имеющих одинаковый y пересечения c x=0.