Классы NP, coNP, Σ₁, Π₁ — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 4: Строка 4:
 
То есть <tex>\mathrm{NP}</tex> — это множество языков, разрешимых недетерминированной программой за полиномиальное время.
 
То есть <tex>\mathrm{NP}</tex> — это множество языков, разрешимых недетерминированной программой за полиномиальное время.
 
{{Определение
 
{{Определение
|definition=<tex>\mathrm{\Sigma_1}=\{L|\exists R(x,y)\in \mathrm{P}, p(n) - poly:x\in L\Leftrightarrow\exists y : |y|\le p(|x|), R(x,y)=1\}</tex>.
+
|definition=<tex>\mathrm{\Sigma_1}=\{L|\exists R(x,y)\in \tilde{\mathrm{P}}, p(n) - poly:x\in L\Leftrightarrow\exists y : |y|\le p(|x|), R(x,y)=1\}</tex>.
 
}}
 
}}
 
Нестрого говоря, <tex>\mathrm{\Sigma_1}</tex> — это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор <tex>R(x,y)</tex>, а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.
 
Нестрого говоря, <tex>\mathrm{\Sigma_1}</tex> — это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор <tex>R(x,y)</tex>, а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.
Строка 13: Строка 13:
 
|proof=
 
|proof=
 
*<tex>\mathrm{\Sigma_1} \subset \mathrm{NP}</tex>.
 
*<tex>\mathrm{\Sigma_1} \subset \mathrm{NP}</tex>.
Пусть <tex>L \in \mathrm{\Sigma_1}</tex>. Тогда сщуествуют <tex>R(x,y)</tex> и полином <tex>p</tex> из определения <tex>\mathrm{\Sigma_1}</tex>. Построим недетерминированную программу <tex>q(x)</tex>, разрешающую <tex>L</tex>.
+
Пусть <tex>L \in \mathrm{\Sigma_1}</tex>. Тогда существуют <tex>R(x,y)</tex> и полином <tex>p</tex> из определения <tex>\mathrm{\Sigma_1}</tex>. Построим недетерминированную программу <tex>q(x)</tex>, разрешающую <tex>L</tex>.
 
   <tex>q(x):</tex>
 
   <tex>q(x):</tex>
 
     <tex>y\leftarrow?\{0,1\}^{\le p(|x|)}</tex>
 
     <tex>y\leftarrow?\{0,1\}^{\le p(|x|)}</tex>
Строка 21: Строка 21:
 
Пусть <tex>L\in \mathrm{NP}</tex>. Тогда существует недетерминированная программа <tex>q(x)</tex>, разрешающая этот язык. Построим верификатор <tex>R(x,y)</tex>. В качестве сертификата будем использовать последовательность выборов в программе <tex>q</tex>, приводящую к допуску слова (такой сертификат имеет полиномиальную длину, поскольку выборов в <tex>q</tex> может быть сделано не более, чем время ее работы, то есть не более, чем полином). Верификатор будет аналогичен программе <tex>q</tex>, только вместо каждого недетерминированного выбора он будет присваивать значение, указанное в сертификате. Если <tex>x\in L</tex>, то в <tex>q</tex> существует последовательность выборов таких, что <tex>q(x)=1</tex>, следовательно существует и верный сертификат. Если <tex>x\notin L</tex>, то для любой последовательности выборов <tex>q(x)=0</tex>, следовательно подходящего сертификата не существует. Таким образом, <tex>L \in \mathrm{\Sigma_1}</tex>.
 
