<?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=GARiK+Carrot</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=GARiK+Carrot"/>
		<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/GARiK_Carrot"/>
		<updated>2026-06-22T23:37:23Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51388</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51388"/>
				<updated>2016-01-18T17:04:26Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; — количество вершин в графе (удвоенное количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; — количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;lt;i&amp;gt;решение не существует&amp;lt;/i&amp;gt;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt {true}&amp;lt;/tex&amp;gt;, иначе — &amp;lt;tex&amp;gt; \mathtt {false}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2SAT  == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (a, b)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим в графе следующие пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин V = &amp;lt;tex&amp;gt;\{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(a, c), (\overline c, \overline a), (c, \overline a), (a, \overline c), (\overline a, b), (\overline b, a), (b, a), (\overline b, \overline a)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет.&lt;br /&gt;
&lt;br /&gt;
== Использование 2SAT  ==&lt;br /&gt;
&lt;br /&gt;
Решение &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; может потребоваться в следующих задачах: &lt;br /&gt;
*латинские квадраты&amp;lt;ref&amp;gt; [https://ru.wikipedia.org/wiki/Латинский_квадрат Википедия — Латинские квадраты] &amp;lt;/ref&amp;gt;, &lt;br /&gt;
*квазигруппы&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Википедия — Квазигруппы]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
*числа Рамсея&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Википедия — Числа Рамсея]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
*система Штейнера&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Система_Штейнера Википедия — Система Штейнера]&amp;lt;/ref&amp;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;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability Википедия — 2-satisfiability]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51387</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51387"/>
				<updated>2016-01-18T16:54:16Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Исправлены примечания&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; — количество вершин в графе (удвоенное количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; — количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе — &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2SAT  == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (a, b)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим в графе следующие пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин V = &amp;lt;tex&amp;gt;\{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(a, c), (\overline c, \overline a), (c, \overline a), (a, \overline c), (\overline a, b), (\overline b, a), (b, a), (\overline b, \overline a)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет.&lt;br /&gt;
&lt;br /&gt;
== Использование 2SAT  ==&lt;br /&gt;
&lt;br /&gt;
Решение &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; может потребоваться в следующих задачах: &lt;br /&gt;
*латинские квадраты&amp;lt;ref&amp;gt; [https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты] &amp;lt;/ref&amp;gt;, &lt;br /&gt;
*квазигруппы&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
*числа Рамсея&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&amp;lt;/ref&amp;gt;,&lt;br /&gt;
*система Штейнера&amp;lt;ref&amp;gt;[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&amp;lt;/ref&amp;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;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51386</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51386"/>
				<updated>2016-01-18T16:49:28Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Второй пример */ Исправлен tex&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; — количество вершин в графе (удвоенное количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; — количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе — &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2SAT  == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (a, b)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим в графе следующие пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин V = &amp;lt;tex&amp;gt;\{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(a, c), (\overline c, \overline a), (c, \overline a), (a, \overline c), (\overline a, b), (\overline b, a), (b, a), (\overline b, \overline a)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет.&lt;br /&gt;
&lt;br /&gt;
== Использование 2SAT  ==&lt;br /&gt;
&lt;br /&gt;
Решение &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;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;
*проектирование и тестирование лекарств (мед. препаратов).&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51385</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51385"/>
				<updated>2016-01-18T16:46:23Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Изменен порядок последних трех разделов.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; — количество вершин в графе (удвоенное количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; — количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе — &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2SAT  == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (a, b)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим в графе следующие пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(a, c), (\overline c, \overline a), (c, \overline a), (a, \overline c), (\overline a, b), (\overline b, a), (b, a), (\overline b, \overline a)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет.&lt;br /&gt;
&lt;br /&gt;
== Использование 2SAT  ==&lt;br /&gt;
&lt;br /&gt;
Решение &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;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;
*проектирование и тестирование лекарств (мед. препаратов).&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51384</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51384"/>
				<updated>2016-01-18T16:45:09Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; — количество вершин в графе (удвоенное количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; — количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе — &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2SAT  == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (a, b)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим в графе следующие пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин V = \{a, b, c, \overline a, \overline b, \overline c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(a, c), (\overline c, \overline a), (c, \overline a), (a, \overline c), (\overline a, b), (\overline b, a), (b, a), (\overline b, \overline a)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет.&lt;br /&gt;
&lt;br /&gt;
== Использование 2SAT  ==&lt;br /&gt;
&lt;br /&gt;
Решение &amp;lt;tex&amp;gt;\mathrm {2SAT}&amp;lt;/tex&amp;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;
*проектирование и тестирование лекарств (мед. препаратов).&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51381</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51381"/>
				<updated>2016-01-18T16:25:38Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; - количество вершин в графе (количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; - количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе - &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2SAT  == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (a, b)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим в графе следующие пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф со следующими множествами вершинам и ребер:&lt;br /&gt;
множество вершин &amp;lt;tex&amp;gt; V = \{a, b, c\}, &amp;lt;/tex&amp;gt;&lt;br /&gt;
множество ребер &amp;lt;tex&amp;gt; E = \{(a, c), (\overline c, \overline a), (c, \overline a), (a, \overline c), (\overline a, b), (\overline b, a), (b, a), (\overline b, \overline a)\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Использование 2SAT  ==&lt;br /&gt;
&lt;br /&gt;
Решение 2SAT может потребоваться в следующих задачах: &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;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51378</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51378"/>
				<updated>2016-01-18T16:03:51Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: переименовал 2-SAT в 2SAT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;2-SAT &amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; - количество вершин в графе (количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; - количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе - &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2-SAT == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим граф и рассмотрим пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Использование 2-SAT ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
*Проектирование протоколов (пример: для сетевых коммуникаций)&lt;br /&gt;
*Электронная коммерция (Электронные аукционы и автоматизированные брокеры&lt;br /&gt;
*Теории кодирования, криптографии&lt;br /&gt;
*Проектирование и тестирование лекарств (мед. препаратов)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2-SAT&amp;diff=51379</id>
		<title>2-SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2-SAT&amp;diff=51379"/>
				<updated>2016-01-18T16:03:51Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: переименовал 2-SAT в 2SAT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[2SAT]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51377</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51377"/>
				<updated>2016-01-18T16:03:35Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Алгоритм решения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;2-SAT &amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt; имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;  имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы &amp;lt;tex&amp;gt;\mathrm 2SAT&amp;lt;/tex&amp;gt;  имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#&amp;lt;i&amp;gt;Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&amp;lt;/i&amp;gt;, где &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt; - количество вершин в графе (количество переменных), а &amp;lt;tex&amp;gt; M &amp;lt;/tex&amp;gt; - количество ребер графа (удвоенное количество дизъюнктов).&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; выбираем значение &amp;lt;tex&amp;gt; \mathtt true&amp;lt;/tex&amp;gt;, иначе - &amp;lt;tex&amp;gt; \mathtt false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2-SAT == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим граф и рассмотрим пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Использование 2-SAT ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
*Проектирование протоколов (пример: для сетевых коммуникаций)&lt;br /&gt;
*Электронная коммерция (Электронные аукционы и автоматизированные брокеры&lt;br /&gt;
*Теории кодирования, криптографии&lt;br /&gt;
*Проектирование и тестирование лекарств (мед. препаратов)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51226</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51226"/>
				<updated>2016-01-16T08:35:46Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлены примеры решения 2-SAT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;2-SAT &amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#[http://e-maxx.ru/algo/strong_connected_components Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;]&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Примеры решения 2-SAT == &lt;br /&gt;
=== Первый пример ===&lt;br /&gt;
&lt;br /&gt;
Рассмотрим следующую функцию: &amp;lt;tex&amp;gt; (a \vee b) \wedge &lt;br /&gt;
(a \vee c) \wedge&lt;br /&gt;
(\overline b \vee c) \wedge&lt;br /&gt;
(\overline b \vee a) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
\overline a \to c \wedge&lt;br /&gt;
\overline c \to a \wedge&lt;br /&gt;
b \to c \wedge&lt;br /&gt;
\overline c \to \overline b \wedge&lt;br /&gt;
\overline a \to \overline b \wedge&lt;br /&gt;
a \to b&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим граф и рассмотрим пути:&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to \overline b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline c \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt; \overline a \to b \to c &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; \overline a \to a &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; a = 1, \overline a = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Т.к. &amp;lt;tex&amp;gt; a \to c &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; a = 1 &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; c = 1, \overline c = 0 &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значения &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; может быть любым, т.к. все вершины, из которых можно добраться в &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; имеют значение ноль&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; &amp;lt;tex&amp;gt; a = 1, b = 0, c = 1 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; a = 1, b = 1, c = 1 &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;&lt;br /&gt;
(\overline a \vee c) \wedge&lt;br /&gt;
(\overline c \vee \overline a) \wedge&lt;br /&gt;
(a \vee b) \wedge&lt;br /&gt;
(\overline b \vee a)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная функция эквивалентна функции &lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
a \to c \wedge&lt;br /&gt;
\overline c \to \overline a \wedge&lt;br /&gt;
c \to \overline a \wedge&lt;br /&gt;
a \to \overline c \wedge&lt;br /&gt;
\overline a \to b \wedge&lt;br /&gt;
\overline b \to a \wedge&lt;br /&gt;
b \to a \wedge&lt;br /&gt;
\overline b \to \overline a&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заметим следующий путь: &amp;lt;tex&amp;gt; a \to c \to \overline a \to b \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что &amp;lt;tex&amp;gt; a \to \overline a \to a &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Следовательно по ранее доказанной теореме, у данной функции решений нет&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; Ответ: &amp;lt;/b&amp;gt; Решений нет&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Использование 2-SAT ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
*Проектирование протоколов (пример: для сетевых коммуникаций)&lt;br /&gt;
*Электронная коммерция (Электронные аукционы и автоматизированные брокеры&lt;br /&gt;
*Теории кодирования, криптографии&lt;br /&gt;
*Проектирование и тестирование лекарств (мед. препаратов)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51225</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=51225"/>
				<updated>2016-01-16T07:45:30Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлено использование 2-SAT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;2-SAT &amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#[http://e-maxx.ru/algo/strong_connected_components Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;]&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Использование 2-SAT ==&lt;br /&gt;
&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Латинский_квадрат Латинские квадраты]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Квазигруппы]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Теорема_Рамсея#.D0.A7.D0.B8.D1.81.D0.BB.D0.B0_.D0.A0.D0.B0.D0.BC.D1.81.D0.B5.D1.8F Числа Рамсея]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/Система_Штейнера Система Штейнера]&lt;br /&gt;
*Проектирование протоколов (пример: для сетевых коммуникаций)&lt;br /&gt;
*Электронная коммерция (Электронные аукционы и автоматизированные брокеры&lt;br /&gt;
*Теории кодирования, криптографии&lt;br /&gt;
*Проектирование и тестирование лекарств (мед. препаратов)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50180</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50180"/>
				<updated>2015-12-10T10:33:24Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Временно убран пример. Исправлено вступление, алгоритм решения&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &amp;lt;b&amp;gt;2-SAT &amp;lt;/b&amp;gt; (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Rightarrow)&amp;lt;/tex&amp;gt;Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\Leftarrow)&amp;lt;/tex&amp;gt;Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
#Построим граф импликаций. &lt;br /&gt;
#[http://e-maxx.ru/algo/strong_connected_components Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;]&lt;br /&gt;
#Пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;. &lt;br /&gt;
#Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
Компоненты сильной связности найдем за &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, затем проверим каждую из &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; переменных за &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;. Следовательно асимптотика &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability — Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50177</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50177"/>
				<updated>2015-12-09T15:39:08Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Применение 2-SAT задач */  Добавлен пример применения 2-SAT&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
Решим задачу 2-SAT выполнимости данной функции.&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = 2-SAT (2-satisfiability) выполнимость данной функции — задача распределения аргументов таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
*Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
*Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
*Построим граф импликаций.&lt;br /&gt;
*Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;.&lt;br /&gt;
*Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Предположим, что семь комиков согласились во время трехдневного фестиваля дать концерты в двух из пяти отелей. При этом у каждого из них один из дней занят другой работой, поэтому вот как выглядят возможные варианты их выступлений в отелях Лас-Вегаса: &lt;br /&gt;
&lt;br /&gt;
*Tomlin может выступить в отелях Aladdin и Caesars в дни 1 и 2;&lt;br /&gt;
*Unwin может выступить в отелях Bellagio и Excalibur в дни 1 и 2;&lt;br /&gt;
*Vegas может выступить в отелях Desert и Excalibur в дни 2 и 3;&lt;br /&gt;
*Williams может выступить в отелях Aladdin и Desert в дни 1 и 3;&lt;br /&gt;
*Xie может выступить в отелях Caesars и Excalibur в дни 1 и 3;&lt;br /&gt;
*Yankovic может выступить в отелях Bellagio и Desert в дни 2 и 3;&lt;br /&gt;
*Zany может выступить в отелях Bellagio и Caesars в дни 1 и 2. &lt;br /&gt;
&lt;br /&gt;
Можно ли составить расписание так, чтобы не возникало никаких конфликтов?&lt;br /&gt;
Для решения этой задачи можно ввести семь булевых переменных &amp;lt;tex&amp;gt;{t, u, v, w, x, у, z}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; например, означает выступление Tomlin в Aladdin в первый день и в Caesars во второй, в то время как &amp;lt;tex&amp;gt; \overline t &amp;lt;/tex&amp;gt; означает, что дни соответствуют отелям в обратном порядке: выступление в Aladdin — во второй день, а в Caesars — в первый. Тогда мы можем записать ограничения, означающие, что никакие два комедианта не выступают в одном отеле в один и тот же день, следующим образом. &lt;br /&gt;
&lt;br /&gt;
Тогда мы можем записать ограничения, означающие, что никакие два комедианта не выступают в одном отеле в один и тот же день, следующим образом. (В квадратных скобках указаны первая буква отеля и день, в который двое участников не могут выступать одновременно).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width:10cm&amp;quot; border=1&lt;br /&gt;
 |&amp;lt;tex&amp;gt;\overline {(t \wedge w)} {[}A1{]} &amp;lt;/tex&amp;gt; &lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(y \wedge \overline z)} {[}B2{]} &amp;lt;/tex&amp;gt; &lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(t \wedge z)} {[}C2{]} &amp;lt;/tex&amp;gt; &lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(w \wedge y)} {[}D3{]} &amp;lt;/tex&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;tex&amp;gt;\overline {(u \wedge z)} {[}B1{]} &amp;lt;/tex&amp;gt;&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(\overline t \wedge x)} {[}C1{]} &amp;lt;/tex&amp;gt; &lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(v \wedge \overline y)} {[}D2{]} &amp;lt;/tex&amp;gt;	&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(\overline u \wedge \overline x)} {[}E1{]}	&amp;lt;/tex&amp;gt;	&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;tex&amp;gt;\overline {(\overline u \wedge y)} [B2] &amp;lt;/tex&amp;gt; &lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(\overline t \wedge \overline z)} [C1] &amp;lt;/tex&amp;gt;&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(\overline v \wedge w)} [D3] &amp;lt;/tex&amp;gt;&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(u \wedge \overline v)} [E2] &amp;lt;/tex&amp;gt;&lt;br /&gt;
 |-&lt;br /&gt;
 |&amp;lt;tex&amp;gt;\overline {(\overline u \wedge \overline z)} [B2] &amp;lt;/tex&amp;gt;&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(x \wedge \overline z)} [C1] &amp;lt;/tex&amp;gt;&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(\overline v \wedge y)} [D3] &amp;lt;/tex&amp;gt;&lt;br /&gt;
 ||&amp;lt;tex&amp;gt;\overline {(v \wedge x)} [E3] &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; &lt;br /&gt;
	(\overline t \vee \overline w) &lt;br /&gt;
	\wedge (\overline u \vee \overline z) &lt;br /&gt;
	\wedge (u \vee \overline y) &lt;br /&gt;
	\wedge (u \vee z)&lt;br /&gt;
	\wedge (\overline y \vee z)&lt;br /&gt;
	\wedge (t \vee \overline x)&lt;br /&gt;
	\wedge (t \vee z)&lt;br /&gt;
	\wedge (\overline x \vee z) &lt;br /&gt;
	\wedge &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
	(\overline t \vee \overline z)&lt;br /&gt;
	\wedge (\overline v \vee y)&lt;br /&gt;
	\wedge (v \vee \overline w)&lt;br /&gt;
	\wedge (v \vee \overline y)&lt;br /&gt;
	\wedge (\overline w \vee \overline y)&lt;br /&gt;
	\wedge (u \vee x)&lt;br /&gt;
	\wedge (\overline u \vee v)&lt;br /&gt;
	\wedge (\overline v \vee \overline x)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того, дизъюнкты Крома могут быть записаны в виде импликаций: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; &lt;br /&gt;
	(t \to \overline w) &lt;br /&gt;
	\wedge (u \to \overline z) &lt;br /&gt;
	\wedge (\overline u \to \overline y) &lt;br /&gt;
	\wedge (\overline u \to z)&lt;br /&gt;
	\wedge (y \to z)&lt;br /&gt;
	\wedge (\overline t \to \overline x)&lt;br /&gt;
	\wedge (\overline t \to z)&lt;br /&gt;
	\wedge (x \to z)&lt;br /&gt;
	\wedge&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
	(t \to \overline z)&lt;br /&gt;
	\wedge (v \to y)&lt;br /&gt;
	\wedge (\overline v \to \overline w)&lt;br /&gt;
	\wedge (\overline v \to \overline y)&lt;br /&gt;
	\wedge (w \to \overline y)&lt;br /&gt;
	\wedge (\overline u \to x)&lt;br /&gt;
	\wedge (u \to v)&lt;br /&gt;
	\wedge (v \to \overline x)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И каждая такая импликация может также быть представлена в альтернативном, &amp;quot;контрапозитивном&amp;quot; виде:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; &lt;br /&gt;
	(w \to \overline t) &lt;br /&gt;
	\wedge (z \to \overline u) &lt;br /&gt;
	\wedge (\overline y \to \overline u) &lt;br /&gt;
	\wedge (\overline z \to u)&lt;br /&gt;
	\wedge (z \to y)&lt;br /&gt;
	\wedge (\overline x \to \overline t)&lt;br /&gt;
	\wedge (\overline z \to t)&lt;br /&gt;
	\wedge (z \to x)&lt;br /&gt;
	\wedge &lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
	(z \to \overline t)&lt;br /&gt;
	\wedge (y \to v)&lt;br /&gt;
	\wedge (\overline w \to \overline v)&lt;br /&gt;
	\wedge (\overline y \to \overline v)&lt;br /&gt;
	\wedge (y \to \overline w)&lt;br /&gt;
	\wedge (\overline u \to x)&lt;br /&gt;
	\wedge (v \to u)&lt;br /&gt;
	\wedge (x \to \overline v)&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При решение данной задачи можно найти следующий цикл:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
	u &lt;br /&gt;
	\to \overline z &lt;br /&gt;
	\to \overline y&lt;br /&gt;
	\to \overline v&lt;br /&gt;
	\to \overline u&lt;br /&gt;
	\to z&lt;br /&gt;
	\to \overline t&lt;br /&gt;
	\to \overline x&lt;br /&gt;
	\to \overline u&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот цикл говорит о том, что &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \overline v &amp;lt;/tex&amp;gt; должны иметь одно и то же значение; так что нет никакой возможности удовлетворить все условия. Если расписание должно быть составлено любой ценой, организаторам фестиваля придется провести переговоры и пересмотреть соглашение по крайней мере с одним из семи комедиантов.&lt;br /&gt;
&lt;br /&gt;
Организаторы могут, например, попытаться временно вывести за рамки картины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt;. Тогда пять из шестнадцати ограничений исчезнут, и останутся только 22 из импликаций.&lt;br /&gt;
Такое решение будет иметь циклы наподобие &amp;lt;tex&amp;gt; z \to \overline u \to x \to z &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; t \to \overline z \to t &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Можно заметить что значение &amp;lt;tex&amp;gt; tuwxyz = 110000 &amp;lt;/tex&amp;gt; выполняют каждый дизъюнкт. Эти значения дают нам расписание, которое выполняет шесть из семи исходных условий, начиная с выступления (Tomlin, Unwin, Zany, Williams, Xie) в первый день в (Aladdin, Bellagio, Caesars, Desert, Excalibur).&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[КНФ | КНФ]]&lt;br /&gt;
*[[Специальные_формы_КНФ | Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]]&lt;br /&gt;
*[[Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B | Ориентированные графы]]&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
*[http://e-maxx.ru/algo/strong_connected_components MAXimal :: algo :: Поиск компонент сильной связности за O(N + M)] &lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability - Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50175</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50175"/>
				<updated>2015-12-09T09:41:47Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Алгоритм Решения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
Решим задачу 2-SAT выполнимости данной функции.&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = 2-SAT (2-satisfiability) выполнимость данной функции — задача распределения аргументов таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
*Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
*Докажем необходимость: Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
*Построим граф импликаций.&lt;br /&gt;
*Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;.&lt;br /&gt;
*Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[КНФ | КНФ]]&lt;br /&gt;
*[[Специальные_формы_КНФ | Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]]&lt;br /&gt;
*[[Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B | Ориентированные графы]]&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
*[http://e-maxx.ru/algo/strong_connected_components MAXimal :: algo :: Поиск компонент сильной связности за O(N + M)] &lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability - Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50111</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50111"/>
				<updated>2015-12-03T19:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлена расшифровка&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
Решим задачу 2-SAT выполнимости данной функции.&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = 2-SAT (2-satisfiability) выполнимость данной функции — задача распределения аргументов таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
*Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
*Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
*Построим граф импликаций.&lt;br /&gt;
*Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;.&lt;br /&gt;
*Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[КНФ | КНФ]]&lt;br /&gt;
*[[Специальные_формы_КНФ | Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]]&lt;br /&gt;
*[[Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B | Ориентированные графы]]&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
*[http://e-maxx.ru/algo/strong_connected_components MAXimal :: algo :: Поиск компонент сильной связности за O(N + M)] &lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability - Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50109</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50109"/>
				<updated>2015-12-03T17:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлен алгоритм. Заменено &amp;quot;Определение&amp;quot; на &amp;quot;Задачу&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
Решим задачу 2-SAT выполнимости данной функции.&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = 2-SAT выполнимость данной функции — задача распределения аргументов таким образом, чтобы результат данной функции был равен &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
*Докажем достаточность: Пусть 2-SAT имеет решение. Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;. Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &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; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие.&lt;br /&gt;
&lt;br /&gt;
*Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. Докажем, что этого достаточно, чтобы 2-SAT имело решение. Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Теперь мы можем собрать весь алгоритм воедино:&lt;br /&gt;
&lt;br /&gt;
*Построим граф импликаций.&lt;br /&gt;
*Найдём в этом графе компоненты сильной связности за время &amp;lt;tex&amp;gt;O(N + M)&amp;lt;/tex&amp;gt;, пусть &amp;lt;tex&amp;gt;comp[v]&amp;lt;/tex&amp;gt; — это номер компоненты сильной связности, которой принадлежит вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Проверим, что для каждой переменной &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; вершины &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline x&amp;lt;/tex&amp;gt; лежат в разных компонентах, т.е. &amp;lt;tex&amp;gt;comp[x] \ne comp[\overline x]&amp;lt;/tex&amp;gt;. Если это условие не выполняется, то вернуть &amp;quot;решение не существует&amp;quot;.&lt;br /&gt;
*Если &amp;lt;tex&amp;gt;comp[x] &amp;gt; comp[\overline x]&amp;lt;/tex&amp;gt;, то переменной x выбираем значение true, иначе - false.&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[КНФ | КНФ]]&lt;br /&gt;
*[[Специальные_формы_КНФ | Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]]&lt;br /&gt;
*[[Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B | Ориентированные графы]]&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
*[http://e-maxx.ru/algo/strong_connected_components MAXimal :: algo :: Поиск компонент сильной связности за O(N + M)] &lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability - Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50108</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50108"/>
				<updated>2015-12-03T17:15:36Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* См. также */ Переделано в интервики&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
2-SAT выполнимость данной функции — эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &lt;br /&gt;
&amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 1. С другой стороны для того, чтобы из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[[КНФ | КНФ]]&lt;br /&gt;
*[[Специальные_формы_КНФ | Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]]&lt;br /&gt;
*[[Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B | Ориентированные графы]]&lt;br /&gt;
*[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability - Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50107</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50107"/>
				<updated>2015-12-03T17:13:55Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Источники информации */ Добавлена википедия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
2-SAT выполнимость данной функции — эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &lt;br /&gt;
&amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 1. С другой стороны для того, чтобы из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=КНФ - КНФ]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Специальные_формы_КНФ - Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B - Ориентированные графы]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=3CNFSAT - NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
*[https://en.wikipedia.org/wiki/2-satisfiability 2-satisfiability - Википедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50096</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50096"/>
				<updated>2015-12-02T09:43:49Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлены категории&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
2-SAT выполнимость данной функции — эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &lt;br /&gt;
&amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 1. С другой стороны для того, чтобы из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=КНФ - КНФ]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Специальные_формы_КНФ - Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B - Ориентированные графы]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=3CNFSAT - NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Булевы функции ]]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50095</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50095"/>
				<updated>2015-12-02T07:53:27Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлено применение 2-SAT. Добавлены новые ссылки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
