<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.178.9.78&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.178.9.78&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/178.178.9.78"/>
		<updated>2026-05-19T18:00:46Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_NP-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D1%83%D0%BA%D0%B0&amp;diff=25472</id>
		<title>Примеры NP-полных языков. Теорема Кука</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_NP-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D1%83%D0%BA%D0%B0&amp;diff=25472"/>
				<updated>2012-06-16T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;178.178.9.78: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
В этой статье мы рассмотрим класс &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полных языков {{---}} &amp;lt;tex&amp;gt;\mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC}&amp;lt;/tex&amp;gt; является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, &lt;br /&gt;
тогда окажется, что &amp;lt;tex&amp;gt;\mathrm{P} = \mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Мы рассмотрим некоторые языки и докажем их &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полноту. Начнем мы с языка &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, так как к нему несложно сводятся все языки из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Потом с помощью [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведений по Карпу]] будем сводить уже известные языки из &amp;lt;tex&amp;gt;\mathrm{NPC}&amp;lt;/tex&amp;gt; к новым языкам, тем самым доказывая их &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-трудность, а потом и &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полноту.&lt;br /&gt;
Доказательство &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полноты будет состоять из двух пунктов: доказательство &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-трудности и принадлежности языка классу &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== NP-полнота &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt; ==&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt; {{---}} язык троек &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle &amp;lt;/tex&amp;gt;, таких что недетерминированная машина Тьюринга &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; на входной строке &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; возращает &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt; T(m, x) \le t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{BH_{1N}} = \lbrace \langle m, x, 1^t \rangle \bigm| m &amp;lt;/tex&amp;gt; {{---}} недетерминированная машина Тьюринга, &amp;lt;tex&amp;gt; m(x) = 1, T(m,x) \le t \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NPH} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Нужно доказать, что &amp;lt;tex&amp;gt; \forall \mathrm{L} \in \mathrm{NP} &amp;lt;/tex&amp;gt; существует полиномиальное [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведение по Карпу]] к языку &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. Рассмотрим произвольный язык &amp;lt;tex&amp;gt; \mathrm{L} \in \mathrm{NP} &amp;lt;/tex&amp;gt;. Для него существует машина Тьюринга &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; и полином &amp;lt;tex&amp;gt; p(x) &amp;lt;/tex&amp;gt;, такие что &amp;lt;tex&amp;gt; T(m, x) \le p(|x|), \mathrm{L}(m) = \mathrm{L} &amp;lt;/tex&amp;gt;. Докажем, что &amp;lt;tex&amp;gt; \exists f \in \widetilde{\mathrm{P}} : \mathrm{L} \le_f \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. Рассмотрим функцию &amp;lt;tex&amp;gt; f(x) = \langle m, x, 1^{p(|x|)} \rangle &amp;lt;/tex&amp;gt;, по входным данным возвращающую тройку из описанной выше машины Тьюринга, входных данных и времени &amp;lt;tex&amp;gt; p(|x|)&amp;lt;/tex&amp;gt; в унарной системе счисления. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; Проверим, что &amp;lt;tex&amp;gt; x \in \mathrm{L} \Leftrightarrow f(x) \in \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Пусть &amp;lt;tex&amp;gt; x \in L &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; m(x) = 1 &amp;lt;/tex&amp;gt; за время не более &amp;lt;tex&amp;gt; p(|x|) &amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\langle m,x, 1^{p(|x|)} \rangle = f(x) \in \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Пусть &amp;lt;tex&amp;gt;x \not\in L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;m(x) = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\langle m,x, 1^{p(|x|)} \rangle = f(x) \notin \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; Это значит, что &amp;lt;tex&amp;gt; \forall \mathrm{L} \in \mathrm{NP}\ \exists f \in \widetilde{\mathrm{P}} : \mathrm{L} \le_f \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, и из этого следует, что &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NPH} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NP} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;Можно написать недетерминированную программу, которая будет по &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle &amp;lt;/tex&amp;gt; моделировать &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; шагов &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, выбирая недетерминированно соответствующие недетерминированные переходы, и если машина за это время допустила слово, то только тогда &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle \in \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== NP-полнота &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt; ==&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{SAT}&amp;lt;/tex&amp;gt; {{---}} язык булевых формул из &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; переменных, для которых существует подстановка, при которой формула истинна.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{SAT} = \lbrace \varphi\ \bigm|\ \exists x : \varphi(x) = 1 \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Кук&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NP} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;Можно написать недетерминированную программу &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, которая распознает язык &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt;. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NPH} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Теперь докажем, что &amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NPH} &amp;lt;/tex&amp;gt;. Для этого сведём задачу &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, которая &amp;lt;tex&amp;gt; \mathrm{NP} &amp;lt;/tex&amp;gt;-полна, к &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt;. Тогда получится, что любой язык из &amp;lt;tex&amp;gt; \mathrm{NP} &amp;lt;/tex&amp;gt; может быть [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведен по Карпу]] к &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, и, по транзитивности сведения по Карпу, к &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; По определению языка &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, у нас есть недетерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, причём можно считать, что её лента односторонняя и что машина не пишет на ленту пробелы, входное слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и время &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, заданное в унарной системе счисления. Нам же надо построить такую булеву формулу &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, что она выполнима тогда, и только тогда, когда &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, получив на вход &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, делает не более &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; шагов и допускает это слово. &amp;lt;br&amp;gt; В любой момент времени мгновенное описание (МО) &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; есть строка &amp;lt;tex&amp;gt;z\#_qyb&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; &amp;amp;mdash; строка, состоящая из такого количества пробелов, чтобы длина всего МО была &amp;lt;tex&amp;gt;t + 1.&amp;lt;/tex&amp;gt; Соответственно, начальное МО задаётся так: &amp;lt;tex&amp;gt;\#_sxb&amp;lt;/tex&amp;gt;. Если же &amp;lt;tex&amp;gt;|x| &amp;gt; t&amp;lt;/tex&amp;gt;, то будем считать, что на ленту записаны лишь первые &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; символов, ведь &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; не может обработать большее количество символов за &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; шагов. &amp;lt;br&amp;gt; Также нам удобно считать, что все вычисления проходят ровно за &amp;lt;tex&amp;gt;t + 1&amp;lt;/tex&amp;gt; шагов, даже если мы попали в допускающее состояние раньше. То есть, мы разрешим переход &amp;lt;tex&amp;gt;q \vdash q&amp;lt;/tex&amp;gt;, если в МО &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; есть допускающее состояние, так что, чтобы проверить, допустила ли машина слово, надо лишь проверить наличие допускающего состояния в МО &amp;lt;tex&amp;gt;q_t&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Тогда процесс работы машины &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, то есть цепочка переходов &amp;lt;tex&amp;gt;q_0 \vdash q_1 \vdash \ldots \vdash q_t&amp;lt;/tex&amp;gt; может быть представлен следующей таблицей : &lt;br /&gt;
&amp;lt;table align=&amp;quot;right&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td colspan=10&amp;gt;&lt;br /&gt;
'''Процесс работы машины &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;''' &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
MO &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
0 &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
1 &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
t &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{0, 0}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{0, 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q_{0, t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{1, 0}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{1, 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q_{1, t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j + 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j + 2} &amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1, j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1, j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1, j + 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{t, 0}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{t, 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q_{t, t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::Каждый элемент таблицы &amp;lt;tex&amp;gt;q_{i, j}\in \Sigma \cup Q&amp;lt;/tex&amp;gt;. И для каждого такого элемента заведём &amp;lt;tex&amp;gt;|\Sigma| + |Q|&amp;lt;/tex&amp;gt; переменных &amp;lt;tex&amp;gt;Y_{i, j, c} = [q_{i, j} = c]\ \forall c \in \Sigma \cup Q&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Общий вид формулы: &amp;lt;tex&amp;gt;\varphi = S \land T \land N \land C&amp;lt;/tex&amp;gt;. &lt;br /&gt;
::# &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; отвечает за правильный старт, то есть символ &amp;lt;tex&amp;gt;q_{0,0}&amp;lt;/tex&amp;gt; должен быть начальным состоянием &amp;lt;tex&amp;gt;\#_s&amp;lt;/tex&amp;gt; машины &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, символы с &amp;lt;tex&amp;gt;q_{0,1}&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;q_{0,|x|}&amp;lt;/tex&amp;gt; &amp;amp;mdash; образовывать цепочку &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, а оставшиеся &amp;lt;tex&amp;gt;q_{0,i}&amp;lt;/tex&amp;gt; &amp;amp;mdash; быть пробелами &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;S = Y_{0,0,\#_s} \land Y_{0,1,x_1} \land \ldots \land Y_{0,|x|+1,B} \land \ldots \land Y_{0,t,B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::# &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; отвечает за правильный финиш, то есть в МО &amp;lt;tex&amp;gt;q_t&amp;lt;/tex&amp;gt; должно присутствовать допускающее состояние &amp;lt;tex&amp;gt;\#_y&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;T = Y_{t,0,\#_y} \lor Y_{t,1,\#_y} \lor \ldots \lor Y_{t,t,\#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::# &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; отвечает за то, что машина &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; делает правильные переходы. &amp;lt;tex&amp;gt;q_{i,j}&amp;lt;/tex&amp;gt; зависит только от четырех символов над ним, то есть от &amp;lt;tex&amp;gt;q_{i-1,j-1}, q_{i-1,j}, q_{i-1,j+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_{i-1,j+2}&amp;lt;/tex&amp;gt;. Тогда для проверки корректности переходов требуется перебрать все четверки символов &amp;lt;tex&amp;gt;q_{i-1,j-1}, q_{i-1,j}, q_{i-1,j+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_{i-1,j+2}&amp;lt;/tex&amp;gt; из таблицы и проверить, что из них возможно получить символ &amp;lt;tex&amp;gt;q_{i,j}&amp;lt;/tex&amp;gt;. Если четверка символов выходит за границу таблицы, то указывается меньшее количество позиций. С учетом того, что машина &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; недетерминирована и требуется устранить возможность раздвоения ее головки, сделаем все возможные выводы о новых символах &amp;lt;tex&amp;gt;q_{i,j \pm 1}&amp;lt;/tex&amp;gt;: &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;N = \land_{i=0..t,j=0..t} \land_{c_1 \ldots c_4} (( Y_{i-1,j-1,c_1} \land Y_{i-1,j,c_2} \land Y_{i-1,j+1,c_3} \land Y_{i-1,j+2,c_4} ) \to ((Y_{i,j-1,c_0^`} \lor Y_{i,j-1,c_1^`} \lor \ldots \lor Y_{i,j-1,c_{|\Sigma|+|Q|-1}^`}) \land (Y_{i,j,c_0^`} \lor Y_{i,j,c_1^`} \lor \ldots \lor Y_{i,j,c_{|\Sigma|+|Q|-1}^`}) \land (Y_{i,j+1,c_0^`} \lor Y_{i,j+1,c_1^`} \lor \ldots \lor Y_{i,j+1,c_{|\Sigma|+|Q|-1}^`})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::# &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; отвечает за то, что в каждой ячейке находится ровно один символ. Для каждой ячейки &amp;lt;tex&amp;gt;q_{i,j}&amp;lt;/tex&amp;gt; проверяется, что только одна переменная &amp;lt;tex&amp;gt;Y_{i,j,c}&amp;lt;/tex&amp;gt; принимает значение ''истина''.&amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;C = \land_{i=0..t,j=0..t} ((Y_{i,j,c_1} \land \lnot Y_{i,j,c_2} \land \ldots \land \lnot Y_{i,j,c_{|\Sigma|+|Q|-1}}) \lor \ldots \lor (Y_{i,j,c_{|\Sigma|+|Q|-1}} \land \lnot Y_{i,j,c_1} \land \ldots \land \lnot Y_{i,j,c_{|\Sigma|+|Q|-2}}))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:: Мы построили функцию сведения &amp;lt;tex&amp;gt; f: \langle m, x, 1^t \rangle \mapsto \varphi = S \land T \land N \land C&amp;lt;/tex&amp;gt;. Она является полиномиальной, так как длина формулы &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; полиномиально зависит от длины входа &amp;amp;mdash; &amp;lt;tex&amp;gt;|\varphi| = O(n^2)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Покажем, что &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; выполнима тогда и только тогда, когда &amp;lt;tex&amp;gt;\langle m, x, 1^t \rangle \in  \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
:# Пусть &amp;lt;tex&amp;gt;\langle m, x, 1^t \rangle \in  \mathrm{BH_{1N}}&amp;lt;/tex&amp;gt;, тогда существует допускающая цепочка переходов &amp;lt;tex&amp;gt;q_0 \vdash q_1 \vdash ... \vdash q_t&amp;lt;/tex&amp;gt; и можем построить таблицу, аналогичную приведенной выше, следовательно можем найти такое присваивание 0 и 1 переменным &amp;lt;tex&amp;gt;Y_{i,j,c}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; примет значение ''истина''.&lt;br /&gt;
:# Пусть в результате работы функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; получили выполнимую формулу &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, следовательно существует такой набор переменных &amp;lt;tex&amp;gt;Y_{i,j,c}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; на нем принимает значение ''истина''. Тогда по данному набору можем построить таблицу, по которой восстановим допускающую цепочку переходов &amp;lt;tex&amp;gt;q_0 \vdash q_1 \vdash ... \vdash q_t&amp;lt;/tex&amp;gt;. Совершив эти переходы машина &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; перейдет в допускающее состояние за время &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle m, x, 1^t\rangle \in  \mathrm{BH_{1N}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит &amp;lt;tex&amp;gt; \mathrm{SAT} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры NP-полных языков ==&lt;br /&gt;
=== NP-полнота CNFSAT ===&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;{{---}} язык булевых формул, заданных в [[КНФ]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{CNFSAT} = \lbrace \varphi(x_1 \ldots x_n) \bigm| \varphi &amp;lt;/tex&amp;gt; задано в КНФ и &amp;lt;tex&amp;gt; \exists x_1 \ldots x_n : \varphi(x_1 \ldots x_n) = 1 \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt; \mathrm{CNFSAT} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
#&amp;lt;tex&amp;gt; \mathrm{CNFSAT} \in \mathrm{NP} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Можно написать недетерминированную программу &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, которая распознает язык &amp;lt;tex&amp;gt; \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{CNFSAT} \in \mathrm{NPH} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;Сведем задачу &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt; к задаче &amp;lt;tex&amp;gt; \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;. Построим функцию &amp;lt;tex&amp;gt; f(x) &amp;lt;/tex&amp;gt;, которая будет строить по булевой формуле, булевую формулу в [[КНФ]], такую что &amp;lt;tex&amp;gt; x \in \mathrm{SAT} \Leftrightarrow f(x) \in \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt; |f(x)| \le p(|x|) &amp;lt;/tex&amp;gt; для некоторого полинома &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Опишем как будет работать функция &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Для начала преобразуем формулу так, чтобы все отрицания относились только к переменным. Это можно сделать по правилам: &lt;br /&gt;
##* &amp;lt;tex&amp;gt; \neg{(x \lor y)} = \neg{x} \land \neg{y} &amp;lt;/tex&amp;gt;&lt;br /&gt;
##* &amp;lt;tex&amp;gt; \neg{(x \land y)} = \neg{x} \lor \neg{y} &amp;lt;/tex&amp;gt;&lt;br /&gt;
## Далее построим дерево по формуле &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;. Будем строить формулу в [[КНФ]] для поддеревьев рекурсивно. Есть два случая:&lt;br /&gt;
##* Корень дерева {{---}} &amp;lt;tex&amp;gt; \land &amp;lt;/tex&amp;gt;. Пусть левое и правое поддерево &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; {{---}} это &amp;lt;tex&amp;gt; x_l &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; x_r &amp;lt;/tex&amp;gt; соответственно. Тогда &amp;lt;tex&amp;gt; f(x) = f(x_l) \land f(x_r) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
##* Корень дерева {{---}} &amp;lt;tex&amp;gt; \lor &amp;lt;/tex&amp;gt;. Пусть левое и правое поддерево &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; {{---}} это &amp;lt;tex&amp;gt; x_l &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; x_r &amp;lt;/tex&amp;gt; соответственно. Создадим новую переменную &amp;lt;tex&amp;gt; z &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; f(x) = (f(x_l) \lor z) \land (f(x_r) \lor \neg{z}) &amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt; f(x_l) &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; f(x_r) &amp;lt;/tex&amp;gt; {{---}} формулы в [[КНФ]], поэтому переменную &amp;lt;tex&amp;gt; z &amp;lt;/tex&amp;gt; и ее отрицание можно внести в каждую скобку в &amp;lt;tex&amp;gt; f(x_l) &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; f(x_r) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
## Посчитаем какой длины будет &amp;lt;tex&amp;gt; f(x) &amp;lt;/tex&amp;gt;. Это зависит от количества логических операций в формуле. Заметим, что количество скобок в конечной формуле равно количеству операций &amp;lt;tex&amp;gt; \land &amp;lt;/tex&amp;gt;. Количество операций &amp;lt;tex&amp;gt; \land &amp;lt;/tex&amp;gt; не более чем &amp;lt;tex&amp;gt; |x| &amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt; \land &amp;lt;/tex&amp;gt; добавляется один раз в первом из рассмотренных выше случаев. А во втором из рассмотренных случаев добавляется &amp;lt;tex&amp;gt; \lor &amp;lt;/tex&amp;gt; в том количестве, сколько скобок у нас есть. А количество скобок равно количеству &amp;lt;tex&amp;gt; \land &amp;lt;/tex&amp;gt;, поэтому количество операций &amp;lt;tex&amp;gt; \lor &amp;lt;/tex&amp;gt; не превысит &amp;lt;tex&amp;gt; |x|^2 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{CNFSAT} \in \mathrm{NP} \land \mathrm{CNFSAT} \in \mathrm{NPH} \Rightarrow \mathrm{CNFSAT} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
=== NP-полнота 3-SAT ===&lt;br /&gt;
=== NP-полнота раскраски графа ===&lt;br /&gt;
=== NP-полнота поиска минимального вершинного покрытия в графе ===&lt;br /&gt;
=== NP-полнота поиска максимальной клики в графе ===&lt;br /&gt;
=== NP-полнота поиска гамильтонова цикла и пути в графе ===&lt;br /&gt;
=== NP-полнота задачи о рюкзаке ===&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [[Класс P]]&lt;br /&gt;
* [[Классы NP и Σ₁]]&lt;br /&gt;
* [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>178.178.9.78</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_NP-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D1%83%D0%BA%D0%B0&amp;diff=25471</id>
		<title>Примеры NP-полных языков. Теорема Кука</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_NP-%D0%BF%D0%BE%D0%BB%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2._%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%9A%D1%83%D0%BA%D0%B0&amp;diff=25471"/>
				<updated>2012-06-16T16:03:53Z</updated>
		
		<summary type="html">&lt;p&gt;178.178.9.78: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
В этой статье мы рассмотрим класс &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полных языков {{---}} &amp;lt;tex&amp;gt;\mathrm{NPC}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathrm{NPC}&amp;lt;/tex&amp;gt; является одним из важнейших классов в теории сложности, так как если найдется язык из этого класса, который также входит в класс &amp;lt;tex&amp;gt;\mathrm{P}&amp;lt;/tex&amp;gt;, &lt;br /&gt;
тогда окажется, что &amp;lt;tex&amp;gt;\mathrm{P} = \mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Мы рассмотрим некоторые языки и докажем их &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полноту. Начнем мы с языка &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, так как к нему несложно сводятся все языки из &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Потом с помощью [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведений по Карпу]] будем сводить уже известные языки из &amp;lt;tex&amp;gt;\mathrm{NPC}&amp;lt;/tex&amp;gt; к новым языкам, тем самым доказывая их &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-трудность, а потом и &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полноту.&lt;br /&gt;
Доказательство &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-полноты будет состоять из двух пунктов: доказательство &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;-трудности и принадлежности языка классу &amp;lt;tex&amp;gt;\mathrm{NP}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== NP-полнота &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt; ==&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt; {{---}} язык троек &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle &amp;lt;/tex&amp;gt;, таких что недетерминированная машина Тьюринга &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; на входной строке &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; возращает &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; за время &amp;lt;tex&amp;gt; T(m, x) \le t &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{BH_{1N}} = \lbrace \langle m, x, 1^t \rangle \bigm| m &amp;lt;/tex&amp;gt; {{---}} недетерминированная машина Тьюринга, &amp;lt;tex&amp;gt; m(x) = 1, T(m,x) \le t \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NPH} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Нужно доказать, что &amp;lt;tex&amp;gt; \forall \mathrm{L} \in \mathrm{NP} &amp;lt;/tex&amp;gt; существует полиномиальное [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведение по Карпу]] к языку &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. Рассмотрим произвольный язык &amp;lt;tex&amp;gt; \mathrm{L} \in \mathrm{NP} &amp;lt;/tex&amp;gt;. Для него существует машина Тьюринга &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; и полином &amp;lt;tex&amp;gt; p(x) &amp;lt;/tex&amp;gt;, такие что &amp;lt;tex&amp;gt; T(m, x) \le p(|x|), \mathrm{L}(m) = \mathrm{L} &amp;lt;/tex&amp;gt;. Докажем, что &amp;lt;tex&amp;gt; \exists f \in \widetilde{\mathrm{P}} : \mathrm{L} \le_f \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. Рассмотрим функцию &amp;lt;tex&amp;gt; f(x) = \langle m, x, 1^{p(|x|)} \rangle &amp;lt;/tex&amp;gt;, по входным данным возвращающую тройку из описанной выше машины Тьюринга, входных данных и времени &amp;lt;tex&amp;gt; p(|x|)&amp;lt;/tex&amp;gt; в унарной системе счисления. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; Проверим, что &amp;lt;tex&amp;gt; x \in \mathrm{L} \Leftrightarrow f(x) \in \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Пусть &amp;lt;tex&amp;gt; x \in L &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; m(x) = 1 &amp;lt;/tex&amp;gt; за время не более &amp;lt;tex&amp;gt; p(|x|) &amp;lt;/tex&amp;gt;, а значит &amp;lt;tex&amp;gt;\langle m,x, 1^{p(|x|)} \rangle = f(x) \in \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Пусть &amp;lt;tex&amp;gt;x \not\in L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;m(x) = 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\langle m,x, 1^{p(|x|)} \rangle = f(x) \notin \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt; Это значит, что &amp;lt;tex&amp;gt; \forall \mathrm{L} \in \mathrm{NP}\ \exists f \in \widetilde{\mathrm{P}} : \mathrm{L} \le_f \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, и из этого следует, что &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NPH} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} \in \mathrm{NP} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;Можно написать недетерминированную программу, которая будет по &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle &amp;lt;/tex&amp;gt; моделировать &amp;lt;tex&amp;gt; t &amp;lt;/tex&amp;gt; шагов &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, выбирая недетерминированно соответствующие недетерминированные переходы, и если машина за это время допустила слово, то только тогда &amp;lt;tex&amp;gt; \langle m, x, 1^t \rangle \in \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== NP-полнота &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt; ==&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{SAT}&amp;lt;/tex&amp;gt; {{---}} язык булевых формул из &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; переменных, для которых существует подстановка, при которой формула истинна.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{SAT} = \lbrace \varphi\ \bigm|\ \exists x : \varphi(x) = 1 \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|author=Кук&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NP} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;Можно написать недетерминированную программу &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, которая распознает язык &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt;. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ.&lt;br /&gt;
# &amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NPH} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Теперь докажем, что &amp;lt;tex&amp;gt; \mathrm{SAT}\in \mathrm{NPH} &amp;lt;/tex&amp;gt;. Для этого сведём задачу &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, которая &amp;lt;tex&amp;gt; \mathrm{NP} &amp;lt;/tex&amp;gt;-полна, к &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt;. Тогда получится, что любой язык из &amp;lt;tex&amp;gt; \mathrm{NP} &amp;lt;/tex&amp;gt; может быть [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи|сведен по Карпу]] к &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, и, по транзитивности сведения по Карпу, к &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; По определению языка &amp;lt;tex&amp;gt; \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;, у нас есть недетерминированная машина Тьюринга &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, причём можно считать, что её лента односторонняя и что машина не пишет на ленту пробелы, входное слово &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и время &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, заданное в унарной системе счисления. Нам же надо построить такую булеву формулу &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, что она выполнима тогда, и только тогда, когда &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, получив на вход &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, делает не более &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; шагов и допускает это слово. &amp;lt;br&amp;gt; В любой момент времени мгновенное описание (МО) &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; есть строка &amp;lt;tex&amp;gt;z\#_qyb&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; &amp;amp;mdash; строка, состоящая из такого количества пробелов, чтобы длина всего МО была &amp;lt;tex&amp;gt;t + 1.&amp;lt;/tex&amp;gt; Соответственно, начальное МО задаётся так: &amp;lt;tex&amp;gt;\#_sxb&amp;lt;/tex&amp;gt;. Если же &amp;lt;tex&amp;gt;|x| &amp;gt; t&amp;lt;/tex&amp;gt;, то будем считать, что на ленту записаны лишь первые &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; символов, ведь &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; не может обработать большее количество символов за &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; шагов. &amp;lt;br&amp;gt; Также нам удобно считать, что все вычисления проходят ровно за &amp;lt;tex&amp;gt;t + 1&amp;lt;/tex&amp;gt; шагов, даже если мы попали в допускающее состояние раньше. То есть, мы разрешим переход &amp;lt;tex&amp;gt;q \vdash q&amp;lt;/tex&amp;gt;, если в МО &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; есть допускающее состояние, так что, чтобы проверить, допустила ли машина слово, надо лишь проверить наличие допускающего состояния в МО &amp;lt;tex&amp;gt;q_t&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Тогда процесс работы машины &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, то есть цепочка переходов &amp;lt;tex&amp;gt;q_0 \vdash q_1 \vdash \ldots \vdash q_t&amp;lt;/tex&amp;gt; может быть представлен следующей таблицей : &lt;br /&gt;
&amp;lt;table align=&amp;quot;right&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;text-align:center&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td colspan=10&amp;gt;&lt;br /&gt;
'''Процесс работы машины &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; на входе &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;''' &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
MO &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
0 &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
1 &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
t &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_0&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{0, 0}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{0, 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q_{0, t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{1, 0}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{1, 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q_{1, t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j + 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i, j + 2} &amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1, j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1, j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt; q_{i+1, j + 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_t&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot; &amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{t, 0}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;q_{t, 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td  width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=&amp;quot;30&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt; &lt;br /&gt;
&amp;lt;td width=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q_{t, t}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::Каждый элемент таблицы &amp;lt;tex&amp;gt;q_{i, j}\in \Sigma \cup Q&amp;lt;/tex&amp;gt;. И для каждого такого элемента заведём &amp;lt;tex&amp;gt;|\Sigma| + |Q|&amp;lt;/tex&amp;gt; переменных &amp;lt;tex&amp;gt;Y_{i, j, c} = [q_{i, j} = c]\ \forall c \in \Sigma \cup Q&amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Общий вид формулы: &amp;lt;tex&amp;gt;\varphi = S \land T \land N \land C&amp;lt;/tex&amp;gt;. &lt;br /&gt;
::# &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; отвечает за правильный старт, то есть символ &amp;lt;tex&amp;gt;q_{0,0}&amp;lt;/tex&amp;gt; должен быть начальным состоянием &amp;lt;tex&amp;gt;\#_s&amp;lt;/tex&amp;gt; машины &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, символы с &amp;lt;tex&amp;gt;q_{0,1}&amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt;q_{0,|x|}&amp;lt;/tex&amp;gt; &amp;amp;mdash; образовывать цепочку &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, а оставшиеся &amp;lt;tex&amp;gt;q_{0,i}&amp;lt;/tex&amp;gt; &amp;amp;mdash; быть пробелами &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. Таким образом, &amp;lt;tex&amp;gt;S = Y_{0,0,\#_s} \land Y_{0,1,x_1} \land \ldots \land Y_{0,|x|+1,B} \land \ldots \land Y_{0,t,B}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::# &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; отвечает за правильный финиш, то есть в МО &amp;lt;tex&amp;gt;q_t&amp;lt;/tex&amp;gt; должно присутствовать допускающее состояние &amp;lt;tex&amp;gt;\#_y&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;T = Y_{t,0,\#_y} \lor Y_{t,1,\#_y} \lor \ldots \lor Y_{t,t,\#_y}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::# &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; отвечает за то, что машина &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; делает правильные переходы. &amp;lt;tex&amp;gt;q_{i,j}&amp;lt;/tex&amp;gt; зависит только от четырех символов над ним, то есть от &amp;lt;tex&amp;gt;q_{i-1,j-1}, q_{i-1,j}, q_{i-1,j+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_{i-1,j+2}&amp;lt;/tex&amp;gt;. Тогда для проверки корректности переходов требуется перебрать все четверки символов &amp;lt;tex&amp;gt;q_{i-1,j-1}, q_{i-1,j}, q_{i-1,j+1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_{i-1,j+2}&amp;lt;/tex&amp;gt; из таблицы и проверить, что из них возможно получить символ &amp;lt;tex&amp;gt;q_{i,j}&amp;lt;/tex&amp;gt;. Если четверка символов выходит за границу таблицы, то указывается меньшее количество позиций. С учетом того, что машина &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; недетерминирована и требуется устранить возможность раздвоения ее головки, сделаем все возможные выводы о новых символах &amp;lt;tex&amp;gt;q_{i,j \pm 1}&amp;lt;/tex&amp;gt;: &amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;N = \land_{i=0..t,j=0..t} \land_{c_1 \ldots c_4} (( Y_{i-1,j-1,c_1} \land Y_{i-1,j,c_2} \land Y_{i-1,j+1,c_3} \land Y_{i-1,j+2,c_4} ) \to ((Y_{i,j-1,c_0^`} \lor Y_{i,j-1,c_1^`} \lor \ldots \lor Y_{i,j-1,c_{|\Sigma|+|Q|-1}^`}) \land (Y_{i,j,c_0^`} \lor Y_{i,j,c_1^`} \lor \ldots \lor Y_{i,j,c_{|\Sigma|+|Q|-1}^`}) \land (Y_{i,j+1,c_0^`} \lor Y_{i,j+1,c_1^`} \lor \ldots \lor Y_{i,j+1,c_{|\Sigma|+|Q|-1}^`})))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
::# &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; отвечает за то, что в каждой ячейке находится ровно один символ. Для каждой ячейки &amp;lt;tex&amp;gt;q_{i,j}&amp;lt;/tex&amp;gt; проверяется, что только одна переменная &amp;lt;tex&amp;gt;Y_{i,j,c}&amp;lt;/tex&amp;gt; принимает значение ''истина''.&amp;lt;br&amp;gt; &amp;lt;tex&amp;gt;C = \land_{i=0..t,j=0..t} ((Y_{i,j,c_1} \land \lnot Y_{i,j,c_2} \land \ldots \land \lnot Y_{i,j,c_{|\Sigma|+|Q|-1}}) \lor \ldots \lor (Y_{i,j,c_{|\Sigma|+|Q|-1}} \land \lnot Y_{i,j,c_1} \land \ldots \land \lnot Y_{i,j,c_{|\Sigma|+|Q|-2}}))&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:: Мы построили функцию сведения &amp;lt;tex&amp;gt; f: \langle m, x, 1^t \rangle \mapsto \varphi = S \land T \land N \land C&amp;lt;/tex&amp;gt;. Она является полиномиальной, так как длина формулы &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; полиномиально зависит от длины входа &amp;amp;mdash; &amp;lt;tex&amp;gt;|\varphi| = O(n^2)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Покажем, что &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; выполнима тогда и только тогда, когда &amp;lt;tex&amp;gt;\langle m, x, 1^t \rangle \in  \mathrm{BH_{1N}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
:# Пусть &amp;lt;tex&amp;gt;\langle m, x, 1^t \rangle \in  \mathrm{BH_{1N}}&amp;lt;/tex&amp;gt;, тогда существует допускающая цепочка переходов &amp;lt;tex&amp;gt;q_0 \vdash q_1 \vdash ... \vdash q_t&amp;lt;/tex&amp;gt; и можем построить таблицу, аналогичную приведенной выше, следовательно можем найти такое присваивание 0 и 1 переменным &amp;lt;tex&amp;gt;Y_{i,j,c}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; примет значение ''истина''.&lt;br /&gt;
:# Пусть в результате работы функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; получили выполнимую формулу &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt;, следовательно существует такой набор переменных &amp;lt;tex&amp;gt;Y_{i,j,c}&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;\varphi&amp;lt;/tex&amp;gt; на нем принимает значение ''истина''. Тогда по данному набору можем построить таблицу, по которой восстановим допускающую цепочку переходов &amp;lt;tex&amp;gt;q_0 \vdash q_1 \vdash ... \vdash q_t&amp;lt;/tex&amp;gt;. Совершив эти переходы машина &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; перейдет в допускающее состояние за время &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;\langle m, x, 1^t\rangle \in  \mathrm{BH_{1N}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит &amp;lt;tex&amp;gt; \mathrm{SAT} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Другие примеры NP-полных языков ==&lt;br /&gt;
=== NP-полнота CNFSAT ===&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;{{---}} язык булевых формул, заданных в [[КНФ]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \mathrm{CNFSAT} = \lbrace \varphi(x_1 \ldots x_n) \bigm| \varphi &amp;lt;/tex&amp;gt; задано в КНФ и &amp;lt;tex&amp;gt; \exists x_1 \ldots x_n : \varphi(x_1 \ldots x_n) = 1 \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement= &amp;lt;tex&amp;gt; \mathrm{CNFSAT} \in \mathrm{NPC} &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
#&amp;lt;tex&amp;gt; \mathrm{CNFSAT} \in \mathrm{NP} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt; Можно написать недетерминированную программу &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, которая распознает язык &amp;lt;tex&amp;gt; \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;. Она будет недетерминированно выбирать подстановку, проверять, истинна ли формула при такой подстановке, и выдавать ответ.&lt;br /&gt;
# Сведем задачу &amp;lt;tex&amp;gt; \mathrm{SAT} &amp;lt;/tex&amp;gt; к задаче &amp;lt;tex&amp;gt; \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;. Построим функцию &amp;lt;tex&amp;gt; f(x) &amp;lt;/tex&amp;gt;, которая будет строить по булевой формуле, булевую формулу в [[КНФ]], такую что &amp;lt;tex&amp;gt; x \in \mathrm{SAT} \Leftrightarrow f(x) \in \mathrm{CNFSAT} &amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt; |f(x)| \le p(|x|) &amp;lt;/tex&amp;gt; для некоторого полинома &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt; Опишем как будет работать функция &amp;lt;tex&amp;gt; f &amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Для начала преобразуем формулу так, чтобы все отрицания относились только к переменным. Это можно сделать по правилам: &lt;br /&gt;
##* &amp;lt;tex&amp;gt; \neg{(x \lor y)} = \neg{x} \land \neg{y} &amp;lt;/tex&amp;gt;&lt;br /&gt;
##* &amp;lt;tex&amp;gt; \neg{(x \land y)} = \neg{x} \lor \neg{y} &amp;lt;/tex&amp;gt;&lt;br /&gt;
## Далее построим дерево по формуле &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;. Будем строить формулу в [[КНФ]] для поддеревьев рекурсивно. Есть два случая:&lt;br /&gt;
##* Вершина дерева {{---}} &amp;lt;tex&amp;gt; \land &amp;lt;/tex&amp;gt;. Пусть левое и правое поддерево &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; {{---}} это &amp;lt;tex&amp;gt; x_l &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; x_r &amp;lt;/tex&amp;gt; соответственно. Тогда &amp;lt;tex&amp;gt; f(x) = f(x_l) \land f(x_r) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
##* Вершина дерева {{---}} &amp;lt;tex&amp;gt; \lor &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
=== NP-полнота 3-SAT ===&lt;br /&gt;
=== NP-полнота раскраски графа ===&lt;br /&gt;
=== NP-полнота поиска минимального вершинного покрытия в графе ===&lt;br /&gt;
=== NP-полнота поиска максимальной клики в графе ===&lt;br /&gt;
=== NP-полнота поиска гамильтонова цикла и пути в графе ===&lt;br /&gt;
=== NP-полнота задачи о рюкзаке ===&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [[Класс P]]&lt;br /&gt;
* [[Классы NP и Σ₁]]&lt;br /&gt;
* [[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>178.178.9.78</name></author>	</entry>

	</feed>