NP-полнота Основные NP-полные задачи Задача «Независимое множество» • Условие. Задан граф G=(V,E) и целое число k. • Вопрос. Существует ли независимое множество на k вершинах? • Независимым множеством называется такое подмножество вершин V′ V, что любые две его вершины не соединены ребром в G. Независимое множество Теорема 3.1 (Karp 1972) Задача «Независимое множество» является NP-полной. Идея доказательства • «Выполнимость» → «Независимое множество» • «Выполнимость»: – множество переменных X, – набор дизъюнкций Z ={Z1,…,Zm} c Zi={λi1,…, λiki} (i = 1,…,m), где λij − литералы на X. • Построим граф G, такой что G имеет независимое множество размера m тогда и только тогда, когда существует набор значений истинности, при котором выполнены все m дизъюнкций. Сведение • Zi: клика на ki вершинах (вершина соответствует литералу в дизъюнкции) • Вершины разных клик связаны между собой ребром, если они соответствуют литералу и его отрицанию. V G : vij : 1 i m, 1 j ki E G : vij , vkl : i k & j l & ij x & kl x : x X Пример m 4, Z1 x1, x2 , x3 , Z2 x1, x3 , Z3 x2 , x3 , Z4 x1, x2 , x3 x1 x3 x1 x1 x2 x2 x3 x3 x2 x3 Доказательство • Пусть в G есть независимое множество размера m. • Тогда, оно содержит по одному элементу в каждой клике и не содержит двух вершин, соответствующих литералу и его отрицанию. • То есть, эти вершины определяют по литералу в каждой дизъюнкции. • Положим каждому такому литералу значение true и дополним до набора значений истинности, который выполняет все дизъюнкции. Доказательство • Пусть существует набор значений истинности, при котором выполнены все m дизъюнкций. • Выберем в каждой дизъюнкции один литерал со значением true. • Множество соответствующих вершин определяет искомое независимое множество. Задача «Вершинное покрытие» • Условие. Задан граф G и целое число k. • Вопрос. Существует ли вершинное покрытие мощности k? • Вершинное покрытие это множество вершин V′ V такое, что каждое ребро имеет граничную точку в V′ . Задача «Клика» • Условие. Задан граф G и целое число k. • Вопрос. Существует ли клика мощности k? • Кликой называется такое подмножество вершин V′ V, что любые две его вершины соединены ребром в G. Вершинное покрытие и клика Теорема 3.2 (Karp 1972) Задача «Вершинное покрытие» и задача «Клика» являются NP-полными. Задача «Гамильтонов цикл» • Условие. Задан граф G. • Вопрос. Существует ли в G гамильтонов цикл? Гамильтонов цикл Теорема 3.3 (Karp 1972) Задача «Гамильтонов цикл» является NP-полной. Идея доказательства • «Вершинное покрытие» → «Гамильтонов цикл» • «Вершинное покрытие»: G = (V,E), k ≥ 0, целое. • Построим граф G′ = (V′,E′), такой что G′ имеет гамильтонов цикл тогда и только тогда, когда в G есть вершинное покрытие H, состоящее из не более чем k элементов. • Пусть |E| = m. Построение графа G′ • |V′| = 12m+k • Каждому ребру (vi, vj) в исходном графе соответствует 12 вершин uij1, uij2, uij3, uij4, uij5, uij6, uji1, uji2, uji3, uji4, uji5, uji6. • k дополнительных вершин a1, a2,…, ak. Компонента (vi, vj) uij1 uji1 uij2 uji2 uij3 uji3 uij4 uji4 uij5 uji5 uij6 uji6 vi ∊ H, vj ∉ H vi ∉ H, vj ∊ H vi ∊ H, vj ∊ H Компонента vi • Пусть r степень вершины vi. Упорядочим произвольным образом ребра, инцидентные vi: (vi, vj1), (vi, vj2),…, (vi, vjr). • Все компоненты, соответствующие ребрам, инцидентным vi, соединяются вместе следующими ребрами: u ijs 6 , uijs 11 : 1 s r 1 . Компонента вершины uijr1 uij11 uij21 uij31 uij16 uijr6 uij26 uij36 Дополнительные вершины в G′ • Дополнительная вершина al соединена с первой и последней вершиной компоненты vi. Пусть r степень вершины vi. a , u : 1 l k , v V , a , u : 1 l k , v V . l ij11 i l ijr 6 i Компонента вершины uijr1 uij11 uij21 uij31 uij16 uijr6 uij26 uij36