NP-полнота задачи о выполнимости булевой формулы в форме КНФ — различия между версиями
(→Доказательство принадлежности классу NPH) |
(→Доказательство принадлежности классу NPH) |
||
Строка 27: | Строка 27: | ||
* Второй этап - переписать формулу, которая представляет собой логическое '''И''' и '''ИЛИ''' литералов, в виде произведения дизъюнктов, т.е. привести ее к КНФ. Введение новых переменных позволяет провести это преобразование за время, полиномиально зависящее от размера исходной формулы. Рассмотрим дерево разбора произвольной формулы. Листья этого дерева будут соответствовать литералам, а узлы - логической операции '''И''' или '''ИЛИ''' над двумя его потомками. | * Второй этап - переписать формулу, которая представляет собой логическое '''И''' и '''ИЛИ''' литералов, в виде произведения дизъюнктов, т.е. привести ее к КНФ. Введение новых переменных позволяет провести это преобразование за время, полиномиально зависящее от размера исходной формулы. Рассмотрим дерево разбора произвольной формулы. Листья этого дерева будут соответствовать литералам, а узлы - логической операции '''И''' или '''ИЛИ''' над двумя его потомками. | ||
# Для узла с меткой '''И''' соответствующая КНФ получается как конъюнкция ('''И''') всех дизъюнктов двух подформул <tex> \alpha </tex> и <tex> \beta </tex>, уже находящихся в КНФ. | # Для узла с меткой '''И''' соответствующая КНФ получается как конъюнкция ('''И''') всех дизъюнктов двух подформул <tex> \alpha </tex> и <tex> \beta </tex>, уже находящихся в КНФ. | ||
− | # Для узла с меткой '''ИЛИ''' нужно ввести новую переменную. Добавляем ее во все дизъюнкты левого операнда <tex> \alpha </tex> и ее отрицание во все дизъюнкты правого операнда <tex> \beta </tex>. Заметим, что формула <tex> \alpha \vee \beta </tex> выполнима тогда и только тогда, когда выполнима <tex> (\alpha \vee y) \wedge (\beta \vee \neg y), </tex> где <tex> y </tex> - новая переменная. После чего, воспользовавшись законами преобразования в каждой формуле в скобках, получим формулы в форме КНФ: <tex> \alpha \vee y = ((...)\wedge(...)\wedge ... \wedge(...)) \vee y = (...\vee y)\wedge(...\vee y)\wedge...\wedge(...\vee y). </tex> | + | # Для узла с меткой '''ИЛИ''' нужно ввести новую переменную. Добавляем ее во все дизъюнкты левого операнда <tex> \alpha </tex> и ее отрицание во все дизъюнкты правого операнда <tex> \beta </tex>. Заметим, что формула <tex> \alpha \vee \beta </tex> выполнима тогда и только тогда, когда выполнима <tex> (\alpha \vee y) \wedge (\beta \vee \neg y), </tex> где <tex> y </tex> - новая переменная. После чего, воспользовавшись законами преобразования в каждой формуле в скобках, получим формулы в форме КНФ: <tex> \alpha \vee y = ((...)\wedge(...)\wedge ... \wedge(...)) \vee y = (...\vee y)\wedge(...\vee y)\wedge...\wedge(...\vee y). </tex> Аналогично преобразуем <tex> \beta \vee \neg y </tex>. |
Каждый раз новая формула увеличивается не более, чем на количество листьев в поддереве, а значит максимальный размер формулы <tex> \omega </tex> можно представить как ''(число листьев) * (число вершин)'', что соответствует оценке работы алгоритма <tex> O(|\phi|^2) </tex>. Таким образом, условия сведения выполнены, и действительно <tex> CNFSAT \in NPH </tex>. | Каждый раз новая формула увеличивается не более, чем на количество листьев в поддереве, а значит максимальный размер формулы <tex> \omega </tex> можно представить как ''(число листьев) * (число вершин)'', что соответствует оценке работы алгоритма <tex> O(|\phi|^2) </tex>. Таким образом, условия сведения выполнены, и действительно <tex> CNFSAT \in NPH </tex>. | ||
Теорема доказана. | Теорема доказана. |
Версия 19:24, 19 марта 2010
Содержание
Определения
- Литералом является переменная или отрицание переменной. Например, или .
- Дизъюнктом называется логическое ИЛИ одного или нескольких литералов. Например,
- Говорят, что формула записана в конъюнктивной нормальной форме (КНФ), если представляет собой логическое И дизъюнктов.
Определение
SAT — задача о выполнимости булевой формулы в форме КНФ.
в КНФ,Теорема
, то есть задачаДоказательство
Для доказательства теоремы необходимо установить два факта:
Доказательство принадлежности классу NP
В качестве сертификата выберем множество
, представляющее собой набор из нулей и единиц. Верификатору останется подставить эти значения в качестве аргументов в формулу и проверить, выдает ли она единицу. Длина сертификата и время работы верификатора, очевидно, удовлетворяют условиям полиномиальности. Таким образом,Доказательство принадлежности классу NPH
Выполним сведение по Карпу задачи к задаче . Для этого необходимо построить функцию , вычислимую за полиномиальное время от длины входа, которая выполняла бы преобразование , где в КНФ. Заметим, что в общем случае время построения эквивалентной формулы в форме КНФ может оказаться больше полиномиального. В частности, длина формулы может вырасти экспоненциально, и тогда время порождения тоже экспоненциально вырастет. Однако нам достаточно предъявить формулу , которая будет выполнима тогда и только тогда, когда выполнима исходная формула . При этом формулы могут оказаться не эквивалентными, ввиду, например, добавления новых переменных.
Итак, опишем действия функции
.- На первом этапе все отрицания спускаются вниз по дереву выражения, так что в формуле остаются только отрицания переменных. Булева формула превращается в логические И и ИЛИ литералов. Это преобразование дает формулу, эквивалентную исходной, и занимает время, как максимум, квадратичное относительно длины этой формулы. Для этого используются законы Де Моргана и закон двойного отрицания.
- Второй этап - переписать формулу, которая представляет собой логическое И и ИЛИ литералов, в виде произведения дизъюнктов, т.е. привести ее к КНФ. Введение новых переменных позволяет провести это преобразование за время, полиномиально зависящее от размера исходной формулы. Рассмотрим дерево разбора произвольной формулы. Листья этого дерева будут соответствовать литералам, а узлы - логической операции И или ИЛИ над двумя его потомками.
- Для узла с меткой И соответствующая КНФ получается как конъюнкция (И) всех дизъюнктов двух подформул и , уже находящихся в КНФ.
- Для узла с меткой ИЛИ нужно ввести новую переменную. Добавляем ее во все дизъюнкты левого операнда и ее отрицание во все дизъюнкты правого операнда . Заметим, что формула выполнима тогда и только тогда, когда выполнима где - новая переменная. После чего, воспользовавшись законами преобразования в каждой формуле в скобках, получим формулы в форме КНФ: Аналогично преобразуем .
Каждый раз новая формула увеличивается не более, чем на количество листьев в поддереве, а значит максимальный размер формулы
можно представить как (число листьев) * (число вершин), что соответствует оценке работы алгоритма . Таким образом, условия сведения выполнены, и действительно .Теорема доказана.