NP-полнота Теорема Кука

advertisement
NP-полнота
Теорема Кука
Полиномиальная сводимость
• Пусть Π1=(X1,Y1) и Π2=(X2,Y2) ― задачи
распознавания. Будем говорить, что Π1
полиномиально сводится (по Карпу) к Π2 ,
если существует функция f : X1  X2 ,
вычислимая в полиномиальное время такая,
что f(x)Y2 для всех xY1, и f(x)X2\Y2
для всех xX1\Y1 .
NP-полнота
• Задача Π распознавания называется NP-полной,
если все другие задачи из класса NP
полиномиально сводятся к Π.
Набор значений истинности
• Пусть U={u1, u2,…, uk}―множество булевых переменных.
• Под набором значений истинности на множестве U
будем понимать функцию T: U {true, false}.
• Расширим T к множеству L : U  u : u  U  ,
полагая T u  : true, если T u : false, и наоборот.
• Элементы множества L называются литералами.
Дизъюнкция
• Дизъюнкцией над U называется множество литералов над
U.
• Она представляет дизъюнкцию этих литералов и
называется выполненной при некотором наборе значений
истинности тогда и только тогда, когда при
рассматриваемом наборе значений истинности хотя бы
один из ее членов принимает значение “true”.
• Семейство (набор) Z дизъюнкций над U называется
выполнимым в том и только том случае, если найдется
некоторый набор значений истинности на множестве U,
такой что выполнены все дизъюнкции из Z.
Задача «Выполнимость»
• Условие. Задано множество переменных U
и набор Z дизъюнкций.
• Вопрос. Является ли Z выполнимым?
Теорема Кука (1971)
Теорема 2.1
Задача «Выполнимость» является NP-полной.
Доказательство
• «Выполнимость»  NP.
Доказательство сводимости
• Пусть Π=(X,Y) будет любая другая проблема в NP.
• Требуется доказать, что Π полиномиально сводится
к «Выполнимости».
• По определению существует полином p и задача
распознавания Π'=(X',Y') из P, такие что
• X' = {x#c: x  X, c  {0,1}└ p(size(x))┘} и
• Y = {y  X :  c  {0,1}└ p(size(x))┘ : y#c  Y'}.
• Пусть Φ:{0,…,N}× A{⊔}→{-1,…,N}×A{⊔}×{-1,0,1} –
полиномиальная машина Тьюринга для Π' с алфавитом A.
• Пусть полином q : time(Φ,x#c) ≤ q(size(x#c)) для всех
примеров x#c  X'.
• size(x#c) = size(x) + 1 + └p(size(x))┘
Основная идея
• Сконструировать набор Z(x) дизъюнкций
над множеством V(x) булевых переменных
для каждого x  X, так что Z(x) выполнимо
тогда и только тогда, когда x  Y.
Булевы переменные
• Q:=q(size(x) + 1 + └p(size(x))┘)
• V(x):
– vijσ , 0 ≤ i ≤ Q, -Q ≤ j ≤ Q и σA{⊔}= A
(после i шагов вычислений в j-й позиции строки
записан символ σ);
– wijn , 0 ≤ i ≤ Q, -Q ≤ j ≤ Q и −1≤ n ≤ N;
(после i шагов вычислений j-я позиция строки
просматривается и оператор n выполняется).
Итоговая цель
• Если (n(i),s(i),π(i)) i = 0,1,2,…тройка из
вычисления Φ, то требуется определить
набор дизъюнкций таким образом, что
– vijσ = true  sj(i) =σ;
– wijn = true  π(i) = j и n(i) = n;
– набор Z(x) дизъюнкций выполним 
существует строка c, такая что
output(Φ,x#c)=1.
Требуемые условия для
выполнимого набора дизъюнкций
• На каждом шаге вычислений каждая позиция содержит
единственный символ.
• На каждом шаге вычислений ровно одна позиция
просматривается, и один оператор выполняется.
• Вычисление начинается со входа x#c для
некоторого c {0,1}└ p(size(x))┘.
• Алгоритм работает корректно. ((n,σ)=(m,τ,δ))
• Алгоритм останавливается, если n(i)=−1.
• Не просмотренные позиции не изменяются.
• Алгоритм на выходе получает 1.
На каждом шаге вычислений каждая позиция
содержит единственный символ.
v
v

ij
:  A
ij
, vij
0  i  Q ,  Q  j  Q;
 0  i  Q,
 Q  j  Q ,  ,  A :    .
На каждом шаге вычислений ровно одна
позиция просматривается, и один оператор
выполняется.
w
ijn
w
ijn
: Q  j  Q,  1  n  N  0  i  Q;

, wij'n ' 0  i  Q,Q  j, j '  Q,  1  n, n'  N :  j, n    j ' , n' .
Вычисление начинается со входа x#c для
некоторого c{0,1}└ p(size(x))┘.
v  1  j  size x ;
0, j , x j
v   ;
v   , v
w .
0,size x 1,#
0,size x 1 j , 0
0,1, 0
0,size x 1 j ,1
 1  j   psize x ;
Алгоритм работает корректно.
((n,σ)=(m,τ,δ)).
v
ij

, wijn , vi 1, j , , vij , wijn , wi 1, j  ,m

0  i  Q ,  Q  j  Q ,   A, 0  n  N .
Алгоритм останавливается,
если n(i) = −1.
w
i , j , 1

, wi 1, j , 1 , wi , j , 1 , vi , j , , vi 1, j ,

0  i  Q,  Q  j  Q,   A.
Не просмотренные позиции
не изменяются.
v
ij
, wij'n , vi 1, j ,
 0  i  Q,
 1  n  N ,  Q  j, j '  Q.
  A,
Алгоритм на выходе получает 1.
{vQ,1,1}, {vQ,2,⊔}
Полиномиальность сведения
• Длина записи Z(x)
– Число литералов
– запись индекса
O(Q3log Q)
O(Q3)
O(log Q)
• Так как Q ― это полином от size(x), то
существует полиномиальный алгоритм,
который по данному x, вычисляет Z(x).
• Осталось доказать, что Z(x) выполнима
тогда и только тогда, когда x  Y.
• Z(x) выполнима. 
•  набор значений истинности T, на котором выполнены
все дизъюнкции.
• Пусть c {0,1}└ p(size(x))┘,
и cj = 1 для всех j c T(v0,size(x)+1+j,1) = true,
и cj = 0 для всех j c T(v0,size(x)+1+j,1) = false.
• По построению переменные отражают вычисление  на
входе x#c. 
• output(, x#c)=1.
•  ―алгоритм проверки сертификата. 
• x ― «да»-пример (x  Y).
•
•
•
•
•
•
•
x  Y и c ― любой сертификат для x.
Пусть (n(i),s(i),π(i)) i = 0, 1, …, m вычисление Φ   x#c.
T(vi,j,σ ) = true  sj(i) = σ
T(wi,j,n ) = true  π(i) = j и n(i) = n.
T(vi,j,σ ) = T(vi-1,j,σ ) i = m + 1,…, Q.
T(wi,j,n ) = T(wi-1,j,n )
i = m + 1,…, Q. 
T ― набор значений истинности, на котором выполнены
все дизъюнкции из Z(x).
Задача «3-Выполнимость»
• Условие. Задано множество переменных U
и набор Z дизъюнкций, каждая из которых
содержит ровно 3 литерала.
• Вопрос. Является ли Z выполнимым?
3-Выполнимость
Теорема 2.2 (Cook 1971)
Задача «3-Выполнимость» является NP-полной.
Download