2-SAT выполнимость данной функции — эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &lt;br /&gt;
&amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 1. С другой стороны для того, чтобы из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Применение 2-SAT задач ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм для решения 2-SAT может быть применим во всех задачах, где есть набор величин, каждая из которых может принимать 2 возможных значения, и есть связи между этими величинами:&lt;br /&gt;
&lt;br /&gt;
* Расположение текстовых меток на карте или диаграмме. Имеется в виду нахождение такого расположения меток, при котором никакие две не пересекаются. Стоит заметить, что в общем случае, когда каждая метка может занимать множество различных позиций, мы получаем задачу general satisfiability, которая является NP-полной. Однако, если ограничиться только двумя возможными позициями, то полученная задача будет задачей 2-SAT. &lt;br /&gt;
* Расположение рёбер при рисовании графа. Аналогично предыдущему пункту, если ограничиться только двумя возможными способами провести ребро, то мы придём к 2-SAT.&lt;br /&gt;
* Составление расписания игр. Имеется в виду такая система, когда каждая команда должна сыграть с каждой по одному разу, а требуется распределить игры по типу домашняя-выездная, с некоторыми наложенными ограничениями.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=КНФ - КНФ]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Специальные_формы_КНФ - Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Основные_определения_теории_графов#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B5_.D0.B3.D1.80.D0.B0.D1.84.D1.8B - Ориентированные графы]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=3CNFSAT - NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50094</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50094"/>
				<updated>2015-12-02T07:40:43Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Добавлен TEX. Добавлены ссылки на КНФ и 2-КНФ. Перенесено определение во вступление&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома).&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