Пусть <tex>L\in \mathrm{NP}</tex>. Тогда существует недетерминированная программа <tex>q(x)</tex>, разрешающая этот язык. Построим верификатор <tex>R(x,y)</tex>. В качестве сертификата будем использовать последовательность выборов в программе <tex>q</tex>, приводящую к допуску слова (такой сертификат имеет полиномиальную длину, поскольку выборов в <tex>q</tex> может быть сделано не более, чем время ее работы, то есть не более, чем полином). Верификатор будет аналогичен программе <tex>q</tex>, только вместо каждого недетерминированного выбора он будет присваивать значение, указанное в сертификате. Если <tex>x\in L</tex>, то в <tex>q</tex> существует последовательность выборов таких, что <tex>q(x)=1</tex>, следовательно существует и верный сертификат. Если <tex>x\notin L</tex>, то для любой последовательности выборов <tex>q(x)=0</tex>, следовательно подходящего сертификата не существует. Таким образом, <tex>L \in \mathrm{\Sigma_1}</tex>.
 
}}
 
}}
'''Примечание:'''определение <tex>\mathrm{\Sigma_1}</tex> часто называют также "определением NP на языке сертификатов".
+
'''Примечание:'''определение <tex>\mathrm{\Sigma_1}</tex> часто называют также «определением NP на языке сертификатов».
  
 
=== Свойства ===
 
=== Свойства ===
Строка 68: Строка 68:
 
=== Связь P и NP ===
 
=== Связь P и NP ===
 
Очевидно, что <tex>\mathrm{P} \subseteq \mathrm{NP}</tex>, так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найти [[Теорема_Махэни|редкий <tex>\mathrm{NP}</tex>-полный язык]]; было доказано, что [[Теорема_Бейкера_—_Гилла_—_Соловэя|доказательство должно быть нерелятивизующимся]]; различные попытки найти полиномиальные решения для задач из <tex>\mathrm{NPC}</tex>:
 
