Примеры NP-полных языков. Теорема Кука — различия между версиями
Строка 22: | Строка 22: | ||
== NP-полнота <tex> SAT </tex> == | == NP-полнота <tex> SAT </tex> == | ||
− | <tex> SAT </tex> {{---}} язык булевых формул, для которых существует подстановка, при которой формула истинна. | + | <tex> SAT </tex> {{---}} язык булевых формул из <tex> n </tex> переменных, для которых существует подстановка, при которой формула истинна. |
<tex> SAT = \lbrace \varphi\ |\ \exists x : \varphi(x) = 1 \rbrace </tex> | <tex> SAT = \lbrace \varphi\ |\ \exists x : \varphi(x) = 1 \rbrace </tex> | ||
Строка 30: | Строка 30: | ||
|proof= | |proof= | ||
# <tex> SAT \in NPH </tex> | # <tex> SAT \in NPH </tex> | ||
− | # <tex> SAT \in NP </tex> <br>Можно написать недетерминированную программу, которая распознает язык SAT. Она будет недетерминированно выбирать подстановку, проверять истинна ли формула при такой подстановке и выдавать ответ | + | # <tex> SAT \in NP </tex> <br>Можно написать недетерминированную программу <tex> p</tex>, которая распознает язык <tex> SAT </tex>. Она будет недетерминированно выбирать подстановку, проверять истинна ли формула при такой подстановке и выдавать ответ: |
+ | <font size = 2> | ||
+ | <tex>p(\varphi)</tex> | ||
+ | for <tex> i \in \lbrace 1 \ldots n \rbrace </tex>: | ||
+ | <tex> x_i </tex> = random(2); | ||
+ | if <tex> \varphi(x) </tex> == 1: | ||
+ | return 1 | ||
+ | else | ||
+ | return 0 | ||
+ | </font> | ||
}} | }} | ||
+ | == Другие примеры NP-полных языков == | ||
+ | === NP-полнота 3-SAT === | ||
+ | === NP-полнота раскраски графа === | ||
+ | === NP-полнота поиска минимального вершинного покрытия в графе === | ||
+ | === NP-полнота поиска максимальной клики в графе === | ||
+ | === NP-полнота поиска гамильтонова цикла и пути в графе === | ||
+ | === NP-полнота задачи о рюкзаке === | ||
[[Категория: Теория сложности]] | [[Категория: Теория сложности]] |
Версия 15:59, 1 июня 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 |