Классы NP, coNP, Σ₁, Π₁ — различия между версиями
(→Примеры NP-языков) |
|||
Строка 15: | Строка 15: | ||
*<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>. | ||
− | + | q(x): | |
− | <tex> | + | y <tex>\leftarrow?\{0,1\}^{\le p(|x|)}</tex> |
− | + | return <tex>R(x,y)</tex> | |
Если <tex>x\in L</tex>, то программа сможет «угадать» подходящий сертификат. Если <tex>x\notin L</tex>, то подходящего сертификата не существует по определению. Таким образом, <tex>q</tex> разрешает <tex>L</tex>, следовательно <tex>L\in \mathrm{NP}</tex>. | Если <tex>x\in L</tex>, то программа сможет «угадать» подходящий сертификат. Если <tex>x\notin L</tex>, то подходящего сертификата не существует по определению. Таким образом, <tex>q</tex> разрешает <tex>L</tex>, следовательно <tex>L\in \mathrm{NP}</tex>. | ||
*<tex>\mathrm{NP} \subset \mathrm{\Sigma_1}</tex>. | *<tex>\mathrm{NP} \subset \mathrm{\Sigma_1}</tex>. | ||
Строка 36: | Строка 36: | ||
1. Построим программу <tex>r</tex>, разрешающую <tex>L_1\cap L_2</tex>: | 1. Построим программу <tex>r</tex>, разрешающую <tex>L_1\cap L_2</tex>: | ||
− | + | r(x): | |
− | + | return p(x) <tex>\&\&</tex> q(x) | |
2. Построим программу <tex>r</tex>, разрешающую <tex>L_1\cup L_2</tex>: | 2. Построим программу <tex>r</tex>, разрешающую <tex>L_1\cup L_2</tex>: | ||
− | + | r(x): | |
− | + | return p(x) <tex>||</tex> q(x) | |
3. Построим программу <tex>r</tex>, разрешающую <tex>L_1L_2</tex>: | 3. Построим программу <tex>r</tex>, разрешающую <tex>L_1L_2</tex>: | ||
− | + | r(x): | |
− | <tex> | + | n <tex>\leftarrow|x|</tex> |
− | <tex> | + | mid <tex>\leftarrow?</tex> {1..n} |
− | + | return p(x[1..mid]) <tex>\&\&</tex> q(x[mid+1..n]) | |
4. Построим программу <tex>r</tex>, разрешающую <tex>L_1^*</tex>: | 4. Построим программу <tex>r</tex>, разрешающую <tex>L_1^*</tex>: | ||
− | + | r(x): | |
− | <tex> | + | n <tex>\leftarrow|x|</tex> |
− | <tex> | + | prev <tex>\leftarrow</tex> 1 |
− | + | do | |
− | <tex> | + | cur <tex>\leftarrow?</tex> {prev..n} |
− | + | if (!p(x[prev..cur])) | |
− | + | return false | |
− | <tex> | + | prev <tex>\leftarrow</tex> cur+1 |
− | + | while (cur != n) | |
− | + | return true | |
<br> | <br> | ||
}} | }} |
Версия 16:09, 5 июня 2012
Определение
Определение: |
. |
То есть
— это множество языков, разрешимых недетерминированной программой за полиномиальное время.Определение: |
. |
Нестрого говоря,
— это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор , а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.Теорема: |
. |
Доказательство: |
Пусть . Тогда существуют и полином из определения . Построим недетерминированную программу , разрешающую .q(x): yreturn Если , то программа сможет «угадать» подходящий сертификат. Если , то подходящего сертификата не существует по определению. Таким образом, разрешает , следовательно .
|
Примечание: определение
часто называют также «определением NP на языке сертификатов».Свойства
Теорема: |
Пусть . Тогда:
|
Доказательство: |
Пусть разрешает , а разрешает .1. Построим программу , разрешающую : r(x):
return p(x)
q(x)
2. Построим программу , разрешающую : r(x):
return p(x)
q(x)
3. Построим программу , разрешающую :r(x): nmid {1..n} return p(x[1..mid]) q(x[mid+1..n]) 4. Построим программу , разрешающую :r(x): nprev 1 do cur {prev..n} if (!p(x[prev..cur])) return false prev cur+1 while (cur != n) return true |
Примеры NP-языков
- Язык раскрасок графа в цветов;
- Задача о клике;
- Тетрис
Все эти языки также являются . О существовании -полными языка, не являющегося -полным гласит теорема Ладнера.
Связь P и NP
Очевидно, что редкий ; было доказано, что -полный языкдоказательство должно быть нерелятивизующимся; различные попытки найти полиномиальные решения для задач из :
, так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найтиНекоторые задачи из
очень похожи на задачи из . В каждой из приведенных ниже пар задач первая разрешима за полиномиальное время, а вторая является -полной. При этом различие между задачами кажется совершенно незначительным.- Поиск самых коротких и самых длинных простых путей;
- Эйлеров и гамильтонов циклы;
- 2-CNF и 3-CNF выполнимость.