2-SAT выполнимость данной функции — эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи &amp;lt;tex&amp;gt;(\overline a \to b \wedge b \to \overline a) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: &amp;lt;tex&amp;gt;\overline a \to b &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; b \to \overline a &amp;lt;/tex&amp;gt; для каждого дизъюнкта функции &amp;lt;tex&amp;gt; a \vee b &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &lt;br /&gt;
&amp;lt;tex&amp;gt;(\overline x \to x \wedge x \to \overline x) &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 1. С другой стороны для того, чтобы из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\overline x \to x &amp;lt;/tex&amp;gt; было верным), &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; и из вершины &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt; можно достичь &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt;, но из вершины &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; нельзя достичь &amp;lt;tex&amp;gt; \overline x &amp;lt;/tex&amp;gt;. Докажем, что из &amp;lt;tex&amp;gt; x &amp;lt;/tex&amp;gt; не достижимо такой &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt;, что из &amp;lt;tex&amp;gt; y &amp;lt;/tex&amp;gt; достижимо &amp;lt;tex&amp;gt; \overline y &amp;lt;/tex&amp;gt;. (т.е. &amp;lt;tex&amp;gt; x \to y \to \overline y (x = 1, y = 0)) &amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Если из &amp;lt;tex&amp;gt; x \to y &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \overline x \vee y &amp;lt;/tex&amp;gt;, отсюда следует &amp;lt;tex&amp;gt; \overline y \to \overline x &amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt; x \to y \to \overline y \to \overline x &amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt; x \to \overline x &amp;lt;/tex&amp;gt;. Противоречие.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=КНФ - КНФ]&lt;br /&gt;
*[http://neerc.ifmo.ru/wiki/index.php?title=Специальные_формы_КНФ - Специальные формы КНФ. КНФ в форме Крона (2-КНФ)]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50075</id>
		<title>2SAT</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=2SAT&amp;diff=50075"/>
				<updated>2015-11-30T16:45:04Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: Новая страница: «== 2-SAT Выполнимость ==  Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt;  2-SAT выполн...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2-SAT Выполнимость ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt; &lt;br /&gt;
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи !a =&amp;gt; b и !b =&amp;gt; a &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a =&amp;gt; b и !b =&amp;gt; a для каждого дизъюнкта функции (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из !x достичь x (!x =&amp;gt; x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x =&amp;gt; x) было верным, x должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x =&amp;gt; y =&amp;gt; !y. (x = 1, y = 0)). &amp;lt;br&amp;gt;&lt;br /&gt;
Если из x =&amp;gt; y, то (!x || y), отсюда следует (!y =&amp;gt; !x). Тогда x =&amp;gt; y =&amp;gt; !y =&amp;gt; !x. Следовательно x =&amp;gt; !x. Противоречие.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49978</id>
		<title>Обсуждение:Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49978"/>
				<updated>2015-11-19T14:57:11Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: переименовал Обсуждение:Заглавная страница в 2-SAT Выполнимость&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2-SAT Выполнимость ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt; &lt;br /&gt;
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи !a =&amp;gt; b и !b =&amp;gt; a &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a =&amp;gt; b и !b =&amp;gt; a для каждого дизъюнкта функции (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из !x достичь x (!x =&amp;gt; x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x =&amp;gt; x) было верным, x должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x =&amp;gt; y =&amp;gt; !y. (x = 1, y = 0)). &amp;lt;br&amp;gt;&lt;br /&gt;
Если из x =&amp;gt; y, то (!x || y), отсюда следует (!y =&amp;gt; !x). Тогда x =&amp;gt; y =&amp;gt; !y =&amp;gt; !x. Следовательно x =&amp;gt; !x. Противоречие.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49977</id>
		<title>Обсуждение:Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49977"/>
				<updated>2015-11-19T14:53:58Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 2-SAT Выполнимость ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt; &lt;br /&gt;
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи !a =&amp;gt; b и !b =&amp;gt; a &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a =&amp;gt; b и !b =&amp;gt; a для каждого дизъюнкта функции (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из !x достичь x (!x =&amp;gt; x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x =&amp;gt; x) было верным, x должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x =&amp;gt; y =&amp;gt; !y. (x = 1, y = 0)). &amp;lt;br&amp;gt;&lt;br /&gt;
Если из x =&amp;gt; y, то (!x || y), отсюда следует (!y =&amp;gt; !x). Тогда x =&amp;gt; y =&amp;gt; !y =&amp;gt; !x. Следовательно x =&amp;gt; !x. Противоречие.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
*[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT (2-CNF) ]&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49926</id>
		<title>Обсуждение:Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49926"/>
				<updated>2015-11-18T10:44:44Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Будьте любезны, я не учился в вашем учреждении, подскажите: что значит &amp;quot;Непроверяемые конспекты&amp;quot; на заглавной странице? Дело в том, что на первый взгляд, очень интересен опубликованные конспекты по математическому анализу, но они &amp;quot;непроверяемы&amp;quot;? Это что значит? В них могут содержаться ошибки?&lt;br /&gt;
*: Именно это и значит. Данные конспекты пишут студенты, чтобы было проще готовиться к экзаменам. Они основаны на проводимых лекциях, сами студенты их перечитывают, но иногда в них могут содержаться случайные факты, ошибки, да и вообще они могут быть неполными. Хотя конспекты именно по математическому анализу достаточно хорошие. [[Участник:Shersh|Дмитрий Коваников]] 10:43, 4 мая 2015 (GST)&lt;br /&gt;
&lt;br /&gt;
самая крутая заглавная страница в мире, ИМХО&lt;br /&gt;
&lt;br /&gt;
'''Коллеги, пожалуйста, давайте без вандализма. Я понимаю, что первое апреля и хочется пошутить. Но шутки должны быть смешными и к месту.'''&lt;br /&gt;
&lt;br /&gt;
* [http://inkscape.org/ http://inkscape.org/] — программа для рисования в векторе. Подходит для изображения графов, марковских цепей, схем из функциональных элементов и т.п. [[Участник:Rybak|Андрей Рыбак]] 23:01, 17 января 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* черт, на вики-конспектах какая-то проблема со временем. В комментариях показывает одно, в последних изменениях - другое.(сообщение написано в 4:42) --[[Участник:Dgerasimov|Дмитрий Герасимов]] 08:42, 12 июня 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Кто сломал тег wikitex???111 --[[Участник:Dgerasimov|Дмитрий Герасимов]] 14:44, 10 октября 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Кому вообще понадобились эти java-технологии? --[[Участник:Komarov|Андрей Комаров]] 00:43, 18 февраля 2012 (GST)&lt;br /&gt;
** Зря Андрей ты так про Джаву, зря-зря-зря... --[[Участник:Rybak|Андрей Рыбак]] 23:30, 29 февраля 2012 (GST)&lt;br /&gt;
** Это для первого курса 153N и второго 252N --[[Участник:Borisov|Borisov]] 02:04, 4 марта 2012 (GST)&lt;br /&gt;
** За год там ничего не появилось. Удалил. -- [[Участник:Dmitriy D.|Dmitriy D.]] 08:14, 9 января 2013 (GST)&lt;br /&gt;
&lt;br /&gt;
== Ссылки на источники ==&lt;br /&gt;
&lt;br /&gt;
* Почему бы не организовать ссылки на источники, как в Википедии? С тегом &amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt; --[[Участник:Rybak|Андрей Рыбак]] 20:13, 29 апреля 2012 (GST)&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;
&lt;br /&gt;
Что-то тут не так. Мне кстати последний вариант больше нравится.&lt;br /&gt;
&lt;br /&gt;
== 2-SAT Выполнимость ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt; &lt;br /&gt;
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи !a =&amp;gt; b и !b =&amp;gt; a &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a =&amp;gt; b и !b =&amp;gt; a для каждого дизъюнкта функции (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x)&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из !x достичь x (!x =&amp;gt; x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x =&amp;gt; x) было верным, x должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x =&amp;gt; y =&amp;gt; !y. (x = 1, y = 0)). &amp;lt;br&amp;gt;&lt;br /&gt;
Если из x =&amp;gt; y, то (!x || y), отсюда следует (!y =&amp;gt; !x). Тогда x =&amp;gt; y =&amp;gt; !y =&amp;gt; !x. Следовательно x =&amp;gt; !x. Противоречие.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
MAXimal :: algo :: Задача 2-SAT (2-CNF) &amp;lt;ref&amp;gt; http://e-maxx.ru/algo/2_sat &amp;lt;/ref&amp;gt;&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49925</id>
		<title>Обсуждение:Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49925"/>
				<updated>2015-11-18T10:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* Алгоритм Решения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Будьте любезны, я не учился в вашем учреждении, подскажите: что значит &amp;quot;Непроверяемые конспекты&amp;quot; на заглавной странице? Дело в том, что на первый взгляд, очень интересен опубликованные конспекты по математическому анализу, но они &amp;quot;непроверяемы&amp;quot;? Это что значит? В них могут содержаться ошибки?&lt;br /&gt;
*: Именно это и значит. Данные конспекты пишут студенты, чтобы было проще готовиться к экзаменам. Они основаны на проводимых лекциях, сами студенты их перечитывают, но иногда в них могут содержаться случайные факты, ошибки, да и вообще они могут быть неполными. Хотя конспекты именно по математическому анализу достаточно хорошие. [[Участник:Shersh|Дмитрий Коваников]] 10:43, 4 мая 2015 (GST)&lt;br /&gt;
&lt;br /&gt;
самая крутая заглавная страница в мире, ИМХО&lt;br /&gt;
&lt;br /&gt;
'''Коллеги, пожалуйста, давайте без вандализма. Я понимаю, что первое апреля и хочется пошутить. Но шутки должны быть смешными и к месту.'''&lt;br /&gt;
&lt;br /&gt;
* [http://inkscape.org/ http://inkscape.org/] — программа для рисования в векторе. Подходит для изображения графов, марковских цепей, схем из функциональных элементов и т.п. [[Участник:Rybak|Андрей Рыбак]] 23:01, 17 января 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* черт, на вики-конспектах какая-то проблема со временем. В комментариях показывает одно, в последних изменениях - другое.(сообщение написано в 4:42) --[[Участник:Dgerasimov|Дмитрий Герасимов]] 08:42, 12 июня 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Кто сломал тег wikitex???111 --[[Участник:Dgerasimov|Дмитрий Герасимов]] 14:44, 10 октября 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Кому вообще понадобились эти java-технологии? --[[Участник:Komarov|Андрей Комаров]] 00:43, 18 февраля 2012 (GST)&lt;br /&gt;
** Зря Андрей ты так про Джаву, зря-зря-зря... --[[Участник:Rybak|Андрей Рыбак]] 23:30, 29 февраля 2012 (GST)&lt;br /&gt;
** Это для первого курса 153N и второго 252N --[[Участник:Borisov|Borisov]] 02:04, 4 марта 2012 (GST)&lt;br /&gt;
** За год там ничего не появилось. Удалил. -- [[Участник:Dmitriy D.|Dmitriy D.]] 08:14, 9 января 2013 (GST)&lt;br /&gt;
&lt;br /&gt;
== Ссылки на источники ==&lt;br /&gt;
&lt;br /&gt;
* Почему бы не организовать ссылки на источники, как в Википедии? С тегом &amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt; --[[Участник:Rybak|Андрей Рыбак]] 20:13, 29 апреля 2012 (GST)&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;
&lt;br /&gt;
Что-то тут не так. Мне кстати последний вариант больше нравится.&lt;br /&gt;
&lt;br /&gt;
== 2-SAT Выполнимость ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt; &lt;br /&gt;
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи !a =&amp;gt; b и !b =&amp;gt; a &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a =&amp;gt; b и !b =&amp;gt; a для каждого дизъюнкта функции (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x)&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из !x достичь x (!x =&amp;gt; x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x =&amp;gt; x) было верным, x должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x =&amp;gt; y =&amp;gt; !y. (x = 1, y = 0)). &amp;lt;br&amp;gt;&lt;br /&gt;
Если из x =&amp;gt; y, то (!x || y), отсюда следует (!y =&amp;gt; !x). Тогда x =&amp;gt; y =&amp;gt; !y =&amp;gt; !x. Следовательно x =&amp;gt; !x. Противоречие.&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49924</id>
		<title>Обсуждение:Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=49924"/>
				<updated>2015-11-18T10:40:43Z</updated>
		
		<summary type="html">&lt;p&gt;GARiK Carrot: /* 2-SAT Выполнимость */ Новая тема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Будьте любезны, я не учился в вашем учреждении, подскажите: что значит &amp;quot;Непроверяемые конспекты&amp;quot; на заглавной странице? Дело в том, что на первый взгляд, очень интересен опубликованные конспекты по математическому анализу, но они &amp;quot;непроверяемы&amp;quot;? Это что значит? В них могут содержаться ошибки?&lt;br /&gt;
*: Именно это и значит. Данные конспекты пишут студенты, чтобы было проще готовиться к экзаменам. Они основаны на проводимых лекциях, сами студенты их перечитывают, но иногда в них могут содержаться случайные факты, ошибки, да и вообще они могут быть неполными. Хотя конспекты именно по математическому анализу достаточно хорошие. [[Участник:Shersh|Дмитрий Коваников]] 10:43, 4 мая 2015 (GST)&lt;br /&gt;
&lt;br /&gt;
самая крутая заглавная страница в мире, ИМХО&lt;br /&gt;
&lt;br /&gt;
'''Коллеги, пожалуйста, давайте без вандализма. Я понимаю, что первое апреля и хочется пошутить. Но шутки должны быть смешными и к месту.'''&lt;br /&gt;
&lt;br /&gt;
* [http://inkscape.org/ http://inkscape.org/] — программа для рисования в векторе. Подходит для изображения графов, марковских цепей, схем из функциональных элементов и т.п. [[Участник:Rybak|Андрей Рыбак]] 23:01, 17 января 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* черт, на вики-конспектах какая-то проблема со временем. В комментариях показывает одно, в последних изменениях - другое.(сообщение написано в 4:42) --[[Участник:Dgerasimov|Дмитрий Герасимов]] 08:42, 12 июня 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Кто сломал тег wikitex???111 --[[Участник:Dgerasimov|Дмитрий Герасимов]] 14:44, 10 октября 2011 (UTC)&lt;br /&gt;
&lt;br /&gt;
* Кому вообще понадобились эти java-технологии? --[[Участник:Komarov|Андрей Комаров]] 00:43, 18 февраля 2012 (GST)&lt;br /&gt;
** Зря Андрей ты так про Джаву, зря-зря-зря... --[[Участник:Rybak|Андрей Рыбак]] 23:30, 29 февраля 2012 (GST)&lt;br /&gt;
** Это для первого курса 153N и второго 252N --[[Участник:Borisov|Borisov]] 02:04, 4 марта 2012 (GST)&lt;br /&gt;
** За год там ничего не появилось. Удалил. -- [[Участник:Dmitriy D.|Dmitriy D.]] 08:14, 9 января 2013 (GST)&lt;br /&gt;
&lt;br /&gt;
== Ссылки на источники ==&lt;br /&gt;
&lt;br /&gt;
* Почему бы не организовать ссылки на источники, как в Википедии? С тегом &amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt; --[[Участник:Rybak|Андрей Рыбак]] 20:13, 29 апреля 2012 (GST)&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;
&lt;br /&gt;
Что-то тут не так. Мне кстати последний вариант больше нравится.&lt;br /&gt;
&lt;br /&gt;
== 2-SAT Выполнимость ==&lt;br /&gt;
&lt;br /&gt;
Рассмотрим функцию, записанную в виде 2-КНФ (КНФ Крома). &amp;lt;br&amp;gt; &lt;br /&gt;
2-SAT выполнимость данной функции - эта задача распределения аргументов таким образом, чтобы результат данной функции был равен 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Решения ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рассмотрим любой дизъюнкт функции: (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
Несложно заметить, что это равнозначно записи !a =&amp;gt; b и !b =&amp;gt; a &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: !a =&amp;gt; b и !b =&amp;gt; a для каждого дизъюнкта функции (a || b) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы данная задача 2-SAT имела решение, необходимо и достаточно, чтобы для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Доказательство ==&lt;br /&gt;
&lt;br /&gt;
Пусть 2-SAT имеет решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что не может быть такого, чтобы для любой переменной x из вершины x можно достичь !x и из вершины !x можно достичь x одновременно. (!x =&amp;gt; x &amp;amp;&amp;amp; x =&amp;gt; !x) &amp;lt;br&amp;gt;&lt;br /&gt;
Тогда чтобы из !x достичь x (!x =&amp;gt; x) x было верным, x должен быть равен 1. С другой стороны для того, чтобы из x достичь !x (!x =&amp;gt; x) было верным, x должен быть равен 0. Отсюда следует противоречие. &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть для любой переменной x из вершины x нельзя достичь !x и из вершины !x нельзя достичь x одновременно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем, что этого достаточно, чтобы 2-SAT имело решение. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть из !x можно достичь x, но из вершины x нельзя достичь !x. Докажем, что из x не достижимо такой y, что из y достижимо !y. (т.е. x =&amp;gt; y =&amp;gt; !y. (x = 1, y = 0)). &amp;lt;br&amp;gt;&lt;br /&gt;
Если из x =&amp;gt; y, то (!x || y), отсюда следует (!y =&amp;gt; !x). Тогда x =&amp;gt; y =&amp;gt; !y =&amp;gt; !x. Следовательно x =&amp;gt; !x. Противоречие.&lt;/div&gt;</summary>
		<author><name>GARiK Carrot</name></author>	</entry>

	</feed>