<?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=176.59.10.248&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=176.59.10.248&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/176.59.10.248"/>
		<updated>2026-05-23T16:15:00Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=61116</id>
		<title>Теория сложности</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8&amp;diff=61116"/>
				<updated>2017-06-01T07:50:55Z</updated>
		
		<summary type="html">&lt;p&gt;176.59.10.248: /* Детерминированные и недетерминированные вычисления, сложность по времени и по памяти */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Теория сложности]]&lt;br /&gt;
&lt;br /&gt;
== Детерминированные и недетерминированные вычисления, сложность по времени и по памяти ==&lt;br /&gt;
=== Базовые определения ===&lt;br /&gt;
*[[Сложностные классы]]&lt;br /&gt;
*[[Вычисления с оракулом]]&lt;br /&gt;
&lt;br /&gt;
=== Классы P и NP, NP-полнота ===&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Недетерминированные вычисления]]&lt;br /&gt;
*[[Классы NP, coNP, Σ₁, Π₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
*[[Сведение по Куку задачи факторизации к языку из NP]]&lt;br /&gt;
*[[NP-полнота BH1N]]&lt;br /&gt;
*[[Теорема Кука]]&lt;br /&gt;
*[[Теоремы о временной и емкостной иерархиях]]&lt;br /&gt;
*[[Теорема Бейкера — Гилла — Соловэя]]&lt;br /&gt;
*[[Теорема Ладнера]]&lt;br /&gt;
*[[Теорема Левина]]&lt;br /&gt;
*[[Теорема Бермана — Форчуна]]&lt;br /&gt;
*[[Теорема Махэни]]&lt;br /&gt;
&lt;br /&gt;
=== [[Примеры NP-полных языков]] ===&lt;br /&gt;
* [[NP-полнота языка CNFSAT]]&lt;br /&gt;
* [[NP-полнота языка 3SAT]]&lt;br /&gt;
* [[NP-полнота языка IND (максимальное независимое множество)]]&lt;br /&gt;
* [[NP-полнота языка VCOVER (минимальное вершинное покрытие)]]&lt;br /&gt;
* [[NP-полнота языка CLIQUE]]&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;
=== Сложность по памяти, классы PS, L, NL, coNL, EXP, NEXP ===&lt;br /&gt;
*[[Класс PS. Связь класса PS с другими классами теории сложности]]&lt;br /&gt;
*[[Теорема Сэвича. Совпадение классов NPS и PS]]&lt;br /&gt;
*[[PS-полнота языка верных булевых формул с кванторами (TQBF)]]&lt;br /&gt;
*[[PS-полнота задачи Generalized geography]]&lt;br /&gt;
*[[Классы L, NL, coNL]]&lt;br /&gt;
*[[Полнота относительно L-сведения. NL-полнота. P-полнота]]&lt;br /&gt;
*[[Теорема Иммермана]]&lt;br /&gt;
*[[Классы EXP и NEXP]]&lt;br /&gt;
&lt;br /&gt;
=== Полиномиальная иерархия ===&lt;br /&gt;
*[[Классы PH, Σ и Π]]&lt;br /&gt;
*[[Теоремы о коллапсе полиномиальной иерархии]]&lt;br /&gt;
&lt;br /&gt;
=== Классы задач подсчета ===&lt;br /&gt;
*[[Классы Sharp P, Sharp P-Complete|Классы #P, #P-Complete]]&lt;br /&gt;
&lt;br /&gt;
== Схемная сложность ==&lt;br /&gt;
*[[Схемная сложность и класс P/poly]]&lt;br /&gt;
*[[Теорема Карпа — Липтона]]&lt;br /&gt;
*[[Классы NC и AC]]&lt;br /&gt;
*[[Теорема о непринадлежности XOR классу AC⁰]]&lt;br /&gt;
&lt;br /&gt;
== Вероятностные сложностные классы ==&lt;br /&gt;
=== Основные классы ===&lt;br /&gt;
*[[Вероятностные вычисления. Вероятностная машина Тьюринга]]&lt;br /&gt;
*[[Классы RP и coRP]]&lt;br /&gt;
*[[Класс ZPP]]&lt;br /&gt;
*[[Классы BPP и PP]]&lt;br /&gt;
*[[Соотношение вероятностных классов]]&lt;br /&gt;
*[[Лемма Шварца-Зиппеля]]&lt;br /&gt;
*[[Теорема Лаутемана]]&lt;br /&gt;
*[[Теорема Валианта-Вазирани]]&lt;br /&gt;
&lt;br /&gt;
=== Интерактивные протоколы ===&lt;br /&gt;
*[[Интерактивные протоколы. Класс IP. Класс AM]]&lt;br /&gt;
*[[Арифметизация булевых формул с кванторами]]&lt;br /&gt;
*[[Теорема о соотношении coNP и IP]]&lt;br /&gt;
*[[Теорема Шамира]]&lt;br /&gt;
*[[Семейство универсальных попарно независимых хеш-функций]]&lt;br /&gt;
*[[Протокол Голдвассер-Сипсера для оценки размера множества]]&lt;br /&gt;
&lt;br /&gt;
=== Probabilistically checkable proofs ===&lt;br /&gt;
*[[PCP-система]]&lt;br /&gt;
*[[Эквивалентность PCP-теоремы и теоремы о трудности аппроксимации]]&lt;br /&gt;
*[[PCP-теорема]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
[[Теория сложности (старая трешовая версия)|Вот сюда]] можно подсматривать, но злоупотреблять не рекомендуется.&lt;/div&gt;</summary>
		<author><name>176.59.10.248</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_Sharp_P,_Sharp_P-Complete&amp;diff=61115</id>
		<title>Классы Sharp P, Sharp P-Complete</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B_Sharp_P,_Sharp_P-Complete&amp;diff=61115"/>
				<updated>2017-06-01T07:31:44Z</updated>
		
		<summary type="html">&lt;p&gt;176.59.10.248: /* Класс #P */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Класс #P ==&lt;br /&gt;
{{Определение&lt;br /&gt;
 |definition = &amp;lt;tex&amp;gt;f : \{0,1\}^*  \rightarrow \mathbb{N}&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;\#P&amp;lt;/tex&amp;gt;, если существует &amp;lt;tex&amp;gt;p \in Poly&amp;lt;/tex&amp;gt; и работающая за полиномиальное время машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; такая, что для любого &amp;lt;tex&amp;gt;x \in \{0,1\}^* : f(x) = | \{y \in \{0,1\}^{p(|x|)} : M(x,y) = 1 \} |&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
По аналогии с классом &amp;lt;tex&amp;gt;NP&amp;lt;/tex&amp;gt; мы можем дать альтернативное определение определение классу &amp;lt;tex&amp;gt;\#P&amp;lt;/tex&amp;gt;, используя понятие недетерменированной МТ.&lt;br /&gt;
{{Определение&lt;br /&gt;
 |definition = '''Класс''' &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;  класс задач подсчета, решением которых является количество успешных (завершающихся в допускающих состояниях) путей вычислений для '''недетерминированной''' МТ, работающей за полиномиальное время. Отличается от большинства рассмотренных классов тем, что задачи требуют в качестве ответа не  &amp;lt;tex&amp;gt;``0&amp;quot;&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;``1&amp;quot;&amp;lt;/tex&amp;gt;, а натуральное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 |definition ='''Класс''' &amp;lt;tex&amp;gt;\mathrm{FP}&amp;lt;/tex&amp;gt; {{---}} класс задач подсчета, разрешимых на '''детерминированной''' машине Тьюринга за полиномиальное время, то есть:&lt;br /&gt;
&amp;lt;tex&amp;gt;f : \{0,1\}^*  \rightarrow \mathbb{N}&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;FP&amp;lt;/tex&amp;gt;, если существует &amp;lt;tex&amp;gt;p \in Poly&amp;lt;/tex&amp;gt; и работающая за полиномиальное время '''детерминированная''' машина Тьюринга &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; такая, что для любого &amp;lt;tex&amp;gt;x \in \{0,1\}^* &amp;lt;/tex&amp;gt; выполняется &amp;lt;tex&amp;gt; f(x) = M(x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
Вопрос, являются ли задачи из &amp;lt;tex&amp;gt;\#P&amp;lt;/tex&amp;gt; эффективно разрешимыми, остается открытым. Подсчет числа сертификатов как минимум столь же сложен, как и проверка наличия сертификата, а значит, если, доказать равенство &amp;lt;tex&amp;gt;\#P=FP&amp;lt;/tex&amp;gt;, то автоматически будет доказано &amp;lt;tex&amp;gt;NP=P&amp;lt;/tex&amp;gt;. Однако, из  &amp;lt;tex&amp;gt;NP=P&amp;lt;/tex&amp;gt; вовсе не следует  &amp;lt;tex&amp;gt;\#P=FP&amp;lt;/tex&amp;gt;. Также можно заметить, что если  &amp;lt;tex&amp;gt;PSPACE  = P&amp;lt;/tex&amp;gt;, то  &amp;lt;tex&amp;gt;\#P=FP&amp;lt;/tex&amp;gt;, так как подсчет числа сертификатов может быть выполнен за полиномиальную память.&lt;br /&gt;
&lt;br /&gt;
== Примеры задач из #P ==&lt;br /&gt;
*[[Sharp SAT|#SAT]]&lt;br /&gt;
* &amp;lt;tex&amp;gt;\#CYCLE&amp;lt;/tex&amp;gt; - имея ориентированный граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, посчитать число простых циклов. Аналогичная задача, отвечающая на вопрос, существует ли в заданном ориентированном графе простой цикл, может быть решена за линейное время при помощи поиска в ширину. Проблема подсчета всех простых циклов значительно сложнее.&lt;br /&gt;
*Для данного массива целых чисел посчитать количество подмножеств его элементов, таких, что сумма по всем элементам подмножества равняется 0.&lt;br /&gt;
*Для данного взвешенного неориентированного графа посчитать количество Гамильтоновых циклов веса меньше k.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;\#CYCLE \in FP&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;P=NP&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:cycle_block.png|thumb|300px|Блок H]]&lt;br /&gt;
Для графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами построим граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; такой, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; есть Гамильтонов цикл тогда и только тогда, когда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; есть &amp;lt;tex&amp;gt;n^{n^2}&amp;lt;/tex&amp;gt; циклов. Чтобы получить &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt;, заменим каждое ребро &amp;lt;tex&amp;gt;(u,v)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на блок &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;.  Блок состоит из &amp;lt;tex&amp;gt;m = n \cdot \log{n} + 1&amp;lt;/tex&amp;gt; уровней. &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; представляет из себя ацикличный граф, а значит циклы в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; соответствуют циклам в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Кроме того, существует &amp;lt;tex&amp;gt;2^m&amp;lt;/tex&amp;gt; различных путей между &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; внутри блока, следовательно простому циклу длины &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; соответствует цикл длины &amp;lt;tex&amp;gt;2^{(ml)}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Заметим, что, если граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; содержит гамильтонов цикл, то в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует минимум &amp;lt;tex&amp;gt;2^{mn} &amp;gt; n^{n^2}&amp;lt;/tex&amp;gt; циклов.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Проверим в обратную сторону. Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не существует Гамильтонова цикла, то самый длинный цикл в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет длину не больше &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; и число циклов не может превысить &amp;lt;tex&amp;gt;n^{n-1}&amp;lt;/tex&amp;gt;. Таким образом, в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; будет не более чем &amp;lt;tex&amp;gt;(2^m)^{n-1} \cdot n^{n-1} &amp;lt; n^{n^2}&amp;lt;/tex&amp;gt; циклов.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Преобразование графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; можно выполнить за полином от количества вершин. Таким образом, если &amp;lt;tex&amp;gt;\#CYCLE \in FP&amp;lt;/tex&amp;gt;, тогда сразу же &amp;lt;tex&amp;gt;HAM \in P&amp;lt;/tex&amp;gt;. А так как &amp;lt;tex&amp;gt;HAM \in NP&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;NP = P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Класс #P-Complete==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition= &amp;lt;tex&amp;gt;f : \{0, 1\}^* \rightarrow  \{0, 1\}^*&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;\#P&amp;lt;/tex&amp;gt;-полной, если &amp;lt;tex&amp;gt; f  \in \#P&amp;lt;/tex&amp;gt; и любая проблема из &amp;lt;tex&amp;gt;\#P&amp;lt;/tex&amp;gt; может быть сведена к ней за полиномиальное время.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Будем использовать МТ с оракулом &amp;lt;tex&amp;gt; O = \{\big \langle x, i \big \rangle: f(x)_i = 1\}&amp;lt;/tex&amp;gt; для нашей функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;. Для нашего типа задач оракул будет отвечать на вопросы вида &amp;quot;Принадлежит ли слово &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; языку &amp;lt;tex&amp;gt;O&amp;lt;/tex&amp;gt;?&amp;quot; за один шаг МТ. Для функции &amp;lt;tex&amp;gt;f = \{0,1\}^* \rightarrow  \{0, 1\}^*&amp;lt;/tex&amp;gt; будем называть &amp;lt;tex&amp;gt;FP^f&amp;lt;/tex&amp;gt; множество функций, вычислимых за полиномиальное время на МТ с оракулом для функции &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;f - \#P-&amp;lt;/tex&amp;gt;полная, если &amp;lt;tex&amp;gt;f \in \#P&amp;lt;/tex&amp;gt; и  любая &amp;lt;tex&amp;gt;g \in \#P&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;FP^f&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;f \in FP &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;FP=FP^f&amp;lt;/tex&amp;gt;. Получаем, что, если &amp;lt;tex&amp;gt;f -  \#P&amp;lt;/tex&amp;gt;-полная и  &amp;lt;tex&amp;gt;f \in FP&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;FP=\#P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры #P-Complete задач ==&lt;br /&gt;
*[[#SAT]]&lt;br /&gt;
*Посчитать количество удовлетворяющих назначений для заданной в ДНФ формулы. &lt;br /&gt;
*Посчитать количество полных паросочетаний в данном двудольном графе. &lt;br /&gt;
*Посчитать количество способов раскрасить заданный граф в &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
*Вычислить значение перманента матрицы, заполненной нулями и единицами.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 |definition =Перманентом матрицы А размером &amp;lt;tex&amp;gt;n \times n&amp;lt;/tex&amp;gt; называется &amp;lt;tex&amp;gt;perm(A) = \sum\limits_{\sigma \in S_n} \prod\limits^n_{i =1}A_{i\sigma(i)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S_n -&amp;lt;/tex&amp;gt; множество всех перестановок из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; элементов. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Задача вычисления перманента матрицы, заполненной нулями и единицами является &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;полной.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Variable_block.png|thumb|200px|Блок переменной]]&lt;br /&gt;
[[Файл:clause_block.png|thumb|150px|Блок клоза]]&lt;br /&gt;
[[Файл:xor_block.png|thumb|200px|Блок XOR]]&lt;br /&gt;
[[Файл:blocks_connection.png|thumb|200px|Блок XOR]]&lt;br /&gt;
Задача нахождения перманента &amp;lt;tex&amp;gt;0,1-&amp;lt;/tex&amp;gt;матрицы может быть сформулирована как задача подсчета количества перестановок, для которых произведение соответствующих элементов матрицы равно &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. В такой формулировке задача нахождения перманента &amp;lt;tex&amp;gt;0,1-&amp;lt;/tex&amp;gt;матрицы принадлежит классу &amp;lt;tex&amp;gt;\#P&amp;lt;/tex&amp;gt; по определению.&lt;br /&gt;
&lt;br /&gt;
Докажем, что задача &amp;lt;tex&amp;gt;perm&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;полной. Нам известно, что задача &amp;lt;tex&amp;gt;\#SAT&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;полной. Аналогично задачам &amp;lt;tex&amp;gt;SAT&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;3SAT&amp;lt;/tex&amp;gt; мы можем сказать, что задача &amp;lt;tex&amp;gt;\#SAT&amp;lt;/tex&amp;gt; может быть сведена к задаче &amp;lt;tex&amp;gt;\#3SAT&amp;lt;/tex&amp;gt;, которая также будет &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;полной. Теперь сведем задачу &amp;lt;tex&amp;gt;\#3SAT&amp;lt;/tex&amp;gt; к задаче &amp;lt;tex&amp;gt;perm&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По данной формуле &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;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;A'&amp;lt;/tex&amp;gt; такую, что &amp;lt;tex&amp;gt;perm(A')=4^m\cdot(\#\phi)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\#\phi -&amp;lt;/tex&amp;gt; количество удовлетворяющих подстановок для &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt;. Для этого будем рассматривать матрицу &amp;lt;tex&amp;gt;A'&amp;lt;/tex&amp;gt; как матрицу смежности двудольного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;X = \{x_1 \ldots \, x_n\}, \,  \{x_i, x_j\} \in V(G) \iff A_{i, j} = 1&amp;lt;/tex&amp;gt;. Таким образом, нашей целью будет построение некоторого графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt;, матрицей смежности которого будет &amp;lt;tex&amp;gt;A'&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для этого по данной 3-КНФ формуле построим ориентированный граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; таким образом, чтобы в нем существовали покрытия циклами двух видов: те, которые соответствуют удовлетворяющим назначениям, и те, которые не соответствуют. Назовем покрытием ориентированного графа циклами такой подграф, что для любой вершины есть  ровно одно входящее и исходящее ребро. Такой подграф должен состоять из циклов. Определим вес покрытия как произведение весов ребер, входящих в него. Тогда &amp;lt;tex&amp;gt;perm(A)&amp;lt;/tex&amp;gt; равен сумме весов всех возможных покрытий циклами. Далее покажем, что любое удовлетворяющее назначение для формулы &amp;lt;tex&amp;gt;\phi&amp;lt;/tex&amp;gt; будет добавлять &amp;lt;tex&amp;gt;4^m&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;perm(A')&amp;lt;/tex&amp;gt;, а любое другое назначение не будет вносить вклад. Тогда &amp;lt;tex&amp;gt;perm(A')=4^m\cdot(\#\phi)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построение графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; выполним за полиномиальное время. Для этого будем использовать три вида блоков. (Все ребра, для которых на схеме не указан вес, имеют вес &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.) &lt;br /&gt;
&lt;br /&gt;
'''Блок переменной'''. Блок каждой переменной имеет два покрытия циклами, соответствующие присвоению &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;gt; данной переменной. Присвоение &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt; соответствует покрытию, содержащему все &amp;quot;внешние&amp;quot; ребра, присвоение &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;gt; соответствует покрытию, включающему ребра-петли и ребро &amp;lt;tex&amp;gt;``false&amp;quot;&amp;lt;/tex&amp;gt;. Каждое внешнее ребро ассоциировано с одним клозом, в котором присутствует данная переменная.&lt;br /&gt;
&lt;br /&gt;
'''Блок клоза'''. Любое покрытие циклами для данного блока не содержит в себе как минимум одно внешнее ребро. И для любого подмножества внешних ребер (за исключением набора из всех ребер) существует  единственное покрытие и его вес равен &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. Каждое внешнее ребро рассматриваемого клоза ассоциировано с одной переменной, присутствующей в нем.&lt;br /&gt;
&lt;br /&gt;
'''Блок XOR'''. Цель данного блока - убедиться, что для произвольной пары ребер &amp;lt;tex&amp;gt;uu'&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;vv'&amp;lt;/tex&amp;gt; ровно одно из них присутствует в любом из покрытий циклами, учитывающемся в итоговой сумме.  Представим, что мы заменяем пару ребер &amp;lt;tex&amp;gt;uu'&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;vv'&amp;lt;/tex&amp;gt; в некотором графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на блок XOR. Каждый цикл в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; веса &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, проходящий через ровно одно из ребер &amp;lt;tex&amp;gt;uu'&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;vv'&amp;lt;/tex&amp;gt;, превращается в набор циклов в графе &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; общим весом &amp;lt;tex&amp;gt;4w&amp;lt;/tex&amp;gt;: вклад дает набор циклов, которые заходят в блок через &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и выходят через &amp;lt;tex&amp;gt;u'&amp;lt;/tex&amp;gt; или заходят через &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; и выходят через &amp;lt;tex&amp;gt;v'&amp;lt;/tex&amp;gt;, вес остальных циклов в сумме равняется &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; и при дальнейшем подсчете мы можем их не учитывать. Блок XOR'a соединяет блоки переменных с соответствующими блоками клозов так, чтобы вклад в общую сумму вносили только те циклы, которые соответствуют удовлетворяющим назначениям нашей формулы. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим клоз и переменную внутри него. Рассмотрим внешние ребра соответствующих блоков и соединим их при помощи XOR-блока. Теперь если при построении цикла мы не проходим через внешнее ребро клоза, то мы гарантированно проходим по внешнему ребру переменной, что аналогично присвоению переменной значения &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;. Так как хотя бы одно ребро в каждом блоке клоза будет пропущено, то каждый цикл, который мы учитываем соответствует удовлетворяющему назначению формулы в 3-КНФ. А для каждого удовлетворяющего назначения существует множество циклов суммарным весом &amp;lt;tex&amp;gt;4^{3m}&amp;lt;/tex&amp;gt;, так как они проходят через блоки XOR ровно &amp;lt;tex&amp;gt;3m&amp;lt;/tex&amp;gt; раз. Таким образом &amp;lt;tex&amp;gt;perm(G') = 4^{3m}\cdot\#\phi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь сведем полученную матрицу к &amp;lt;tex&amp;gt;0,1-&amp;lt;/tex&amp;gt;матрице. Для начала изменим веса ребер так, чтобы они были равны &amp;lt;tex&amp;gt;\pm1&amp;lt;/tex&amp;gt;. Заметим, что замена ребра веса &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; параллельных ребер веса &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; не меняет перманента матрицы. В графе не допускаются параллельные ребра, но мы можем сделать их допустимыми, если разобьем каждое из них на два, добавив новые вершины. Чтобы избавиться от ребер с отрицательным весом, заметим, что перманент графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с весами ребер равными &amp;lt;tex&amp;gt;\pm1&amp;lt;/tex&amp;gt; равен числу из отрезка &amp;lt;tex&amp;gt;[-n!, \, n!]&amp;lt;/tex&amp;gt; и может быть вычислен как &amp;lt;tex&amp;gt;y = x \,  ( mod \, 2^{m+1})&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; достаточно большое (например, &amp;lt;tex&amp;gt;m = n^2&amp;lt;/tex&amp;gt;. Для того, чтобы вычислить &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, достаточно посчитать перманент матрицы смежности графа, где все ребра веса &amp;lt;tex&amp;gt;-1&amp;lt;/tex&amp;gt; заменены на ребра веса &amp;lt;tex&amp;gt;2^m&amp;lt;/tex&amp;gt;. Эти ребра могут быть заменены на &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребер весом &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;, которые можно разбить на двойки параллельных ребер весом &amp;lt;tex&amp;gt;+1&amp;lt;/tex&amp;gt;, как на предыдущем шаге.&lt;br /&gt;
&lt;br /&gt;
Таким образом для данной нам формулы мы за полиномиальное время построили соответствующий граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt;perm(A') = 4^m\cdot(\#\phi)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A'&amp;lt;/tex&amp;gt; - матрица смежности графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; и свели задачу &amp;lt;tex&amp;gt;\#3SAT&amp;lt;/tex&amp;gt; к задаче &amp;lt;tex&amp;gt;perm&amp;lt;/tex&amp;gt;. Значит задача &amp;lt;tex&amp;gt;perm&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;полной.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Замечание===&lt;br /&gt;
&lt;br /&gt;
Задача вычисления перманента матрицы, элементы которой принадлежат множеству &amp;lt;tex&amp;gt;\{0,1\}&amp;lt;/tex&amp;gt; может быть сведена к задаче подсчета числа совершенных паросочетаний в двудольном графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;\prod\limits^n_{i =1}A_{i\sigma(i)} = 1&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;\sigma&amp;lt;/tex&amp;gt; является совершенным паросочетанием. В таком случае, &amp;lt;tex&amp;gt;perm(A)&amp;lt;/tex&amp;gt; равен числу совершенных паросочетаний в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. А значит задача подсчета числа совершенных паросочетаний в двудольном графе эквивалентна задаче вычисления перманента &amp;lt;tex&amp;gt;\{0,1\}-&amp;lt;/tex&amp;gt;матрицы и также является &amp;lt;tex&amp;gt;\#P-&amp;lt;/tex&amp;gt;полной.&lt;br /&gt;
&lt;br /&gt;
==Источники==&lt;br /&gt;
*[http://theory.cs.princeton.edu/complexity/book.pdf Christos H. Papadimitriou. Computational Complexity. c. 172-179]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Counting_problem_(complexity) Counting problem]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sharp-P Sharp-P ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sharp-P-complete Sharp-P-complete]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/Sharp-P-completeness_of_01-permanent Sharp-P-completeness of 01-permanent]&lt;br /&gt;
*[https://shaih.github.io/pubs/01perm.pdf Zero One Permanent is  #P-Complete,  A Simpler Proof]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Класс P]]&lt;br /&gt;
*[[Классы NP, coNP, Σ₁, Π₁]]&lt;br /&gt;
*[[Сведение относительно класса функций. Сведение по Карпу. Трудные и полные задачи]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория сложности]]&lt;/div&gt;</summary>
		<author><name>176.59.10.248</name></author>	</entry>

	</feed>