Примеры NP-полных языков. Теорема Кука — различия между версиями
Строка 1: | Строка 1: | ||
− | |||
== Введение == | == Введение == | ||
Строка 30: | Строка 29: | ||
|proof= | |proof= | ||
# <tex> \mathrm{SAT}\in \mathrm{NP} </tex> <br>Можно написать недетерминированную программу <tex>p</tex>, которая распознает язык <tex> \mathrm{SAT} </tex>. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ. | # <tex> \mathrm{SAT}\in \mathrm{NP} </tex> <br>Можно написать недетерминированную программу <tex>p</tex>, которая распознает язык <tex> \mathrm{SAT} </tex>. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ. | ||
− | # <tex> \mathrm{SAT}\in \mathrm{NPH} </tex> <br> Теперь докажем, что <tex> \mathrm{SAT}\in \mathrm{NPH} </tex>. Для этого сведём задачу <tex> \mathrm{BH_{1N}} </tex>, которая <tex> \mathrm{NP} </tex>-полна, к <tex> \mathrm{SAT} </tex>. Тогда получится, что любой язык из <tex> \mathrm{NP} </tex> может быть [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведен по Карпу]] к <tex> \mathrm{BH_{1N}} </tex>, и, по транзитивности сведения по Карпу, к <tex> \mathrm{SAT} </tex>. <br> По определению языка <tex> \mathrm{BH_{1N}} </tex>, у нас есть недетерминированная машина Тьюринга <tex>m</tex>, причём можно считать, что её лента односторонняя и что машина не пишет на ленту пробелы | + | # <tex> \mathrm{SAT}\in \mathrm{NPH} </tex> <br> Теперь докажем, что <tex> \mathrm{SAT}\in \mathrm{NPH} </tex>. Для этого сведём задачу <tex> \mathrm{BH_{1N}} </tex>, которая <tex> \mathrm{NP} </tex>-полна, к <tex> \mathrm{SAT} </tex>. Тогда получится, что любой язык из <tex> \mathrm{NP} </tex> может быть [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведен по Карпу]] к <tex> \mathrm{BH_{1N}} </tex>, и, по транзитивности сведения по Карпу, к <tex> \mathrm{SAT} </tex>. <br> По определению языка <tex> \mathrm{BH_{1N}} </tex>, у нас есть: |
+ | #* недетерминированная машина Тьюринга <tex>m</tex>, причём можно считать, что её лента односторонняя и что машина не пишет на ленту пробелы | ||
+ | #* входное слово <tex>x</tex> | ||
+ | #* время <tex>t</tex>, заданное в унарной системе счисления. | ||
+ | #:Нам же надо построить такую булеву формулу <tex>\varphi</tex>, что она выполнима тогда, и только тогда, когда <tex>m</tex>, получив на вход <tex>x</tex>, делает не более <tex>t</tex> шагов и допускает это слово. <br> В любой момент времени мгновенное описание (МО) <tex>m</tex> есть строка <tex>z\#_qyb</tex>, где <tex>b</tex> — строка, состоящая из такого количества пробелов, чтобы длина всего МО была <tex>t + 1.</tex> Соответственно, начальное МО задаётся так: <tex>\#_sxb</tex>. Если же <tex>|x| > t</tex>, то будем считать, что на ленту записаны лишь первые <tex>t</tex> символов, ведь <tex>m</tex> не может обработать большее количество символов за <tex>t</tex> шагов. <br> Также нам удобно считать, что все вычисления проходят ровно за <tex>t + 1</tex> шагов, даже если мы попали в допускающее состояние раньше. То есть, мы разрешим переход <tex>q \vdash q</tex>, если в МО <tex>q</tex> есть допускающее состояние, так что, чтобы проверить, допустила ли машина слово, надо лишь проверить наличие допускающего состояния в МО <tex>q_t</tex>. <br> Тогда процесс работы машины <tex>m</tex> на входе <tex>x</tex>, то есть цепочка переходов <tex>q_0 \vdash q_1 \vdash \ldots \vdash q_t</tex> может быть представлен следующей таблицей : | ||
<table align="right" border="1" style="text-align:center" cellspacing="0"> | <table align="right" border="1" style="text-align:center" cellspacing="0"> | ||
<tr> | <tr> |
Версия 14:59, 18 июня 2012
Содержание
Введение
В этой статье мы рассмотрим класс
-полных языков — . является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс , тогда окажется, что .Мы рассмотрим некоторые языки и докажем их сведений по Карпу будем сводить уже известные языки из к новым языкам, тем самым доказывая их -трудность, а потом и -полноту. Доказательство -полноты будет состоять из двух пунктов: доказательство -трудности и принадлежности языка классу .
-полноту. Начнем мы с языка , так как к нему несложно сводятся все языки из . Потом с помощьюNP-полнота
— язык троек , таких что недетерминированная машина Тьюринга на входной строке возращает за время .
— недетерминированная машина Тьюринга,
Теорема: |
Доказательство: |
|
NP-полнота
— язык булевых формул из переменных, для которых существует подстановка, при которой формула истинна.
Теорема (Кук): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Доказательство: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Другие примеры NP-полных языков
NP-полнота CNFSAT
КНФ, таких что для них существует подстановка, при которой формула истинна.
— язык булевых формул, заданных взадано в КНФ и
Теорема: |
Доказательство: |
|
NP-полнота 3-SAT
КНФ, таких что каждый дизъюнкт состоит ровно из 3 переменных и для этой булевой формулы существует подстановка, при которой она истинна.
— язык булевых формул, заданных взадано в 3КНФ и
Теорема: |
Доказательство: |
|
NP-полнота поиска максимального независимого множества
— язык неориентированных графов, таких что в графе есть независимое множество мощности .
, такое что независимо в
Теорема: |
Доказательство: |
|
NP-полнота поиска минимального вершинного покрытия в графе
— язык неориентированных графов, таких что в графе есть вершинное покрытие мощности .
Лемма: |
— неориентированный граф. является независимым множеством в является вершинным покрытием в . |
Доказательство: |
Пусть — независимое множество. Заметим, что по определению независимого множества , из чего следует, что , это значит, что — вершинное покрытие. |
Теорема: |
Доказательство: |
|