Специальные формы КНФ — различия между версиями
(→КНФ в форме Хорна) |
(→КНФ в форме Хорна) |
||
Строка 45: | Строка 45: | ||
*'''Шаг 2.''' | *'''Шаг 2.''' | ||
− | |||
− | |||
− | |||
*:Опустим одиночно стоящие переменные и скобки, в которых значение стало равным <tex>1</tex>. Перейдём к <tex>1</tex> шагу алгоритма. По определению формы Хорна, в каждой из скобок, где мы опустили переменную не больше <tex>1</tex> переменной без отрицания. Либо какая-то из переменных внутри скобки будет иметь отрицание, т.е. при подстановке <tex>0</tex> станет равна <tex>1</tex>, либо мы рассмотрим переменную без отрицания как отдельно стоящую переменную. Значит <tex>1</tex> шаг алгоритма выполнится верно. Будем проделывать алгоритм, начиная сначала, пока <tex>1</tex> шаг не найдёт ответ. | *:Опустим одиночно стоящие переменные и скобки, в которых значение стало равным <tex>1</tex>. Перейдём к <tex>1</tex> шагу алгоритма. По определению формы Хорна, в каждой из скобок, где мы опустили переменную не больше <tex>1</tex> переменной без отрицания. Либо какая-то из переменных внутри скобки будет иметь отрицание, т.е. при подстановке <tex>0</tex> станет равна <tex>1</tex>, либо мы рассмотрим переменную без отрицания как отдельно стоящую переменную. Значит <tex>1</tex> шаг алгоритма выполнится верно. Будем проделывать алгоритм, начиная сначала, пока <tex>1</tex> шаг не найдёт ответ. | ||
− | Обозначим за <tex>N</tex> число переменных | + | Обозначим за <tex>N</tex> число вхождений переменных в формулу. |
− | + | За 1 повторение алгоритма мы присваиваем как минимум одной переменной значение и начинаем проделывать алгоритм для оставшихся переменных, если первый шаг не завершил алгоритм. Число вызовов алгоритма с первого шага линейно зависит от того, сколько на 2 этапе алгоритма одиночных переменных, их может быть не больше N. Так как после каждой итерации алгоритма, мы уменьшаем число этих вхождений хотя бы на 1, то суммарно повторов итерации будет не больше <tex>N</tex>. | |
Каждый из шагов выполняется за время <tex>O(N)</tex>, а подстановок значений в переменные формулы может быть не больше <tex>N</tex> раз, т.к. всего переменных <tex>N</tex>. Получается сложность <tex>O(N^2)</tex>. | Каждый из шагов выполняется за время <tex>O(N)</tex>, а подстановок значений в переменные формулы может быть не больше <tex>N</tex> раз, т.к. всего переменных <tex>N</tex>. Получается сложность <tex>O(N^2)</tex>. | ||
}} | }} |
Версия 12:52, 17 июня 2016
Рассмотрим две формы, с помощью которых можно представить формулы, заданные в конъюнктивной нормальной форме, то есть имеющей вид конъюнкции выражений в скобках, каждое из которых представляет собой дизъюнкцию одного или нескольких литералов. Эти две формы интересны тем, что для них существует алгоритм, который может за полиномиальное время проверить, существует ли набор аргументов, на которых данная функция будет принимать значение , в то время, как для обычной функции, не представленной данной формой, эта задача является NP-полной.
Содержание
КНФ в форме Крома
Определение: |
Конъюнктивная нормальная форма (КНФ) в форме Крома (2-КНФ) (англ. 2-CNF) — это конъюнкция выражений в скобках, каждое из которых представляет собой дизъюнкцию нескольких литералов, количество которых не превышает двух. |
Пример :
Утверждение: |
Существует алгоритм, который за полиномиальное время проверяет, что формулу, заданную в форме Крома, можно удовлетворить. |
|
Утверждение: |
Функцию можно задать в форме Крома выполнено следующее следствие : |
КНФ в форме Хорна
Определение: |
Конъюнктивная нормальная форма (КНФ)в форме Хорна (англ. Horn clause) — это конъюнкция выражений в скобках, каждое из которых представляет собой дизъюнкцию литералов, в которой присутствует не более одного литерала без отрицания. |
Пример:
Каждая скобка представляет собой Дизъюнкт Хорна[1].
Любую формулу можно представить в виде КНФ в форме Хорна. Для этого формулу необходимо преобразовать в конъюнкцию элементарных дизъюнкций и далее каждую дизъюнкцию представить в форме дизьюнкта Хорна.
Утверждение: |
Существует алгоритм, который за полиномиальное время проверяет, что функцию, заданную в форме Хорна, можно удовлетворить. |
Далее будет приведено доказательство, предлагающее алгоритм решения.
Обозначим за Каждый из шагов выполняется за время число вхождений переменных в формулу. За 1 повторение алгоритма мы присваиваем как минимум одной переменной значение и начинаем проделывать алгоритм для оставшихся переменных, если первый шаг не завершил алгоритм. Число вызовов алгоритма с первого шага линейно зависит от того, сколько на 2 этапе алгоритма одиночных переменных, их может быть не больше N. Так как после каждой итерации алгоритма, мы уменьшаем число этих вхождений хотя бы на 1, то суммарно повторов итерации будет не больше . , а подстановок значений в переменные формулы может быть не больше раз, т.к. всего переменных . Получается сложность . |
Утверждение: |
Функцию можно задать в форме Хорна выполнено следующее следствие: |