Классы NP, coNP, Σ₁, Π₁ — различия между версиями
Iloskutov (обсуждение | вклад) (→Свойства: Пофиксил оформление псевдокода) |
Iloskutov (обсуждение | вклад) (Добавил определение co-NP, доказал первый пример, поправил псевдокод) |
||
Строка 1: | Строка 1: | ||
== Определение == | == Определение == | ||
{{Определение | {{Определение | ||
− | |definition=<tex>\mathrm{NP}=\bigcup\limits_{p(n) \in poly}\ | + | |definition=<tex>\mathrm{NP}=\!\!\bigcup\limits_{p(n) \in poly}\!\!\operatorname{NTIME}(p(n))</tex>. |
}} | }} | ||
То есть <tex>\mathrm{NP}</tex> — это множество языков, разрешимых недетерминированной программой за полиномиальное время. | То есть <tex>\mathrm{NP}</tex> — это множество языков, разрешимых недетерминированной программой за полиномиальное время. | ||
{{Определение | {{Определение | ||
− | |definition=<tex>\mathrm{\Sigma_1}=\{L\bigm|\exists R(x,y)\in \tilde{\mathrm{P}}, p(n) | + | |definition=<tex>\textrm{co-NP} = \{L \bigm| \overline{L} \in \mathrm{NP}\}</tex>. |
+ | }} | ||
+ | То есть <tex>\textrm{co-NP}</tex> — это множество языков, дополнение к которым лежит в NP. | ||
+ | {{Определение | ||
+ | |definition=<tex>\mathrm{\Sigma_1}=\{L\bigm|\exists R(x,y)\in \tilde{\mathrm{P}}, p(n) \in 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>, а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором. | ||
Строка 15: | Строка 19: | ||
*<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): | |
− | + | y = <tex>\{0,1\}^{p(|x|)}</tex> | |
− | + | return R(x,y) | |
Если <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: | Строка 40: | ||
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) '''and''' q(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): | |
'''return''' p(x) '''or''' q(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): | |
− | + | n = <tex>|</tex>x<tex>|</tex> | |
− | + | mid =<sup>?</sup> {1 .. n} | |
− | + | '''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> | <code> | ||
− | + | r(x): | |
− | + | n = <tex>|</tex>x<tex>|</tex> | |
− | + | prev = 1 | |
− | + | '''do''' | |
− | + | cur =<sup>?</sup> {prev .. n} | |
− | + | '''if not''' p(x[prev .. cur]) | |
− | + | '''return''' ''false'' | |
− | + | prev = cur + 1 | |
− | + | '''while''' cur != n | |
− | + | '''return''' ''true'' | |
</code> | </code> | ||
<br> | <br> | ||
Строка 63: | Строка 67: | ||
== Примеры языков из NP == | == Примеры языков из NP == | ||
− | * | + | * Проблема раскраски вершин графа в <tex>k</tex> цветов.<br><!-- |
+ | -->Разрешается следующей программой: | ||
+ | r(G): | ||
+ | n = <tex>|V(G)|</tex> | ||
+ | c =<sup>?</sup> <tex>\{ 1, \dotsc, k \} ^ n</tex> | ||
+ | '''for''' uv '''in''' <tex>E(G)</tex> | ||
+ | '''if''' c[u] == c[v] | ||
+ | '''return''' ''false'' | ||
+ | '''return''' ''true'' | ||
* Задача о клике. | * Задача о клике. | ||
* [http://arxiv.org/abs/cs.CC/0210020 Тетрис]. | * [http://arxiv.org/abs/cs.CC/0210020 Тетрис]. | ||
Все эти языки также являются [[Примеры_NP-полных_языков._Теорема_Кука|<tex>\mathrm{NP}</tex>-полными]]. По [[Теорема Ладнера|теореме Ладнера]] существует язык из <tex>\mathrm{NP}</tex>, не являющийся <tex>\mathrm{NP}</tex>-полным. | Все эти языки также являются [[Примеры_NP-полных_языков._Теорема_Кука|<tex>\mathrm{NP}</tex>-полными]]. По [[Теорема Ладнера|теореме Ладнера]] существует язык из <tex>\mathrm{NP}</tex>, не являющийся <tex>\mathrm{NP}</tex>-полным. | ||
+ | |||
+ | == Примеры языков из co-NP == | ||
+ | * Даны <tex>n</tex> целых чисел. Верно ли, что любое их непустое подмножество имеет ненулевую сумму? | ||
== Связь P и NP == | == Связь P и NP == |
Версия 12:59, 28 февраля 2016
Содержание
Определение
Определение: |
. |
То есть
— это множество языков, разрешимых недетерминированной программой за полиномиальное время.Определение: |
. |
То есть
— это множество языков, дополнение к которым лежит в NP.Определение: |
. |
Нестрого говоря,
— это множество языков, для которых существует работающая за полиномиальное время детерминированная программа-верификатор , а для каждого слова из языка (и только для слова из языка) можно предъявить сертификат полиномиальной длины, подтверждающий принадлежность слова языку и проверяемый верификатором.Теорема: |
. |
Доказательство: |
Пусть . Тогда существуют и полином из определения . Построим недетерминированную программу , разрешающую .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
- Проблема раскраски вершин графа в
Разрешается следующей программой: цветов.
r(G): n =c =? for uv in if c[u] == c[v] return false return true
- Задача о клике.
- Тетрис.
Все эти языки также являются . По -полнымитеореме Ладнера существует язык из , не являющийся -полным.
Примеры языков из co-NP
- Даны целых чисел. Верно ли, что любое их непустое подмножество имеет ненулевую сумму?
Связь P и NP
Очевидно, что редкий ; было доказано, что -полный языкдоказательство должно быть нерелятивизующимся; различные попытки найти полиномиальные решения для задач из :
, так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найтиНекоторые задачи из
очень похожи на задачи из . В каждой из приведенных ниже пар задач первая разрешима за полиномиальное время, а вторая является -полной. При этом различие между задачами кажется совершенно незначительным.- Поиск самых коротких и самых длинных простых путей;
- Эйлеров и гамильтонов циклы;
- 2-CNF и 3-CNF выполнимость.