Загрузил novel_education

Практика по алгоритмам, введение в сложность

Реклама
Первый курс, весенний семестр 2019/20
Практика по алгоритмам #3
Введение в сложность
31 января
Собрано 8 февраля 2020 г. в 18:10
Содержание
1. Введение в сложность
1
2. Разбор задач практики
3
3. Домашнее задание
3.1. Обязательная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Дополнительная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
4. Разбор домашнего задания
4.1. Обязательная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2. Дополнительная часть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
10
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
Введение в сложность
1. Лежит ли задача в NP? А в coNP или P?
a) SUBSET-SUM (KNAPSACK без стоимостей).
b) KNAPSACK со стоимостями.
c) GI – проверка изоморфизма двух графов.
d) Проверка отсутствия пути 𝑎
𝑏 в графе.
e) FACTOR𝑑 – наличие делителя не более 𝑑.
f) Поиск кратчайшей эквивалентной записи булевой формулы
1. Формула задана логическим выражением с OR, AND, NOT.
2. Формула задана таблицей истинности.
2. Постройте сведение (полиномиальное или по Куку)
a) HAMPATH ↔ HAMCYCLE
b) 3-COLORING → 3-SAT
c) 3-SAT ↔ NAE-3-SAT
NAE = not all equal значит, что в каждом клозе хотя бы 1 ноль и хотя бы 1 единица.
d) NAE-3-SAT → MAX-CUT (дан взвешенный граф, разделить множество вершин на две
непустых доли, максимизировать суммарный вес рёбер между долями).
e) SAT-MAX-ONE (максимизировать число единиц) → CIRCUIT-SAT
3. Доказать NP-полноту
a) (𝑎, 𝑏)-CSP (constraint satisfaction problem) – есть 𝑛 переменных, у каждой 𝑎 возможных
значений, есть 𝑚 ограничений (условий), каждое на 𝑏 переменных. Например, 3-SAT –
частный случай (2, 3)-CSP.
b) SAT (через уже доказанный CIRCUIT-SAT)
c) MAX-3-SAT (выполнить, воможно, не все, но максимальное число клозов)
d) VERTEX-COVER (выбрать минимальное число вершин, чтобы задеть все ребра)
4. Предъявите для задачи decision-версию и сведите к ней search-версию
a) MAX-SAT (максимизировать число выполненных клозов), найти сам набор переменных.
b) HAMPATH
c) 3-COLORING
5. NP ⊆ EXP
♥ 6. coNEXP
Зная определения EXP, NP, coNP, определите класс coNEXP.
7. Решить 3-SAT за 𝒪* (1.5m ).
8. (*) Решить 3-SAT за 𝒪* ((2 − 𝜀)𝑛 ).
9. (*) Полиномиальные нижние оценки!
OV = Orthogonal Vectors: даны вектора 𝑎1 , . . . , 𝑎𝑛 , 𝑏1 , . . . , 𝑏𝑛 , есть ли пара ⟨𝑎𝑖 , 𝑏𝑗 ⟩ = 0?
Покажите SETH ⇒ OV нельзя решить за 𝒪(𝑛2−𝜀 ).
† 10. (*) HAM-CYCLE ∈ NPc
1/11
Закончилась практика?
Отнеси лист на второй этаж в эко-мусорку
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
11. (*) 3-SAT → 3-COLORING
12. (*) 3-COLORING → EXACT-SET-COVER
EXACT-SET-COVER: даны 𝑈 и {𝐵𝑖 ⊆ 𝑈 }, есть ли такое 𝐼 : ∪𝑖∈𝐼 𝐵𝑖 = 𝑈 ∧ ∀ 𝑖, 𝑗 𝐵𝑖 ∩ 𝐵𝑗 = ∅.
13. (*) DOMINATING-SET ∈ NPc
DOMINATING-SET: найти min 𝐴 ⊆ 𝑉 : 𝐴 ∪ 𝑁 (𝐴) = 𝑉 .
14. (*) STEINER-TREE ∈ NPc
STEINER-TREE: даны взвешенный граф и 𝑆 ⊆ 𝑉 , найти поддерево min веса, содержащее
все вершины 𝑆.
2/11
Закончилась практика?
Отнеси лист на второй этаж в эко-мусорку
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
Разбор задач практики
1. Лежит ли задача в NP? А в coNP или P?
a) SUBSET-SUM. Подсказка для NP: набор предметов.
b) KNAPSACK со стоимостями. Decision-версия: можно ли набрать цену больше 𝐶.
Подсказка для NP: набор предметов.
Решать за полином не умеют (динамика за 𝒪(𝑛𝑆) работает за экспоненту от длины 𝑆).
c) GI. Подсказка для NP: перестановка, переводящая вершины первого графа в вершины
второго. Умеют решать за 2poly(log 𝑛) . Полагают, что не P и не NPc.
d) Отсутствие пути в P (dfs) ⇒ в NP и в coNP (задачи из P решаются с пустой подсказкой).
e) FACTOR𝑑 . Подсказка для NP и coNP: разложение на простые.
Чтобы проверить подсказку для coNP, нужно уметь проверять на простоту за полином
от длины числа. Это умеют за 𝑛6 (𝑛 = log 𝑁 – длина числа).
1/3
FACTOR умеют за 2𝐶𝑛 . Полагают, что не P и не NPc.
f) Кратчайшая запись булевой формулы.
Короткая запись – не подсказка: непонятно, как проверить ее эквивалентность исходной
формуле. Не знают, лежит ли в NP.
Если формула задана таблицей истинности (длина входа 2𝑛 ), то проверим эквивалентность этой таблицы 𝑇 и короткой записи 𝜙 перебором всех подстановок переменных.
Время 2𝑛 · |𝜙| = 𝒪(poly(2𝑛 )) = 𝒪(|𝑇 |) ⇒ в NP.
Если длина формулы 𝜙 больше 2𝑛 𝑛, то она сразу не кратчайшая, ДНФ короче.
2. Постройте сведение
a) HAMPATH ↔ HAMCYCLE.
HAMPATH 6𝑝 HAMCYCLE: добавим вершину 𝑎, соединим ее со всеми.
Был путь в старом графе ⇒ цикл в новом графе: (путь в старом 𝑣− . . . −𝑢) +(𝑢−𝑎−𝑣).
Есть цикл в новом графе ⇒ выкинем 𝑎, получим путь в старом графе.
Работает и для ор, и для неор. В ор надо соединять 𝑎 со всеми в обе стороны.
HAMCYCLE 6𝑝 HAMPATH: раздвоим вершину 1 на две – in и out, из копии out только
исходящие ребра, в in только входящие. Путь в новом графе обязан начаться в out (у
нее нет входящих) и кончиться в in (нет исходящих).
Цикл в старом графе = путь в новом со склеенными in и out.
Для неорграфа надо проводить из in и out все ребра, но подвесить к in и out по листу.
b) 3-COLORING → 3-SAT.
Переменные 𝑥𝑣𝑐 – покрашена ли 𝑣 в 𝑐.
Ребро (𝑢, 𝑣) для каждого цвета 𝑐 дает клоз (¬𝑥𝑢𝑐 ∨ ¬𝑥𝑣𝑐 ). Получили корректную покраску.
Для каждой 𝑣 добавим клоз (𝑥𝑣1 ∨ 𝑥𝑣2 ∨ 𝑥𝑣3 ). Теперь 𝑣 покрашена хотя бы в один цвет.
Покраска и удовлетворяющий набор переменных легко получаются друг из друга.
c) 3-SAT ↔ NAE-3-SAT.
NAE-3-SAT → 3-SAT: запишем для каждого клоза (𝑙1 ∨ 𝑙2 ∨ 𝑙3 ) парный (¬𝑙1 ∨ ¬𝑙2 ∨ ¬𝑙3 ).
Решим SAT из 2𝑚 клозов.
3-SAT → NAE-4-SAT: добавим в каждый клоз переменную 𝑤 (одну и ту же).
3/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
Было решение 3-SAT ⇒ берем его и делаем 𝑤 = 0.
Есть решение (𝑦1 , 𝑦2 , . . . , 𝑦𝑛 , 𝑤) для NAE-4-SAT ⇒ ответ для 3-SAT это 𝑥𝑖 = 𝑦𝑖 ˆ 𝑤.
NAE-4-SAT → NAE-3-SAT: 𝑖-й клоз из 4 литералов (𝑙1 ∨ 𝑙2 ∨ 𝑙3 ∨ 𝑙4 ) переводим в клозы
(𝑙1 ∨ 𝑙2 ∨ 𝑤𝑖 ), (¬𝑤𝑖 ∨ 𝑙3 ∨ 𝑙4 ), 𝑤𝑖 – новая переменная (так же, как в 4-SAT → 3-SAT).
Чтобы перевести решение NAE-4-SAT в решение NAE-3-SAT и обратно, разбор 5 случаев: 𝑙1 = 𝑙2 = 0/1, 𝑙3 = 𝑙4 = 0/1, иначе.
d) NAE-3-SAT → MAX-CUT
Для каждой переменной 𝑥𝑖 заводим две вершины: 𝑥𝑖 , 𝑥𝑖 , соединяем их ребром.
Каждый клоз преобразуем в три ребра: △ на литералах.
Получили граф из 2𝑛 вершин и 3𝑚 + 𝑛 рёбер.
Проверим существование разреза размера хотя бы 𝑛 + 2𝑚, больше точно не бывает.
Если такой есть, все 𝑥𝑖 и 𝑥𝑖 лежат по разные стороны разреза, и в каждом треугольнике
ровно два ребра в разрезе (для этого и нужно NAE).
e) SAT-MAX-ONE → CIRCUIT-SAT
Преобразуем сперва SAT к CIRCUIT-SAT, обозначим выходной гейт 𝑣out .
Создадим гейты 𝑓𝑖,𝑗 – среди первых 𝑖 переменных хотя бы 𝑗 единиц.
𝑓𝑖,𝑗 = 𝑓𝑖−1,𝑗 ∨ (𝑓𝑖−1,𝑗−1 ∧ 𝑥𝑖 ). Ответ в 𝑣out ∧ 𝑓𝑛,𝑘 .
3. Чтобы доказать NP-полноту, нужно свести какую-либо NP-полную задачу к данной.
a) (𝑎, 𝑏)-CSP. 3-SAT – частный случай, свелось.
b) SAT. Сведём к нему CIRCUIT-SAT: каждому узлу соответствует формула 𝑣𝑖 = 𝑓𝑖 (𝑣𝑗 , 𝑣𝑘 ).
Это булева формула от трех переменных, запишем ее в КНФ. Соединим все КНФ вместе.
c) MAX-3-SAT. Сводим к ней 3-SAT: 𝜙 → ⟨𝜙, 𝑚⟩, выполнено хотя бы 𝑚 клозов, то есть все.
d) VERTEX-COVER. Сведём к нему INDEPENDENT-SET: ⟨𝐺, 𝑘⟩ → ⟨𝐺, 𝑛 − 𝑘⟩.
Множество – вершинное покрытие ⇔ его дополнение – независимое множество.
4. Decision → search
a) MAX-SAT. Бинпоиском ищем, сколько клозов можно удовлетворить, нашли 𝑘.
Берем переменную 𝑥1 , подставляем ее равной 1 в формулу 𝜙, получили 𝜙′ .
Если верен MAX-SAT от ⟨𝜙′ , 𝑘⟩, то 𝑥1 = 1, иначе 𝑥1 = 0.
Подставляем 𝑥1 и ищем остальные переменные.
b) HAMPATH. Надо найти начало пути. Переберём 𝑣 и добавим вершину 𝑤 с одним исходящим ребром в 𝑣. Если теперь есть гамильтонов путь, то раньше он начинался с 𝑣.
Удаляем 𝑣 и так же ищем остальные вершины пути, только дальше надо перебирать не
все вершины, а только соседей предыдущей.
c) 3-COLORING. Пока в графе больше трёх вершин, какие-то две должны быть покрашены
в один цвет. Переберём, какие. Чтобы проверить, что их можно покрасить в один цвет,
стянем их в одну вершину.
5. NP ⊆ EXP: переберем подсказку.
6. coNEXP = {𝐿 : ∃𝑀 ∈ EXP-TIME ∀𝑥 (𝑥 ̸∈ 𝐿) ⇔ (∃𝑦 𝑀 (𝑥, 𝑦) = 1)}.
Эквивалентно {𝐿 : ∃𝑀 ∈ EXP-TIME ∀𝑥 (𝑥 ∈ 𝐿) ⇔ (∀𝑦 𝑀 (𝑥, 𝑦) = 0)}.
7. Решить 3-SAT за 𝒪* (1.5𝑚 ).
Так же, как в прошлом семестре решали 3-LIST-COLORING.
4/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
Выкинем из каждого клоза случайный литерал ⇒ с вероятностью > ( 23 )𝑚 получим решающийся 2-SAT. Повторим 1.5𝑚 раз, получим вероятность ошибки 𝑒−1 .
8. (*) Решить 3-SAT за 𝒪* ((2 − 𝜀)𝑛 ).
Возьмём любой клоз с тремя литералами, есть 8 вариантов присвоить переменным значения,
но только 7 из них обратят клоз в истину. Получили 𝑇 (𝑛) = 7𝑇 (𝑛 − 3) = 7𝑛/3 ≈ 1.91𝑛 .
Также можно решать и 𝑘-SAT за 𝒪((2𝑘 − 1)𝑛/𝑘 ).
9. (*) Полиномиальные нижние оценки!
SAT → OV. Пусть дана формула с клозами 𝐶1 , . . . , 𝐶𝑚 .
Рассмотрим переменные 𝑥1 , . . . , 𝑥𝑛/2 . Рассмотрим все 2𝑛/2 подстановок этих переменных.
Подстановке 𝑠 сопоставим вектор 𝑎𝑠 = ⟨𝑎𝑠1 , . . . , 𝑎𝑠𝑚 ⟩ : 𝑎𝑠𝑖 = ¬(𝐶𝑖 выполнен подстановкой 𝑠).
Аналогично строим набор из 2𝑛/2 векторов 𝑏𝑡 по второй половине переменных.
⟨𝑎𝑠 , 𝑏𝑡 ⟩ = 0 ⇔ ∀𝑖 (𝑎𝑠𝑖 = 0 ∨ 𝑏𝑡𝑖 = 0) ⇔ подстановкой 𝑠𝑡 удовлетворены все клозы.
𝜀
Решаем OV за 𝑛2−𝜀 ⇒ решаем ∀ 𝑘-SAT за 𝒪((2𝑛/2 )2−𝜀 ) = 𝒪(2(1− 2 )𝑛 ). Противоречие с SETH.
Note: размерность векторов мала относительно их количества: 𝑚 = 𝒪(𝑛𝑘 ) = poly(log(2𝑛/2 )).
10. (*) HAM-CYCLE ∈ NPc. Сведём 3-SAT. Пара картинок.
11. (*) 3-SAT → 3-COLORING
Заведем вершины 𝑇, 𝐹, 𝑁 (True, False, Neutral) и попарно соединим рёбрами.
Теперь они должны быть разных цветов, которые так и назовем: 𝑇, 𝐹, 𝑁 .
∀𝑖 заведем вершины 𝑥𝑖 , ¬𝑥𝑖 и рёбра (𝑥𝑖 , ¬𝑥𝑖 ), (𝑥𝑖 , 𝑁 ), (¬𝑥𝑖 , 𝑁 ).
Теперь одна из 𝑥𝑖 , ¬𝑥𝑖 должна быть 𝑇 , другая 𝐹 .
Научимся для вершин 𝑎, 𝑏 строить некое подобие OR.
Добавим вершины 𝑢, 𝑣, 𝑧, рёбра (𝑎, 𝑢), (𝑏, 𝑣) и треугольник (𝑢, 𝑣, 𝑧).
Если 𝑎 = 𝑏 = 𝐹 , то 𝑧 тоже обязательно красить в 𝐹 . Иначе существует корректная покраска
𝑢 и 𝑣, что 𝑧 ̸= 𝐹 .
Если повторить эту конструкцию два раза ((𝑎∨𝑏)∨𝑐), то при 𝑎 = 𝑏 = 𝑐 = 𝐹 выход обязательно
𝐹 , иначе существует корректная покраска, в которой выход – 𝑇 .
Осталось соединить выход с 𝑁 и 𝐹 . Добавляем такую конструкцию для каждого клоза.
Подробнее и с картинками в pdf.
12. (*) 3-COLORING → EXACT-SET-COVER
Универсум: все вершины, все ребра и все тройки ⟨𝑣, 𝑒, 𝑐⟩, где 𝑣 – конец 𝑒, 𝑐 – один из цветов
(итого 𝑛 + 𝑚 + 6𝑚 элементов). Множества:
a) ∀ вершины 𝑣, цвета 𝑐: {𝑣} ∪ {⟨𝑣, 𝑒, 𝑐⟩ | 𝑒 = (𝑣, 𝑢)}.
Если взято, то красим 𝑣 в цвет 𝑐. Каждая вершина покрасится, причем в один цвет.
b) ∀ ребра 𝑒 = (𝑣, 𝑢), пары цветов 𝑐1 ̸= 𝑐2 : {𝑒} ∪ {⟨𝑣, 𝑒, 𝑐⟩ | 𝑐 ̸= 𝑐1 } ∪ {⟨𝑢, 𝑒, 𝑐⟩ | 𝑐 ̸= 𝑐2 }.
Раз каждое ребро чем-то покрыто, то оно «забирает с собой» все цвета у своих концов,
кроме двух неравных.
13. (*) DOMINATING-SET ∈ NPc : VERTEX-COVER → DOMINATING-SET.
Из графа 𝐺 = (𝑉, 𝐸) делаем новый 𝐺′ = (𝑉 ′ , 𝐸 ′ ).
𝑉 ′ = 𝑉 ∪ 𝐸. 𝐸 ′ = {(𝑣, 𝑢) | 𝑣, 𝑢 ∈ 𝑉 } ∪ {(𝑣, 𝑒) | 𝑒 = (𝑣, 𝑢) ∈ 𝐸}.
Чтобы задоминировать все вершины, которые соответствуют старым ребрам, нужно как раз
набрать VERTEX-COVER. Полный граф на старых вершинах нужен, чтобы они сами собой
задоминировались.
5/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
14. (*) STEINER-TREE ∈ NPc : SET-COVER → STEINER-TREE.
Вершины графа – элементы и множества.
Ребра веса 0 между множествами и лежащими в них элементами.
Фиктивная вершина 𝑣0 , соединенная ребрами веса 1 со всеми множествами.
𝑆 – множество элементов. Вес min дерева = (количеству множеств в min SET-COVER − 1).
6/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
Домашнее задание
3.1. Обязательная часть
Мы уже доказали NP-полноту задач BOUNDED HALTING, CIRCUIT-SAT, SAT,
MAX-SAT, INDEPENDENT-SET, CLIQUE, VERTEX COVER, MAX-CUT, 3-COLORING.
Примем на веру NP-полноту HAMPATH. При решении можно опираться на их NP-полноту.
1. (1) Лежит ли в NP следующая задача?
«Последовательность 𝑎 – не подпоследовательность последовательности 𝑏». Ответ обоснуйте.
2. (2) MAX-SAT → CIRCUIT-SAT.
3. (2) EXACT-SET-COVER → SUBSET-SUM.
EXACT-SET-COVER: даны 𝑈 и {𝐵𝑖 ⊆ 𝑈 }, есть ли такое 𝐼 : ∪𝑖∈𝐼 𝐵𝑖 = 𝑈 ∧ ∀ 𝑖, 𝑗 𝐵𝑖 ∩ 𝐵𝑗 = ∅.
SUBSET-SUM: набрать сумму ровно 𝑆.
4. (2) Decision версия SET-COVER ∈ NPc.
SET-COVER: выбрать минимальное число множеств, объединение которых равно 𝐴.
Decision версия: ответ 6 𝑥.
5. (2) Decision версия HITTING-SET ∈ NPc.
HITTING-SET: даны 𝑛 подмножеств универсума 𝑈 , выбрать минимальное число элементов 𝑈 , чтобы в каждом из 𝑛 множеств был выбран хотя бы один элемент. Decision версия:
ответ 6 𝑥.
6. (2) Decision TSP ∈ NPc (задача коммивояжера).
TSP – выбрать в полном взвешенном графе гамильтонов цикл наименьшей длины.
Приведите decision версию, докажите её NP-полноту.
7. (2) MAX-CUT. Через decision версию задачи решите search версию задачи.
Нужно найти величину разреза и сам разрез.
8. (1) Докажите: ETH ⇒ P ̸= NP.
3.2. Дополнительная часть
1. (2) SUBSET-SUM → PARTITION → JOB-SHEDULING
разделить множество предметов на два, равных по суммарному весу.
PARTITION:
JOB-SHEDULING: даны 𝑛 заказов, у каждого дано время выполнения 𝑡𝑖 . Есть 𝑘 одинаковых рабочих, распределить заказы по рабочим, минимизировав время завершения всех
работ.
2. (2) 0-1-ILP ∈ NPc.
ILP – целочисленное линейное программирование. Есть переменные 𝑥1 , . . . , 𝑥𝑛 .
Даны неравенства ⟨𝑎𝑖 , 𝑥⟩ 6 𝑏𝑖 (скалярные произведения) и вектор 𝑐.
Найти 𝑥𝑖 ∈ {0, 1}, максимизирующие ⟨𝑐, 𝑥⟩, удовлетворяющие всем неравенствам.
3. (3) PRIME ∈ NP. Не используя то, что PRIME ∈ P =)
4. (3) MAX-2-SAT ∈ NPc
5. (3+2) Полиномиальные нижние оценки!
a) (3) Покажите SETH ⇒ нельзя найти доминирующее множество размера 𝑘 за 𝒪(𝑛𝑘−𝜀 ).
7/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
b) (2) Покажите SETH ⇒ нельзя найти доминирующее множество размера 𝑘 за 𝒪(𝑛𝑘−1−𝜀 )
в графах с маленькой средней степенью (𝑚 = 𝒪(𝑛polylog(𝑛))).
8/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
Разбор домашнего задания
4.1. Обязательная часть
1. «Последовательность 𝑎 – не подпоследовательность последовательности 𝑏» лежит в P ⊆ NP.
2. MAX-SAT → CIRCUIT-SAT.
Делаем 𝑐𝑖 – гейты, считающие 𝑖 клоз. Делаем гейты 𝑓𝑖,𝑗 = 𝑓𝑖−1,𝑗 ∨ (𝑓𝑖−1,𝑗−1 ∧ 𝑐𝑖 ) – можно ли
набрать 𝑗 верных клозов среди первых 𝑖. Ответ в 𝑓𝑛,𝑘 .
Еще можно посчитать схемой сумму 𝑐𝑖 и еще схемой сравнить ее с двоичной записью 𝑘.
3. EXACT-SET-COVER → SUBSET-SUM.
Заменим все множества на битовые маски, но в системе счисления 𝑚+1, 𝑚 – число множеств.
Число 𝑆 – битовая маска множества 𝐴, которое нужно покрыть (тоже в системе 𝑚 + 1).
Если дизъюнктное объединение дает 𝐴, то соответствующие слагаемые дадут сумму 𝑆, и
наоборот. Переносов не будет: слагаемых меньше, чем система счисления.
Другой способ: переводить множество в двоичную маску, к ней спереди приписать 𝑚 нулей,
а перед этим записать в двоичной записи «вес множества» – число элементов в нем. Тогда
будем уверены, что элементов суммарно ровно |𝐴| и не больше. Переносы не испортят вес,
так как не перевалят через 𝑚 нулей (хватит даже ⌈log 𝑚⌉).
4. SET-COVER ∈ NPc.
VERTEX-COVER → SET-COVER. Универсум – ребра, множества: 𝑆𝑣 – множество ребер,
инцидентных 𝑣. 𝐴 – вершинное покрытие ⇔ {𝑆𝑣 | 𝑣 ∈ 𝐴} – покрытие универсума.
5. HITTING-SET ∈ NPc.
VERTEX-COVER → HITTING-SET. Универсум – вершины, множества – ребра. Нужно
как раз минимальным набором элементов-вершин задеть все множества-ребер.
SET-COVER → HITTING-SET. Мн-ва переводим в элементы нового универсума 𝑆 → 𝑧𝑆 .
Элементы переводим в множества тех множеств, которые их содержат, 𝑥 → 𝐵𝑥 = {𝑆 | 𝑥 ∈ 𝑆}.
Набор 𝑆𝑖 покрывает 𝐴 ⇔ 𝑧𝑆𝑖 хиттит все 𝐵𝑥 , 𝑥 ∈ 𝐴.
6. TSP ∈ NPc.
HAMCYCLE → TSP. Ребрам исходного графа даем вес 0, дополняем до полного ребрами
веса 1. Был гамильтонов цикл ⇔ есть путь коммивояжера веса 6 0.
7. MAX-CUT. Нашли бинпоиском размер разреза 𝐶.
Если стянуть две вершины в одну, сохраняя получившиеся кратные ребра, то размер разреза сохранится, если они в одной доле, иначе уменьшится. Пока вершин больше двух, ищем
пару, стягивание которой сохраняет разрез, стягиваем. Две вершины в конце разжимаем и
получаем две доли.
Другой способ: пока существуют ребра, удаление которого сохраняет разрез, удаляем их.
Ребра между вершинами одной доли всегда можно удалить, так что в конце останется двудольный граф, его доли – доли разреза.
8. ETH ⇒ SAT нельзя решить за 𝑛𝑘 = 2𝑘 log 𝑛 = 2𝑜(𝑛) ⇒ SAT ∈
/ P, но SAT ∈ NP ⇒ P ̸= NP.
9/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
4.2. Дополнительная часть
1. SUBSET-SUM → PARTITION → JOB-SHEDULING
SUBSET-SUM → PARTITION. Пусть сумма всех предметов 𝑋, ищем сумму 𝑆. Добавим
предмет веса |𝑋 −2𝑆|, запросим результат PARTITION. Разбором случаев 2𝑆 > 𝑋 и 2𝑆 < 𝑋
видим, что в одной из половин старые предметы будут давать сумму 𝑆.
PARTITION → JOB-SHEDULING. Можно разделить предметы на равные суммы ⇔ то
два рабочих могут сделать все работы за 𝑋2 .
2. 0-1-ILP ∈ NPc.
VERTEX-COVER → ILP. Каждой вершине 𝑣 сопоставляем переменную 𝑥𝑣 – взята вершина
в покрытие или нет. Неравенства: для каждого
∑︀ ребра (𝑣, 𝑢) пишем 𝑥𝑣 + 𝑥𝑢 > 1, то есть хотя
бы один конец ребра взят. Минимизировать
𝑥𝑣 .
3. PRIME ∈ NP.
Для простых чисел есть первообразный корень 𝑔 : ⟨1, 𝑔, . . . , 𝑔 𝑝−2 ⟩ = Z/𝑝Z* . Подсказка: 𝑔.
Теперь нужно проверить, что 𝑔 первообразный. Для этого добавим в подсказку простые
делители 𝑝 − 1, их на простоту проверим рекурсивно (подсказка ещё увеличится).
Дерево рекурсии выйдет не очень большое: произведение чисел в листьях 6 𝑛 ⇒ размер
дерева 𝒪(log 𝑛).
P.S. Первообразный корень есть ещё для 𝑛 вида 𝑝𝑘 и 2𝑝𝑘 .
Но только для простых верно 𝑔 𝑛−1 = 1 mod 𝑛.
4. MAX-2-SAT ∈ NPc
MAX-CUT → MAX-2-SAT.
Значение переменной 𝑥𝑣 говорит, взята вершина 𝑣 в долю 0 или 1.
Для каждого ребра (𝑣, 𝑢) клозы (¬𝑥𝑣 ∨ ¬𝑥𝑢 ), (𝑥𝑣 ∨ 𝑥𝑢 ).
Хотя бы один клоз из двух выполнится, но оба – только если 𝑣 и 𝑢 в разных долях.
То есть, чтобы найти разрез размера > 𝑘, нужно выполнить > 𝑘 + 𝐸 клозов.
5. Полиномиальные нижние оценки!
a) Та же техника, что для OV: разбиваем переменные на 𝑘 кусков, в каждом куске смотрим
на все подстановки.
Заводим по вершине для каждого клоза и для каждой подстановки, соединяем подстановку с клозами, которые она удовлетворяет.
Теперь если задоминировать клозы 𝑘 подстановками, всё ок.
Надо еще задоминировать подстановки. Для этого внутри каждого куска делаем клику
на подстановках.
Нужно, чтобы в доминирующее множество не взяли клоз вместо подстановки. Создадим
для каждого куска 𝑖 вершину 𝑣𝑖 и соединим со всеми подстановками в 𝑖-м куске. Чтобы
задоминировать все 𝑣𝑖 , мы теперь обязаны взять все 𝑘 вершин из подстановок.
В доминирующее множество могла попасть 𝑣𝑖 , но от этого не хуже: значит, мы смогли
задоминировать клозы < 𝑘 подстановками, не беда.
10/11
Алгоритмы, весна 2019/20
Практика #3. Введение в сложность.
НАДО НОРМАЛЬНО ПЕРЕРИСОВАТЬ ЭТУ КАРТИНКУ
b) В конструкции выше у вершин очень высокая степень. Из-за клик в кусках почти у всех
вершин степень ≈ 𝑛′ /𝑘 (𝑛′ – число вершин нового графа).
Уберем эти клики и добавим вершину 𝑠, соединенную со всеми подстановками всех кусков.
Теперь мы должны взять 𝑠, чтобы задоминировать подстановки. Поэтому делим на (𝑘 −1)
кусок, а не на 𝑘.
Если 𝑛 переменных и 𝑚 = poly(𝑛) клозов, то вершин 𝑚 + 𝑘2𝑛/𝑘 + 𝑘 + 1, ребер 6 𝑚𝑘2𝑛/𝑘 +
2𝑘2𝑛/𝑘 = 2𝑛/𝑘 poly(𝑛) = 𝒪(𝑛′ polylog(𝑛′ )).
11/11
Скачать