Игры на графах и битовое сжатие (5 мая)
- Чуть-чуть битового сжатия
- Хранение множеств: сортированный массив, битсет
- unisgned long long = 64 бита = битсет из 64 элементов
- Операции с множествами: O(n+m), O(C/w) (C − диапазон чисел, w − машинное слово)
bitset<C>
− внутри содержит массив длины C/w+1, позволяет писать "битовое сжатие"
- Задача: умножение булевых матриц за O(n3/w)
- Игры на ацикличных графах
- Определение игры. Выигрышная, проигрышная позиция
- Динамика
- функция Гранди (формальное определение, подсчёт динамикой)
- mex за O(deg), функция Гранди за O(E)
- G[v] == 0 ⇔ LOSE[v]
- Теорема Гранди
- Определение: прямая сумма игр
- Формулировка: G[v,u] = G[v] xor G[u]
- Игра Ним. Функция Гранди для Нима. Доказательство для Нима из двух кучек.
- Доказательство для произвольных двух игр.
- Доказательство для произвольных k игр.
- Ретроанализ
- Наивный алгоритм (начальное состояние: какие-то вершины проигрышные, какие-то выигрышные)
- Реализация за O(E)
- Длина игры
- Игра на супер большом дереве
- Формулировка задачи, откуда берутся такие деревья
- Подсчёт результата игры динамикой за O(2n)
- Отсечение рандомом, оценка времени работы T(n) = 2T(n-2) + 0.5T(n-1) ≤ 1.687n