Примеры NP-полных языков. Теорема Кука — различия между версиями
(изменил форматирование в соответствии с новыми правилами ведения конспектов) |
|||
Строка 6: | Строка 6: | ||
тогда окажется, что P = NP. | тогда окажется, что P = NP. | ||
− | Мы рассмотрим некоторые языки и докажем их NP-полноту. Начнем мы с языка <tex> BH_{1N} </tex>, так как к нему несложно сводятся все языки из NP. | + | Мы рассмотрим некоторые языки и докажем их NP-полноту. Начнем мы с языка <tex> \mathrm{BH_{1N}} </tex>, так как к нему несложно сводятся все языки из NP. |
Потом с помощью сведений по Карпу будем сводить уже известные языки из NPC к новым языкам, тем самым доказывая их NP-трудность, а потом и NP-полноту. | Потом с помощью сведений по Карпу будем сводить уже известные языки из NPC к новым языкам, тем самым доказывая их NP-трудность, а потом и NP-полноту. | ||
Доказательство NP-полноты будет состоять из двух пунктов: доказательство NP-трудности и принадлежности языка классу NP. | Доказательство NP-полноты будет состоять из двух пунктов: доказательство NP-трудности и принадлежности языка классу NP. | ||
− | == NP-полнота <tex> BH_{1N} </tex> == | + | == NP-полнота <tex> \mathrm{BH_{1N}} </tex> == |
− | <tex> BH_{1N} </tex> {{---}} язык троек <tex> \langle m, x, 1^t \rangle </tex>, таких что недетерминированная машина Тьюринга <tex> m </tex> на входной строке <tex> x </tex> возращает 1 за время <tex> T(m, x) \le t </tex>. | + | <tex> \mathrm{BH_{1N}} </tex> {{---}} язык троек <tex> \langle m, x, 1^t \rangle </tex>, таких что недетерминированная машина Тьюринга <tex> m </tex> на входной строке <tex> x </tex> возращает 1 за время <tex> T(m, x) \le t </tex>. |
− | <tex> BH_{1N} = \lbrace \langle m, x, 1^t \rangle | m </tex> {{---}} недерминированная машина Тьюринга, <tex> m(x) = 1, T(m,x) \le t \rbrace </tex> | + | <tex> \mathrm{BH_{1N}} = \lbrace \langle m, x, 1^t \rangle \bigm| m </tex> {{---}} недерминированная машина Тьюринга, <tex> m(x) = 1, T(m,x) \le t \rbrace </tex> |
{{Теорема | {{Теорема | ||
− | |statement=<tex> BH_{1N} \in NPC </tex> | + | |statement=<tex> \mathrm{BH_{1N}} \in \mathrm{NPC} </tex> |
|proof= | |proof= | ||
− | # <tex> BH_{1N} \in NPH </tex> | + | # <tex> \mathrm{BH_{1N}} \in \mathrm{NPH} </tex> |
− | # <tex> BH_{1N} \in NP </tex> | + | # <tex> \mathrm{BH_{1N}} \in \mathrm{NP} </tex> |
}} | }} | ||
− | == NP-полнота <tex> SAT </tex> == | + | == NP-полнота <tex> \mathrm{SAT} </tex> == |
− | <tex> SAT </tex> {{---}} язык булевых формул из <tex> n </tex> переменных, для которых существует подстановка, при которой формула истинна. | + | <tex> \mathrm{SAT}</tex> {{---}} язык булевых формул из <tex> n </tex> переменных, для которых существует подстановка, при которой формула истинна. |
− | <tex> SAT = \lbrace \varphi\ |\ \exists x : \varphi(x) = 1 \rbrace </tex> | + | <tex> \mathrm{SAT} = \lbrace \varphi\ \bigm|\ \exists x : \varphi(x) = 1 \rbrace </tex> |
{{Теорема | {{Теорема | ||
|author=Кук | |author=Кук | ||
− | |statement=<tex> SAT \in NPC </tex> | + | |statement=<tex> \mathrm{SAT}\in \mathrm{NPC} </tex> |
|proof= | |proof= | ||
− | # <tex> SAT \in NPH </tex> | + | # <tex> \mathrm{SAT}\in \mathrm{NPH} </tex> |
− | # <tex> SAT \in NP </tex> <br>Можно написать недетерминированную программу <tex> p</tex>, которая распознает язык <tex> SAT </tex>. Она будет недетерминированно выбирать подстановку, проверять истинна ли формула при такой подстановке и выдавать ответ: | + | # <tex> \mathrm{SAT}\in \mathrm{NP} </tex> <br>Можно написать недетерминированную программу <tex> p</tex>, которая распознает язык <tex> \mathrm{SAT} </tex>. Она будет недетерминированно выбирать подстановку, проверять истинна ли формула при такой подстановке и выдавать ответ: |
<font size = 2> | <font size = 2> | ||
<tex>p(\varphi)</tex> | <tex>p(\varphi)</tex> |
Версия 10:38, 4 июня 2012
Эта статья находится в разработке!
Содержание
Введение
В этой статье мы рассмотрим класс NP-полных языков — NPC. NPC является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс P, тогда окажется, что P = NP.
Мы рассмотрим некоторые языки и докажем их NP-полноту. Начнем мы с языка
, так как к нему несложно сводятся все языки из NP. Потом с помощью сведений по Карпу будем сводить уже известные языки из NPC к новым языкам, тем самым доказывая их NP-трудность, а потом и NP-полноту. Доказательство NP-полноты будет состоять из двух пунктов: доказательство NP-трудности и принадлежности языка классу NP.NP-полнота
— язык троек , таких что недетерминированная машина Тьюринга на входной строке возращает 1 за время .
— недерминированная машина Тьюринга,
Теорема: |
Доказательство: |
|
NP-полнота
— язык булевых формул из переменных, для которых существует подстановка, при которой формула истинна.
Теорема (Кук): |
Доказательство: |
for : = random(2); if == 1: return 1 else return 0 |