Динамика по подмножествам, по профилю (2 декабря 2019)
- Задача: покрасить вершины графа в минимальное число цветов
- Напоминание: умеем за 3n + 2nn2
- 2nn2 → 2n (можно ещё раз, если уже было)
- Алгоритм перебора всех максимальных по включению за 3n/3 = 1.44n
- Покраска вершин, описание решения за O(2.44n). Доказательство: (1+1.44)n
- Задачи на подмножествах
- [есть в прошлом теордз!] Рюкзак (Set Cover: покрыть множество {0,1,...,n-1} минимальным числом множеств из набора A1,...,Am
- Перевёрнутая битовая запись числа (001101 → 101100)
− Перерыв −
- Meet-In-The-Middle
- Решение задачи о рюкзаке
- Выбрать подмножество заданной суммы за 2n/2 (2 способа: сортировка, хеш-таблица)
- Выбрать подмножество веса до W максимальной стоимостью за 2n/2n (сортировка и префиксный минимум)
- Решение задачи о поиске максимальной клики (подводка к кликам: выбрать дружную компанию на день рождения)
- За 2n
- Классический Meet-In-The-Middle. 2n/2n (до 2n/2 можно не оптимизировать)
- Перебор (две ветки: берём или не берём) с отсечением запоминанием + док-во того, что не более 2n/2 состояний
- DP и скошенный профиль через рекурсию (задача про доминошки)
- Перебор за O(2wh/2) go(x,y), если клетка уже покрыта, пропускаем, иначе 2 варианта
- Запоминание → получили динамику → доказали число состояний O(2w,h}wh), улучшили до O(2min(w,h)wh)
- Из доказательства видно, что можно хранить не map, а массив f[w,h,2w]
- Как в общем случае кодировать матрицу? Матрица → битовое число длины wh → остаток по модулю (1018+3)