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) для каждого sS. • Если существует полином 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, если xY, и f(x)=0, если xX \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 sS : 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#cY' }.