NP-полнота Основные NP-полные задачи

advertisement
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
Download