День 6. NP-трудные задачи (3 января)
- [Сережа.М] Динамика по подмножествам
- Формулировки: независимое множество, клика, задачи вершинной раскраски
- Битовые операции с множествами (пересечение, объединение, разность, i-й бит, вкладывается ли)
- Перебор множеств, перебор старшего бита, для каждого множества посчитать число элементов (бит), сумму весов элементов
- Раскраска графа в минимальное число цветов за O(3n) и предподсчет за O(2n) для каждого множества, независимое ли оно.
- Гамильтонов путь, цикл за O(2nn2), O(2nn)
- Для каждого множества посчитать количество подклик за O(2n)
- Найти количество подклик и max подклику за O(2n/2)
- [Сережа.K] NP-hard задачи
- Общие слова
- Формула включения-исключения
- Гамильтонов путь за O*(2n) с полиномиальной памятью
- Раскраска графа в минимальное число цветов O*(2n) с полиномиальной памятью
- vertex cover размера k за O(n + m + 1.325k × Poly(k))
- Алгоритм за O(2k)
- Расщепление по вершине максимальной степени, T(k) = T(k-1) + T(k-deg), решение реккурентных соотношений бинраным поиском
- Избавляемся от вершин степени 1 ⇒ T(k) = T(k-1) + T(k-2) = 1.62n = Fibn
- Избавляемся от вершин степени 2 ⇒ T(k) = T(k-1) + T(k-3) = 1.47n
- Пусть есть вершина степени 3 ⇒ T(k) = max(T(k-1) + T(k-4), T(k-2) + T(k-3)) = max((1,4); (2,3)) 1.38n
- [не успеем] Пусть есть вершина степени хотя бы 5 ⇒ (1,5) = 1.325k
- [не успеем] Пусть все вершины степени 4 ⇒ ((1+2,1+4),4) = 1.325k
- Рандом
- Тест на изоморфность графов, в среднем хорошо работающий
- Алгоритм поиска простого пути длины k с помощью случайной покраски за O*((2e)k), где e = 2.71828...