2SAT — различия между версиями
(Изменен порядок последних трех разделов.) |
м (→Второй пример: Исправлен tex) |
||
| Строка 91: | Строка 91: | ||
Построим ориентированный граф со следующими множествами вершинам и ребер: | Построим ориентированный граф со следующими множествами вершинам и ребер: | ||
| − | множество вершин V = \{a, b, c, \overline a, \overline b, \overline c\}, </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> 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>. | ||
Версия 19:49, 18 января 2016
| Задача: |
| (2-satisfiability) выполнимость функции — задача распределения аргументов в булевой КНФ функции, записанной в виде 2-КНФ (КНФ Крома), таким образом, чтобы результат данной функции был равен . |
Содержание
Алгоритм решения
Рассмотрим любой дизъюнкт функции: . Несложно заметить, что это равнозначно записи .
Построим ориентированный граф, где вершинами будут аргументы и их отрицание, а ребрами будут ребра вида: и для каждого дизъюнкта функции .
| Теорема: |
Для того, чтобы данная задача имела решение, необходимо и достаточно, чтобы для любой переменной из вершины нельзя достичь и из вершины нельзя достичь одновременно. . |
| Доказательство: |
|
Докажем достаточность: Пусть имеет решение. Докажем, что не может быть такого, чтобы для любой переменной из вершины можно достичь и из вершины можно достичь одновременно. . Тогда чтобы из достичь было верным), должен быть равен . С другой стороны для того, чтобы из достичь было верным), должен быть равен 0. Отсюда следует противоречие. Докажем необходимость: Пусть для любой переменной из вершины нельзя достичь и из вершины нельзя достичь одновременно. Докажем, что этого достаточно, чтобы имело решение. Пусть из можно достичь , но из вершины нельзя достичь . Докажем, что из не достижимо такой , что из достижимо . (т.е. . Если из , то , отсюда следует . Тогда . Следовательно . Противоречие. |
Теперь мы можем собрать весь алгоритм воедино:
- Построим граф импликаций.
- Найдём в этом графе компоненты сильной связности за время , где — количество вершин в графе (удвоенное количество переменных), а — количество ребер графа (удвоенное количество дизъюнктов).
- Пусть — это номер компоненты сильной связности, которой принадлежит вершине . Проверим, что для каждой переменной вершины и лежат в разных компонентах, т.е. . Если это условие не выполняется, то вернуть "решение не существует".
- Если , то переменной выбираем значение , иначе — .
Компоненты сильной связности найдем за , затем проверим каждую из переменных за . Следовательно асимптотика .
Примеры решения 2SAT
Первый пример
Рассмотрим следующую функцию:
Данная функция эквивалентна функции .
Построим ориентированный граф со следующими множествами вершинам и ребер: множество вершин множество ребер .
Рассмотрим в графе следующие пути:
- .
Т.к. , то .
Т.к. и , то .
Значения может быть любым, т.к. все вершины, из которых можно добраться в имеют значение ноль.
Ответ: или .
Второй пример
Рассмотрим следующую функцию:
Данная функция эквивалентна функции
Построим ориентированный граф со следующими множествами вершинам и ребер: множество вершин V = множество ребер .
Заметим следующий путь: .
Отсюда следует, что .
Следовательно по ранее доказанной теореме, у данной функции решений нет.
Ответ: Решений нет.
Использование 2SAT
Решение может потребоваться в следующих задачах:
- латинские квадраты,
- квазигруппы,
- числа Рамсея,
- система Штейнера,
- проектирование протоколов (пример: для сетевых коммуникаций),
- электронная коммерция (Электронные аукционы и автоматизированные брокеры,
- теории кодирования, криптографии,
- проектирование и тестирование лекарств (мед. препаратов).