Классы NP, coNP, Σ₁, Π₁ — различия между версиями
Iloskutov (обсуждение | вклад) м (→Примеры языков из NP) |
Iloskutov (обсуждение | вклад) (Переименовал co-NP в coNP) |
||
| Строка 5: | Строка 5: | ||
То есть <tex>\mathrm{NP}</tex> — это множество языков, разрешимых недетерминированной программой за полиномиальное время. | То есть <tex>\mathrm{NP}</tex> — это множество языков, разрешимых недетерминированной программой за полиномиальное время. | ||
{{Определение | {{Определение | ||
| − | |definition=<tex>\ | + | |definition=<tex>\mathrm{coNP} = \{L \bigm| \overline{L} \in \mathrm{NP}\}</tex>. |
}} | }} | ||
| − | То есть <tex>\ | + | То есть <tex>\mathrm{coNP}</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>. | |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>. | ||
| Строка 92: | Строка 92: | ||
Все эти языки также являются [[Примеры_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>-полным. | ||
| − | == Примеры языков из | + | == Примеры языков из coNP == |
* Даны <tex>n</tex> целых чисел. Верно ли, что любое их непустое подмножество имеет ненулевую сумму? | * Даны <tex>n</tex> целых чисел. Верно ли, что любое их непустое подмножество имеет ненулевую сумму? | ||
* TAUT: определить, является ли заданная булева формула тавтологией. К этой задаче тривиально сводится дополнение к SAT: если отрицание формулы невыполнимо, то она является тавтологией, и наоборот. | * TAUT: определить, является ли заданная булева формула тавтологией. К этой задаче тривиально сводится дополнение к SAT: если отрицание формулы невыполнимо, то она является тавтологией, и наоборот. | ||
Версия 12:56, 22 марта 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
- Проблема нахождения гамильтонова цикла:
r(G): 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 p[i]p[i + 1] not in return false return true
- Задача о клике.
- Тетрис.
Все эти языки также являются -полными. По теореме Ладнера, существует язык из , не являющийся -полным.
Примеры языков из coNP
- Даны целых чисел. Верно ли, что любое их непустое подмножество имеет ненулевую сумму?
- TAUT: определить, является ли заданная булева формула тавтологией. К этой задаче тривиально сводится дополнение к SAT: если отрицание формулы невыполнимо, то она является тавтологией, и наоборот.
Связь P и NP
Очевидно, что , так как детерминированные программы можно рассматривать как недетерминированные, в которых не используется недетерминированный выбор. Вопрос о равенстве данных классов до сих пор остается открытым. Были осуществлены различные подходы к разрешению этой задачи: попытка найти редкий -полный язык; было доказано, что доказательство должно быть нерелятивизующимся; различные попытки найти полиномиальные решения для задач из :
Некоторые задачи из очень похожи на задачи из . В каждой из приведенных ниже пар задач первая разрешима за полиномиальное время, а вторая является -полной. При этом различие между задачами кажется совершенно незначительным.
- Поиск самых коротких и самых длинных простых путей;
- Эйлеров и гамильтонов циклы;
- 2-CNF и 3-CNF выполнимость.