NP-полнота задачи о выполнимости булевой формулы в форме 3-КНФ — различия между версиями
Строка 20: | Строка 20: | ||
* <tex>(x \vee y)</tex> заменим на <tex>(x \vee y \vee z) \wedge (x \vee y \vee \neg z)</tex>. Ясно, что последняя формула выполнима тогда и только тогда, когда выполнима исходная, при любых <tex>z</tex>; | * <tex>(x \vee y)</tex> заменим на <tex>(x \vee y \vee z) \wedge (x \vee y \vee \neg z)</tex>. Ясно, что последняя формула выполнима тогда и только тогда, когда выполнима исходная, при любых <tex>z</tex>; | ||
* <tex>(x)</tex> заменим на <tex>(x \vee y) \wedge (x \vee \neg y)</tex> - свели задачу к предыдущей; | * <tex>(x)</tex> заменим на <tex>(x \vee y) \wedge (x \vee \neg y)</tex> - свели задачу к предыдущей; | ||
− | * Если встречается скобка вида <tex>(x_1 \ldots x_k), k \ge 3</tex>, введем <tex>k-3</tex> новых переменных и заменим нашу скобку на <tex>k-2</tex> скобки: <tex>(x_1 \vee x_2 \vee z_1) \wedge (x_3 \vee \neg | + | * Если встречается скобка вида <tex>(x_1 \ldots x_k), k \ge 3</tex>, введем <tex>k-3</tex> новых переменных и заменим нашу скобку на <tex>k-2</tex> скобки: <tex>(x_1 \vee x_2 \vee z_1) \wedge (x_3 \vee \neg z_1 \vee z_2) \wedge (x_4 \vee \neg z_2 \vee z_3) \wedge \ldots \wedge (x_{k-1} \vee x_k \vee \neg z_{k-3})</tex> |
Версия 17:35, 16 марта 2010
Теорема
, т.е. задача о выполнимости булевой формулы в форме 3-КНФ -полна.
Доказательство
Для того, чтобы доказать
-полноту задачи, необходимо установить следующие факты:- .
- ;
Для того, чтобы доказать первый факт, предъявим сертификат: набор , удовлетворяющий формулу.
Теперь докажем
-трудность . Для этого покажем, что , то есть сводится по Куку к .Рассмотрим один член булевой формулы в форме КНФ (скобку). В форме 3-КНФ этот член должен иметь вид
. Научимся приводить члены вида , , к нужному виду.- заменим на . Ясно, что последняя формула выполнима тогда и только тогда, когда выполнима исходная, при любых ;
- заменим на - свели задачу к предыдущей;
- Если встречается скобка вида , введем новых переменных и заменим нашу скобку на скобки: