Примеры NP-полных языков. Теорема Кука — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Ссылки)
(Заменил жирные классы на \mathrm)
Строка 2: Строка 2:
  
 
== Введение ==
 
== Введение ==
В этой статье мы рассмотрим класс '''NP'''-полных языков {{---}} '''NPC'''.
+
В этой статье мы рассмотрим класс <tex>\mathrm{NP}</tex>-полных языков {{---}} <tex>\mathrm{NPC}</tex>.
'''NPC''' является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс '''P''',  
+
<tex>\mathrm{NPC}</tex> является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс <tex>\mathrm{P}</tex>,  
тогда окажется, что '''P = NP'''.
+
тогда окажется, что <tex>\mathrm{P} = \mathrm{NP}</tex>.
  
Мы рассмотрим некоторые языки и докажем их '''NP'''-полноту. Начнем мы с языка <tex> \mathrm{BH_{1N}} </tex>, так как к нему несложно сводятся все языки из '''NP'''.  
+
Мы рассмотрим некоторые языки и докажем их <tex>\mathrm{NP}</tex>-полноту. Начнем мы с языка <tex> \mathrm{BH_{1N}} </tex>, так как к нему несложно сводятся все языки из <tex>\mathrm{NP}</tex>.  
Потом с помощью [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведений по Карпу]] будем сводить уже известные языки из '''NPC''' к новым языкам, тем самым доказывая их '''NP'''-трудность, а потом и '''NP'''-полноту.
+
Потом с помощью [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведений по Карпу]] будем сводить уже известные языки из <tex>\mathrm{NPC}</tex> к новым языкам, тем самым доказывая их <tex>\mathrm{NP}</tex>-трудность, а потом и <tex>\mathrm{NP}</tex>-полноту.
Доказательство '''NP'''-полноты будет состоять из двух пунктов: доказательство '''NP'''-трудности и принадлежности языка классу '''NP'''.
+
Доказательство <tex>\mathrm{NP}</tex>-полноты будет состоять из двух пунктов: доказательство <tex>\mathrm{NP}</tex>-трудности и принадлежности языка классу <tex>\mathrm{NP}</tex>.
  
 
== NP-полнота <tex> \mathrm{BH_{1N}} </tex> ==
 
== NP-полнота <tex> \mathrm{BH_{1N}} </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> \mathrm{BH_{1N}} </tex> {{---}} язык троек <tex> \langle m, x, 1^t \rangle </tex>, таких что недетерминированная машина Тьюринга <tex> m </tex> на входной строке <tex> x </tex> возращает <tex>1</tex> за время <tex> T(m, x) \le t </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>
 
<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>
Строка 30: Строка 30:
 
|proof=
 
|proof=
 
# <tex> \mathrm{SAT}\in \mathrm{NPH} </tex>
 
# <tex> \mathrm{SAT}\in \mathrm{NPH} </tex>
# <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>. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ:
 
<font size = 2>
 
<font size = 2>
 
   <tex>p(\varphi)</tex>
 
   <tex>p(\varphi)</tex>

Версия 17:06, 4 июня 2012

Эта статья находится в разработке!

Введение

В этой статье мы рассмотрим класс [math]\mathrm{NP}[/math]-полных языков — [math]\mathrm{NPC}[/math]. [math]\mathrm{NPC}[/math] является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс [math]\mathrm{P}[/math], тогда окажется, что [math]\mathrm{P} = \mathrm{NP}[/math].

Мы рассмотрим некоторые языки и докажем их [math]\mathrm{NP}[/math]-полноту. Начнем мы с языка [math] \mathrm{BH_{1N}} [/math], так как к нему несложно сводятся все языки из [math]\mathrm{NP}[/math]. Потом с помощью сведений по Карпу будем сводить уже известные языки из [math]\mathrm{NPC}[/math] к новым языкам, тем самым доказывая их [math]\mathrm{NP}[/math]-трудность, а потом и [math]\mathrm{NP}[/math]-полноту. Доказательство [math]\mathrm{NP}[/math]-полноты будет состоять из двух пунктов: доказательство [math]\mathrm{NP}[/math]-трудности и принадлежности языка классу [math]\mathrm{NP}[/math].

NP-полнота [math] \mathrm{BH_{1N}} [/math]

[math] \mathrm{BH_{1N}} [/math] — язык троек [math] \langle m, x, 1^t \rangle [/math], таких что недетерминированная машина Тьюринга [math] m [/math] на входной строке [math] x [/math] возращает [math]1[/math] за время [math] T(m, x) \le t [/math].

[math] \mathrm{BH_{1N}} = \lbrace \langle m, x, 1^t \rangle \bigm| m [/math] — недерминированная машина Тьюринга, [math] m(x) = 1, T(m,x) \le t \rbrace [/math]

Теорема:
[math] \mathrm{BH_{1N}} \in \mathrm{NPC} [/math]
Доказательство:
[math]\triangleright[/math]
  1. [math] \mathrm{BH_{1N}} \in \mathrm{NPH} [/math]
  2. [math] \mathrm{BH_{1N}} \in \mathrm{NP} [/math]
[math]\triangleleft[/math]

NP-полнота [math] \mathrm{SAT} [/math]

[math] \mathrm{SAT}[/math] — язык булевых формул из [math] n [/math] переменных, для которых существует подстановка, при которой формула истинна.

[math] \mathrm{SAT} = \lbrace \varphi\ \bigm|\ \exists x : \varphi(x) = 1 \rbrace [/math]

Теорема (Кук):
[math] \mathrm{SAT}\in \mathrm{NPC} [/math]
Доказательство:
[math]\triangleright[/math]
  1. [math] \mathrm{SAT}\in \mathrm{NPH} [/math]
  2. [math] \mathrm{SAT}\in \mathrm{NP} [/math]
    Можно написать недетерминированную программу [math]p[/math], которая распознает язык [math] \mathrm{SAT} [/math]. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ:

 [math]p(\varphi)[/math]
   for [math] i \in \lbrace 1 \ldots n \rbrace [/math]:
     [math] x_i [/math] = choose[math] \lbrace 0, 1 \rbrace [/math];
   if [math] \varphi(x) [/math] == 1:
     return 1
   else
     return 0
[math]\triangleleft[/math]

Другие примеры NP-полных языков

NP-полнота 3-SAT

NP-полнота раскраски графа

NP-полнота поиска минимального вершинного покрытия в графе

NP-полнота поиска максимальной клики в графе

NP-полнота поиска гамильтонова цикла и пути в графе

NP-полнота задачи о рюкзаке

Ссылки