Классы NP, coNP, Σ₁, Π₁ — различия между версиями
Iloskutov (обсуждение | вклад) (→Определение: добавил определение Π₁ и переименовал раздел) |
Iloskutov (обсуждение | вклад) (→Примеры языков из NP: переформатировал примеры) |
||
Строка 71: | Строка 71: | ||
== Примеры языков из NP == | == Примеры языков из NP == | ||
− | + | === Проблема раскраски вершин графа в <tex>k</tex> цветов === | |
− | + | Разрешается следующей недетерминированной программой за полиномиальное относительно числа вершин время: | |
− | r(G) | + | <tex>r(G)\colon</tex> |
n = <tex>|V(G)|</tex> | n = <tex>|V(G)|</tex> | ||
− | c | + | c <tex>\gets? \{ 1, \dotsc, k \} ^ n</tex> |
− | '''for''' uv '''in''' <tex>E(G)</tex> | + | '''for''' <tex>uv</tex> '''in''' <tex>E(G)</tex> |
'''if''' c[u] == c[v] | '''if''' c[u] == c[v] | ||
'''return''' ''false'' | '''return''' ''false'' | ||
'''return''' ''true'' | '''return''' ''true'' | ||
− | + | === Проблема нахождения гамильтонова цикла === | |
− | + | <tex>r(G)\colon</tex> | |
− | + | n = <tex>|V(G)|</tex> | |
− | + | p <tex>\gets? V(G) ^ n</tex> | |
− | + | '''for''' i = 1 '''to''' n | |
− | + | '''if''' v[i] '''not in''' p | |
− | + | '''return''' ''false'' | |
− | + | p[n + 1] = p[1] | |
− | + | '''for''' i = 1 '''to''' n | |
− | + | '''if''' <tex>p[i]p[i + 1] \notin E(G)</tex> | |
− | + | '''return''' ''false'' | |
− | + | '''return''' ''true'' | |
− | + | === Задача о клике === | |
− | + | <tex>r(G)\colon</tex> | |
− | Все эти языки также являются [[Примеры_NP-полных_языков._Теорема_Кука|<tex>\mathrm{NP}</tex>-полными]]. По [[Теорема Ладнера|теореме Ладнера]], существует язык из <tex>\mathrm{NP}</tex>, не являющийся <tex>\mathrm{NP}</tex>-полным. | + | n = <tex>|V(G)|</tex> |
+ | c <tex>\gets? \{ 0, 1 \} ^ n</tex> | ||
+ | '''for''' <tex>u</tex> '''in''' <tex>V(G)</tex> | ||
+ | '''for''' <tex>v</tex> '''in''' <tex>V(G)</tex> | ||
+ | '''if''' <tex>u \ne v</tex> '''and''' <tex>c[u]</tex> '''and''' <tex>c[v]</tex> '''and''' <tex>uv \notin E(G)</tex> | ||
+ | '''return''' ''false'' | ||
+ | '''return''' ''true'' | ||
+ | |||
+ | Все эти языки также являются [[Примеры_NP-полных_языков._Теорема_Кука|<tex>\mathrm{NP}</tex>-полными]]. По [[Теорема Ладнера|теореме Ладнера]], если <tex>\mathrm{P \ne NP}</tex>, то существует язык из <tex>\mathrm{NP}</tex>, не являющийся <tex>\mathrm{NP}</tex>-полным. | ||
== Примеры языков из coNP == | == Примеры языков из coNP == |
Версия 18:37, 24 марта 2016
Содержание
Определения, связь Σ₁ и NP
Определение: |
. |
То есть недетерминированной программой за полиномиальное время.
— это множество языков, разрешимыхОпределение: |
. |
То есть
— это множество языков, дополнение к которым лежит в .Определение: |
. |
Нестрого говоря,
— это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор , а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.Определение: |
. |
То есть
— это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор , а для каждого слова из языка (и только для слова из языка) нельзя предъявить сертификат длины, ограниченной неким полиномом, опровергающий принадлежность слова языку и проверяемый верификатором. Легко видеть, что — множество языков, дополнения к которым лежат в .Теорема: |
. |
Доказательство: |
.
q(x):
y =
return R(x,y)
.
|
Примечание: определение
часто называют также «определением на языке сертификатов», а , соответственно, «определением на языке сертификатов».Свойства
Теорема: |
Пусть . Тогда:
|
Доказательство: |
Пусть разрешает , а разрешает .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
Проблема раскраски вершин графа в цветов
Разрешается следующей недетерминированной программой за полиномиальное относительно числа вершин время:
n = c for in if c[u] == c[v] return false return true
Проблема нахождения гамильтонова цикла
n = p for i = 1 to n if v[i] not in p return false p[n + 1] = p[1] for i = 1 to n if return false return true
Задача о клике
n = c for in for in if and and and return false return true
Все эти языки также являются . По -полнымитеореме Ладнера, если , то существует язык из , не являющийся -полным.
Примеры языков из coNP
- Даны целых чисел. Верно ли, что любое их непустое подмножество имеет ненулевую сумму?
- TAUT: определить, является ли заданная булева формула тавтологией. К этой задаче тривиально сводится дополнение к SAT: если отрицание формулы невыполнимо, то она является тавтологией, и наоборот.
Связь P и NP
Очевидно, что редкий ; было доказано, что -полный языкдоказательство должно быть нерелятивизующимся; различные попытки найти полиномиальные решения для задач из :
, так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найтиНекоторые задачи из
очень похожи на задачи из . В каждой из приведенных ниже пар задач первая разрешима за полиномиальное время, а вторая является -полной. При этом различие между задачами кажется совершенно незначительным.- Поиск самых коротких и самых длинных простых путей;
- Эйлеров и гамильтонов циклы;
- 2-CNF и 3-CNF выполнимость.