2475b77c6d93ab3d5f0a4b40317d907f.ppt
- Количество слайдов: 25
NP-полнота Теорема Кука
Полиномиальная сводимость • Пусть Π 1=(X 1, Y 1) и Π 2=(X 2, Y 2) ― задачи распознавания. Будем говорить, что Π 1 полиномиально сводится (по Карпу) к Π 2 , если существует функция f : X 1 X 2 , вычислимая в полиномиальное время такая, что f(x) Y 2 для всех x Y 1, и f(x) X 2Y 2 для всех x X 1Y 1.
NP-полнота • Задача Π распознавания называется NP-полной, если все другие задачи из класса NP полиномиально сводятся к Π.
Набор значений истинности • Пусть U={u 1, u 2, …, uk}―множество булевых переменных. • Под набором значений истинности на множестве U будем понимать функцию T: U {true, false}. • Расширим T к множеству , полагая если и наоборот. • Элементы множества 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 {⊔}= (после 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.
На каждом шаге вычислений каждая позиция содержит единственный символ.
На каждом шаге вычислений ровно одна позиция просматривается, и один оператор выполняется.
Вычисление начинается со входа x#c для некоторого c {0, 1}└ p(size(x))┘.
Алгоритм работает корректно. ( (n, σ)=(m, τ, δ)).
Алгоритм останавливается, если n(i) = − 1.
Не просмотренные позиции не изменяются.
Алгоритм на выходе получает 1. {v. Q, 1, 1}, {v. Q, 2, ⊔}
Полиномиальность сведения • Длина записи Z(x) – Число литералов – запись индекса O(Q 3 log Q) O(Q 3) 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(v 0, size(x)+1+j, 1) = true, и cj = 0 для всех j c T(v 0, 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-полной.