NP-полнота Машина Тьюринга

реклама
NP-полнота
Машина Тьюринга
Алфавит
Алфавитом называется конечное множество,
состоящее не менее чем из двух элементов и не
содержащее специального символа ⊔ .
Строки
• Обозначим через A множество всех
последовательностей (строк) длины n,
символами которых являются элементы
из алфавита A.
• Пусть A0 содержит ровно один элемент
пустую строку.
n
A : n An
Язык
• Языком над алфавитом A называется
произвольное подмножество из A*.
• Элементы языка часто называются словами.
n
• Если x  A , то будем писать size(x) = n.
Машина Тьюринга (неформально)
• Машина Тьюринга состоит из N +1 оператора,
занумерованных от 0,…, N.
• Сначала выполняется оператор 0, и текущей позицией
строки является позиция 1.
• Каждый оператор работает по следующей схеме: считывает
элемент в текущей позиции, и в зависимости от его
значения переписывает элемент в текущей позиции на
некоторый элемент из A{⊔}, и, возможно, переходит на
одну позицию влево или вправо, и переходит на оператор,
который будет выполняться следующим.
Вход и оператор остановки
• На вход машине Тьюринга подается некоторая
строка x  A* с символами из некоторого
фиксированного алфавита A.
• Можно считать, что слово записывается на
бесконечной с двух сторон ленте в ячейках с
номерами 1, 2, …, |x| по одному символу в ячейке.
Все другие ячейки содержат пустой символ ⊔.
• Существует специальный оператор –1, который
означает конец вычислений.
Машина Тьюринга (формально)
• Машина Тьюринга задается функцией
Φ:{0,…, N }× A{⊔}→{-1,…, N }×A{⊔}×{-1,0,1} для
некоторой N  .
• Вычислением Φ   x, x A* называется конечная
или бесконечная последовательность троек (n(i),s(i),π(i))
с n(i) {-1,…,N}, s(i) (A{⊔})Z и π(i)   (i = 0,1,2,…),
которые определяются рекурсивно.
• n(i) означает текущий оператор.
• s(i) означает текущую строку.
• π(i) означает текущую позицию.
Машина Тьюринга
(начало вычисления)
• n(0) := 0.
• sj(0) := xj для 1≤ j ≤ size(x), и
sj(0) := 0 для всех j ≤ 0 и j > size(x).
• π(0) := 1.
Машина Тьюринга (рекурсия)
•
•
•
•
Пусть (n(i),s(i),π(i)) уже определено.
Если n(i) ≠ -1, то пусть (m, ,   : (n(i  , s(i(i  .
n(i+1) := m.
s(i(1 :  ,
i
(i 1
sj
(i 
: s j ,
j  Z \ 
• π(i+1) := π(i) + δ.
(i 
.
Машина Тьюринга
(конец вычисления)
•
Если n(i)= –1, то вычисление заканчивается
• time(Φ,x) = i
• output(Φ,x)  {0,1}k,
где k =min{j  ℕ:sj(i)= ⊔}-1
• (Φ,x)j= sj(i) для j =1,…k.
• Если последовательность бесконечна, то
• time(Φ,x) = ∞
• output(Φ,x) не определен.
Полиномиально вычислимая
Машина Тьюринга
• Пусть A – алфавит, S, T A* два языка, и функция f :S  T.
Пусть Φ – машина Тьюринга с алфавитом A.
Φ вычисляет f , если time(Φ,s) <∞ и (s ,output(Φ,s)) = f(s)
для каждого sS.
• Если существует полином p: time(Φ,s) ≤ p(size(s))
для всех s S , то Φ называется полиномиально
вычислимой машиной Тьюринга.
• T={0,1}
• Будем говорить, что Φ решает язык L:={s S : f(s) =1}.
• Если существует полиномиально вычислимая машина
Тьюринга, решающая язык L, то говорят, что L разрешим в
полиномиальное время.
Тезис Черча
• Любая интуитивно вычислимая функция
может быть вычислена на некоторой
машине Тьюринга.
Задачи распознавания
(неформально)
• Любой язык L  {0,1}* можно интерпретировать как задачу
распознавания: задана 0-1-строка, проверить принадлежит ли она L.
• Однако, нас более интересуют содержательные задачи (задача
Гамильтонов цикл: задан неориентированный граф, проверить есть ли
в нем Гамильтонов цикл.)
• Граф  Лист смежности (матрица смежностей)  бинарная строка
длины (O(n+m log n)).
• Для большинства интересных задач распознавания их примеры можно
представить как подмножества бинарных строк.
• Дополнительное требование: можно в полиномиальное время
проверить является ли произвольная строка примером
рассматриваемой задачи распознавания или нет.
Задачи распознавания (формально)
• Задачей распознавания называется пара
Π=(X,Y), где X – язык разрешимый в
полиномиальное время и Y  X.
• Элементы X называются примерами из Π.
• Элементы Y называются «да»-примерами.
• Элементы X \ Y называются «нет»-примерами.
• Алгоритм для задачи распознавания (X,Y) – это
алгоритм вычисляющий функцию f : X {0,1},
такой что f(x)=1, если xY, и f(x)=0, если xX \Y.
Класс P
• Класс всех задач распознавания, для которых существует
полиномиальный алгоритм, обозначается P.
• Другими словами, (X,Y)  P, с Y  X {0,1}*, когда оба
языка X и Y разрешимы в полиномиальное время.
• Доказательством того, что задача лежит в P, обычно
является полиномиальный алгоритм.
• Из тезиса Черча следует, что существует полиномиально
вычислимая машина Тьюринга для каждой проблемы в P.
Класс NP (неформально)
• К сожалению, принадлежность к классу P многих
интересных задач (Гамильтонов цикл, ЦЛП,
Вершинное покрытие, …) неизвестна.
• Вместо требования существования для задачи
полиномиального алгоритма потребуем, что для
каждого «да»-примера существует сертификат,
который может быть проверен в полиномиальное
время.
• Заметим, что мы не требуем сертификата для
«нет»-примера.
Класс 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'}.
x#c обозначает соединение в общую строку строки x,
символа # и строки c.
Строка c: y#c  Y' называется сертификатом для y.
Алгоритм для Π' называется алгоритмом проверки
сертификата.
P  NP
Утверждение 1.1 P  NP.
• Выберем в качестве сертификата пустую строку
для всех «да»-примеров (то есть p = 0).
• Алгоритм для Π' удаляет последний символ входа
«x#» и затем применяет алгоритм для Π.
Пример задачи из NP
Утверждение 1.2
Задача Гамильтонов цикл принадлежит NP.
• Выберем в качестве сертификата любой
Гамильтонов цикл.
• Легко проверить за полиномиальное время,
является ли данный набор ребер Гамильтоновым
циклом.
Рандомизированный алгоритм
• Рандомизированный алгоритм для вычисления
функции f :S  T задается алгоритмом, вычисляющим функцию g:{s#r: s  S,r  {0,1}k(s)} T.
• Для каждого примера s  S алгоритм использует k(s)
случайных бит.
• Время работы алгоритма оценивается только от size(s).
• Рандомизированный алгоритм, работающий
полиномиальное время может использовать только
полиномиальное число случайных бит.
Лас-Вегас алгоритм
• Лас-Вегас алгоритмом называется
рандомизированный алгоритм такой,
что g(s#r) = f(s) для всех s  S и всех
r  {0,1}k(s).
• Лас-Вегас алгоритм всегда вычисляет
правильное решение, но время его работы
для одного и того же примера может
различаться.
Монте Карло алгоритм
• Монте Карло алгоритмом называется
рандомизированный алгоритм такой, что
существует ненулевая вероятность p
получения правильного ответа, то есть
r  0,1
k (s 
p  inf
sS

: g (s # r   f (s 
2
k (s 
 0.
Недетерминированный алгоритм
•
•
Если T = {0,1}, и для каждого s  S с f(s) =
0 алгоритм вычисляет g(s#r) = 0 для всех
r  {0,1}k(s), то такой алгоритм называется
рандомизированный алгоритм с
односторонней ошибкой.
Если, в дополнение, для каждого s  S с
f(s) = 1 существует по крайней мере один r
 {0,1}k(s) с g(s#r) = 1, то такой алгоритм
называется недетерминированным
алгоритмом.
Класс NP
Утверждение 1.3
Задача распознавания принадлежит 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'}
•
•
•
•
Полиномиальный алгоритм для Π' является полиномиальным недетерминированным алгоритмом для Π.
Пусть полиномиальный недетерминированный алгоритм
для Π использует k(x) бит для примера x. Тогда существует
полином p, такой что k(x) ≤ p(size(x)) для всех x.
Определим X' = {x#c: x  X, c  {0,1}└ p(size(x))┘} и
Y' = {x#c  X' : g(x#r)=1, r состоит из k(x) первых бит с}.
Тогда (X', Y' )  P и
Y = {y  X:  c  {0,1}└ p(size(x))┘ y#cY' }.
Скачать