Очевидно, что <tex>\mathrm{P} \subseteq \mathrm{NP}</tex>, так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найти [[Теорема_Махэни|редкий <tex>\mathrm{NP}</tex>-полный язык]]; было доказано, что [[Теорема_Бейкера_—_Гилла_—_Соловэя|доказательство должно быть нерелятивизующимся]]; различные попытки найти полиномиальные решения для задач из <tex>\mathrm{NPC}</tex>:
*[http://arxiv.org/abs/1011.3944 "решение" 3SAT за полиномиальное время];
+
*[http://arxiv.org/abs/1011.3944 «решение» 3SAT за полиномиальное время];
 
*[http://www.cse.yorku.ca/~aaw/Zambito/TSP_Survey.pdf задача о коммивояжере].
 
*[http://www.cse.yorku.ca/~aaw/Zambito/TSP_Survey.pdf задача о коммивояжере].
  

Версия 16:51, 4 июня 2012

Определение:
[math]\mathrm{NP}=\bigcup\limits_{p(n) \in poly}\mathrm{NTIME}(p(n))[/math].

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

Определение:
[math]\mathrm{\Sigma_1}=\{L|\exists R(x,y)\in \tilde{\mathrm{P}}, p(n) - poly:x\in L\Leftrightarrow\exists y : |y|\le p(|x|), R(x,y)=1\}[/math].

Нестрого говоря, [math]\mathrm{\Sigma_1}[/math] — это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор [math]R(x,y)[/math], а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.

Теорема:
[math]\mathrm{\Sigma_1}=\mathrm{NP}[/math].
Доказательство:
[math]\triangleright[/math]
  • [math]\mathrm{\Sigma_1} \subset \mathrm{NP}[/math].

Пусть [math]L \in \mathrm{\Sigma_1}[/math]. Тогда существуют [math]R(x,y)[/math] и полином [math]p[/math] из определения [math]\mathrm{\Sigma_1}[/math]. Построим недетерминированную программу [math]q(x)[/math], разрешающую [math]L[/math].

 [math]q(x):[/math]
   [math]y\leftarrow?\{0,1\}^{\le p(|x|)}[/math]
   [math]return[/math] [math]R(x,y)[/math]

Если [math]x\in L[/math], то программа сможет «угадать» подходящий сертификат. Если [math]x\notin L[/math], то подходящего сертификата не существует по определению. Таким образом, [math]q[/math] разрешает [math]L[/math], следовательно [math]L\in \mathrm{NP}[/math].

  • [math]\mathrm{NP} \subset \mathrm{\Sigma_1}[/math].
Пусть [math]L\in \mathrm{NP}[/math]. Тогда существует недетерминированная программа [math]q(x)[/math], разрешающая этот язык. Построим верификатор [math]R(x,y)[/math]. В качестве сертификата будем использовать последовательность выборов в программе [math]q[/math], приводящую к допуску слова (такой сертификат имеет полиномиальную длину, поскольку выборов в [math]q[/math] может быть сделано не более, чем время ее работы, то есть не более, чем полином). Верификатор будет аналогичен программе [math]q[/math], только вместо каждого недетерминированного выбора он будет присваивать значение, указанное в сертификате. Если [math]x\in L[/math], то в [math]q[/math] существует последовательность выборов таких, что [math]q(x)=1[/math], следовательно существует и верный сертификат. Если [math]x\notin L[/math], то для любой последовательности выборов [math]q(x)=0[/math], следовательно подходящего сертификата не существует. Таким образом, [math]L \in \mathrm{\Sigma_1}[/math].
[math]\triangleleft[/math]

Примечание:определение [math]\mathrm{\Sigma_1}[/math] часто называют также «определением NP на языке сертификатов».

Свойства

Теорема:
Пусть [math]L_1,L_2\in \mathrm{NP}[/math]. Тогда:
  1. [math]L_1\cap L_2\in \mathrm{NP}[/math];
  2. [math]L_1\cup L_2\in \mathrm{NP}[/math];
  3. [math]L_1L_2\in \mathrm{NP}[/math];
  4. [math]L_1^*\in \mathrm{NP}[/math].
Доказательство:
[math]\triangleright[/math]

Пусть [math]p[/math] разрешает [math]L_1[/math], а [math]q[/math] разрешает [math]L_2[/math].

1. Построим программу [math]r[/math], разрешающую [math]L_1\cap L_2[/math]:

 [math]r(x):[/math]
   [math]return[/math] [math]p(x)[/math] [math]\&\&[/math] [math]q(x)[/math] 

2. Построим программу [math]r[/math], разрешающую [math]L_1\cup L_2[/math]:

 [math]r(x):[/math]
   [math]return[/math] [math]p(x)[/math] [math]||[/math] [math]q(x)[/math] 

3. Построим программу [math]r[/math], разрешающую [math]L_1L_2[/math]:

 [math]r(x):[/math]
   [math]n\leftarrow|x|[/math]
   [math]mid\leftarrow?\{1..n\}[/math]
   [math]return[/math] [math]p(x[1..mid])[/math] [math]\&\&[/math] [math]q(x[mid+1..n])[/math]

4. Построим программу [math]r[/math], разрешающую [math]L_1^*[/math]:

 [math]r(x):[/math]
   [math]n\leftarrow|x|[/math]
   [math]prev\leftarrow 1[/math]
   [math]do[/math]
     [math]cur\leftarrow?\{prev..n\}[/math]
     [math]if[/math] [math](!p(x[prev..cur]))[/math]
       [math]return[/math] [math]false[/math]
     [math]prev\leftarrow cur+1[/math]
   [math]while[/math] [math](cur[/math] [math]!=[/math] [math]n)[/math]
   [math]return[/math] [math]true[/math]

[math]\triangleleft[/math]

Примеры NP-языков

  • Язык раскрасок графа в [math]k[/math] цветов;
  • Язык гамильтоновых графов;
  • Задача о клике;
  • Тетрис

Все эти языки также являются [math]\mathrm{NP}[/math]-полными. О существовании не полного [math]\mathrm{NP}[/math] языка.

Связь P и NP

Очевидно, что [math]\mathrm{P} \subseteq \mathrm{NP}[/math], так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найти редкий [math]\mathrm{NP}[/math]-полный язык; было доказано, что доказательство должно быть нерелятивизующимся; различные попытки найти полиномиальные решения для задач из [math]\mathrm{NPC}[/math]:

Ссылки