Классы NP, coNP, Σ₁, Π₁ — различия между версиями
Iloskutov (обсуждение | вклад) (→Свойства: Пофиксил оформление псевдокода) |
|||
Строка 37: | Строка 37: | ||
1. Построим программу <tex>r</tex>, разрешающую <tex>L_1\cap L_2</tex>: | 1. Построим программу <tex>r</tex>, разрешающую <tex>L_1\cap L_2</tex>: | ||
r(x): | r(x): | ||
− | return p(x) | + | '''return''' p(x) '''and''' 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): | r(x): | ||
− | return p(x) | + | '''return''' p(x) '''or''' q(x) |
3. Построим программу <tex>r</tex>, разрешающую <tex>L_1L_2</tex>: | 3. Построим программу <tex>r</tex>, разрешающую <tex>L_1L_2</tex>: | ||
r(x): | r(x): | ||
− | n | + | n = <tex>|</tex>x<tex>|</tex> |
− | mid | + | mid =<sup>?</sup> {1 .. n} |
− | return p(x[1..mid]) | + | '''return''' p(x[1 .. mid]) '''and''' q(x[mid+1 .. n]) |
4. Построим программу <tex>r</tex>, разрешающую <tex>L_1^*</tex>: | 4. Построим программу <tex>r</tex>, разрешающую <tex>L_1^*</tex>: | ||
+ | <code> | ||
r(x): | r(x): | ||
− | n | + | n = <tex>|</tex>x<tex>|</tex> |
− | prev | + | prev = 1 |
− | do | + | '''do''' |
− | cur | + | cur =<sup>?</sup> {prev .. n} |
− | if | + | '''if not''' p(x[prev .. cur]) |
− | return false | + | '''return false''' |
− | prev | + | prev = cur + 1 |
− | while | + | '''while''' cur != n |
− | return true | + | '''return true''' |
+ | </code> | ||
<br> | <br> | ||
}} | }} |
Версия 01:30, 25 февраля 2016
Определение
Определение: |
. |
То есть
— это множество языков, разрешимых недетерминированной программой за полиномиальное время.Определение: |
. |
Нестрого говоря,
— это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор , а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.Теорема: |
. |
Доказательство: |
Пусть . Тогда существуют и полином из определения . Построим недетерминированную программу , разрешающую . q(x):
y ←
return R(x,y)
Если , то программа сможет «угадать» подходящий сертификат. Если , то подходящего сертификата не существует по определению. Таким образом, разрешает , следовательно .
|
Примечание: определение
часто называют также «определением NP на языке сертификатов».Свойства
Теорема: |
Пусть . Тогда:
|
Доказательство: |
Пусть разрешает , а разрешает .1. Построим программу , разрешающую :r(x): return p(x) and q(x) 2. Построим программу , разрешающую :r(x): return p(x) or q(x) 3. Построим программу , разрешающую :r(x): n =x mid =? {1 .. n} return p(x[1 .. mid]) and q(x[mid+1 .. n]) 4. Построим программу r(x): n =x prev = 1 do cur =? {prev .. n} if not p(x[prev .. cur]) return false prev = cur + 1 while cur != n return true
|
Примеры языков из NP
- Язык раскрасок графа в цветов.
- Задача о клике.
- Тетрис.
Все эти языки также являются . По -полнымитеореме Ладнера существует язык из , не являющийся -полным.
Связь P и NP
Очевидно, что редкий ; было доказано, что -полный языкдоказательство должно быть нерелятивизующимся; различные попытки найти полиномиальные решения для задач из :
, так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найтиНекоторые задачи из
очень похожи на задачи из . В каждой из приведенных ниже пар задач первая разрешима за полиномиальное время, а вторая является -полной. При этом различие между задачами кажется совершенно незначительным.- Поиск самых коротких и самых длинных простых путей;
- Эйлеров и гамильтонов циклы;
- 2-CNF и 3-CNF выполнимость.