1632
правки
Изменения
2SAT
,rollbackEdits.php mass rollback
{{Задача|definition == <b><tex>\mathrm {2SAT}</tex></b> (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой [[КНФ|КНФ]] функции, записанной в виде [[Специальные_формы_КНФ|2-SAT Выполнимость ==КНФ (КНФ Крома)]], таким образом, чтобы результат данной функции был равен <tex> 1 </tex>.}}
Построим [[Основные_определения_теории_графов|ориентированный граф]], где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: <tex>\overline a \to b </tex> и <tex> \overline b \to a </tex> для каждого дизъюнкта функции <tex> a \vee b </tex>.
#Построим граф импликаций.
#<i>Найдём в этом графе [[Отношение_связности,_компоненты_связности#Сильная связность | компоненты сильной связности]] за время <tex>O(N + M)</tex></i>, где <tex> N </tex> — количество вершин в графе (удвоенное количество переменных), а <tex> M </tex> — количество ребер графа (удвоенное количество дизъюнктов).
#Пусть <tex>comp[v]</tex> — это номер компоненты сильной связности, которой принадлежит вершине <tex>v</tex>. Проверим, что для каждой переменной <tex>x</tex> вершины <tex>x</tex> и <tex>\overline x</tex> лежат в разных компонентах, т.е. <tex>comp[x] \ne comp[\overline x]</tex>. Если это условие не выполняется, то вернуть <i>решение не существует</i>.
#Если <tex>comp[x] > comp[\overline x]</tex>, то переменной <tex>x</tex> выбираем значение <tex> \mathtt {true}</tex>, иначе — <tex> \mathtt {false}</tex>.
Построим ориентированный граф со следующими множествами вершинам и ребер:множество вершин <tex> V = \{a, b, c, \overline a, \overline b, \overline c\}, </tex>множество ребер <tex> E = \{(\overline a, b), (\overline b, a), (\overline a, c), (\overline c, a), (b, c), (\overline c, \overline b), (\overline a, \overline b), (b, a)\}</tex>. Рассмотрим в графе следующие пути:* <tex> \overline a \to b \to a </tex>* <tex> \overline a \to \overline b \to a </tex>* <tex> \overline c \to a </tex>* <tex> a \to c </tex>* <tex> \overline a \to b \to c </tex>. Т.к. <tex> \overline a \to a </tex>, то <tex> a = 1, \overline a = 0 </tex>. Т.к. <tex> a \to c </tex> и <tex> a = 1 </tex>, то <tex> c = 1, \overline c = 0 </tex>. Значения <tex> b </tex> может быть любым, т.к. все вершины, из которых можно добраться в <tex> b </tex> имеют значение ноль. <b> Ответ: </b> <tex> a = 1, b = 0, c = 1 </tex> или <tex> a = 1, b = 1, c = 1 </tex>. === Второй пример === Рассмотрим следующую функцию: <tex>(\overline a \vee c) \wedge(\overline c \vee \overline a) \wedge(a \vee b) \wedge(\overline b \vee a)</tex> Данная функция эквивалентна функции <tex>a \to c \wedge\overline c \to \overline a \wedgec \to \overline a \wedgea \to \overline c \wedge\overline a \to b \wedge\overline b \to a \wedgeb \to a \wedge\overline b \to \overline a</tex> Построим ориентированный граф со следующими множествами вершинам и ребер:множество вершин V = <tex>\{a, b, c, \overline a, \overline b, \overline c\}, </tex>множество ребер <tex> 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)\}</tex>. Заметим следующий путь: <tex> a \to c \to \overline a \to b \to a </tex>. Отсюда следует, что <tex> a \to \overline a \to a </tex>. Следовательно по ранее доказанной теореме, у данной функции решений нет. <b> Ответ: </b> Решений нет. == Использование 2SAT == Решение <tex>\mathrm {2SAT}</tex> может потребоваться в следующих задачах: *латинские квадраты<ref> [https://ru.wikipedia.org/wiki/Латинский_квадрат Википедия — Латинские квадраты] </ref>, *квазигруппы<ref>[https://ru.wikipedia.org/wiki/Квазигруппа_(социология) Википедия — Квазигруппы]</ref>,*числа Рамсея<ref>[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 Википедия — Числа Рамсея]</ref>,*система Штейнера<ref>[https://ru.wikipedia.org/wiki/Система_Штейнера Википедия — Система Штейнера]</ref>,*проектирование протоколов (пример: для сетевых коммуникаций),*электронная коммерция (Электронные аукционы и автоматизированные брокеры,*теории кодирования, криптографии,*проектирование и тестирование лекарств (мед. препаратов). == См. также == *[[3CNFSAT | NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ]] == Примечания ==<references/> == Источники информации == *[http://e-maxx.ru/algo/2_sat MAXimal :: algo :: Задача 2-SAT 2SAT (2-CNF) ]*[https://en.wikipedia.org/wiki/2-satisfiability Википедия — 2-satisfiability] [[Категория: Дискретная математика и алгоритмы]] [[Категория: Булевы функции ]]