XOR-SAT — различия между версиями
(→Решение XOR-SAT задачи методом Гаусса) |
(→Решение XOR-SAT задачи методом Гаусса) |
||
| Строка 15: | Строка 15: | ||
{| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
|+ | |+ | ||
| − | !colspan=" | + | !colspan="2"|Система уравнений |
|-align="center" | |-align="center" | ||
!("<tex>1</tex>" означает «<tex> \mathtt {true}</tex>», "<tex>0</tex>" означает «<tex> \mathtt {false}</tex>») | !("<tex>1</tex>" означает «<tex> \mathtt {true}</tex>», "<tex>0</tex>" означает «<tex> \mathtt {false}</tex>») | ||
| Строка 42: | Строка 42: | ||
{| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
|+ | |+ | ||
| − | !colspan=" | + | !colspan="2"|Нормированная система уравнений |
|-align="center" | |-align="center" | ||
| − | ! | + | !Используя свойства Булевых колец |
| − | (<tex>\neg x=1 \oplus x</tex>, <tex>x \oplus x= | + | (<tex>\neg x=1 \oplus x</tex>, <tex>x \oplus x=1</tex>) |
| | | | ||
|-align="center" | |-align="center" | ||
| Строка 67: | Строка 67: | ||
|} | |} | ||
| + | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
| + | |+ | ||
| + | !colspan="6"|Матрица соответствующих коэффициентов | ||
| + | |-align="center" | ||
| + | !class="dark"| <tex>a</tex> | ||
| + | !class="dark"| <tex>b</tex> | ||
| + | !class="dark"| <tex>c</tex> | ||
| + | !class="dark"| <tex>d</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| | ||
| + | |Строка | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>B</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>C</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>D</tex> | ||
| + | |} | ||
| + | |||
| + | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
| + | |+ | ||
| + | !colspan="6"|Преобразования, чтобы сформировать | ||
| + | верхнюю треугольную матрицу | ||
| + | |-align="center" | ||
| + | !class="dark"| <tex>a</tex> | ||
| + | !class="dark"| <tex>b</tex> | ||
| + | !class="dark"| <tex>c</tex> | ||
| + | !class="dark"| <tex>d</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| | ||
| + | |Операция | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>C</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>D</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>B</tex> | ||
| + | |} | ||
| + | |||
| + | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
| + | |+ | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>C</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>D</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>B</tex> | ||
| + | |} | ||
| + | |||
| + | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
| + | |+ | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>E=C \oplus A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>F=D \oplus A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>B</tex> | ||
| + | |} | ||
| + | |||
| + | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
| + | |+ | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>A</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>E</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>G=F \oplus E</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>H=B \oplus E</tex> | ||
| + | |} | ||
| + | {| class="wikitable" align="center" style="color: blue; background-color:#ffffcc;" cellpadding="10" | ||
| + | |+ | ||
| + | !colspan="6"|Преобразования, чтобы сформировать | ||
| + | диагональную матрицу | ||
| + | |-align="center" | ||
| + | !class="dark"| <tex>a</tex> | ||
| + | !class="dark"| <tex>b</tex> | ||
| + | !class="dark"| <tex>c</tex> | ||
| + | !class="dark"| <tex>d</tex> | ||
| + | !class="green"| | ||
| + | |Операция | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>I=A \oplus H</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>E</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>0</tex> | ||
| + | | <tex>J=G \oplus H</tex> | ||
| + | |-align="center" | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>0</tex> | ||
| + | !class="dark" style="font-weight:normal"| <tex>1</tex> | ||
| + | !class="green" style="font-weight:normal" style="background: #ddffdd;"| <tex>1</tex> | ||
| + | | <tex>H</tex> | ||
| + | |} | ||
</center> | </center> | ||
Версия 13:39, 5 января 2017
| Задача: |
| (XOR-satisfiability) выполнимость функции — задача распределения аргументов в булевой КНФ функции, записанной в виде XOR-КНФ, таким образом, чтобы результат данной функции был равен . |
Содержание
Описание
Одним из особых случаев является класс задач, где каждый конъюнкт содержит операции (т. е. исключающее или), а не (обычные) операторы.(Формально, обобщенная КНФ с тернарным булевым оператором R работает только если или переменные дают в своих аргументах. Конъюнкты,имеющие более переменных могут быть преобразованы в сочетании с формулой преобразования с сохранением выполнимости булевой функции, т. е. - может быть снижена до --)[1]
Это задача Р-класса,так как - формулу можно рассматривать как систему линейных уравнений по модулю ,которая ,в свою очередь, может быть решена за методом Гаусса [2].Такое представление возможно на основе связи между Булевой алгеброй и Булевым кольцом [3] и том факте,что арифметика по модулю образует конечное поле [4].
Решение XOR-SAT задачи методом Гаусса
| Система уравнений | |
|---|---|
| ("" означает «», "" означает «»)
Каждый конъюнкт ведет к одному уравнению. |
|
| Переменные | Значение |
| Нормированная система уравнений | |
|---|---|
| Используя свойства Булевых колец
(, ) |
|
| Переменные | Значение |
| Матрица соответствующих коэффициентов | |||||
|---|---|---|---|---|---|
| Строка | |||||
| Преобразования, чтобы сформировать
верхнюю треугольную матрицу | |||||
|---|---|---|---|---|---|
| Операция | |||||
| Преобразования, чтобы сформировать
диагональную матрицу | |||||
|---|---|---|---|---|---|
| Операция | |||||
Вычислительная сложность
Поскольку принимает значение ,если и только если из переменных {,,} принимает значение ,каждое решение в --- задачи для данной КНФ-формулы является также решением -- задачи, и ,в свою очередь,обратное также верно.
Как следствие, для каждой КНФ-формулы, можно решить ---задачу и на основании результатов сделать вывод, что либо - задача решаема или, что ----задача нерешаема.
При условии ,что P- и NP-классы не равны,ни -,ни Хорн-,ни - не являются задачи NP-класса,в отличии от .
См. также
Примечания
- ↑ Alfred V. Aho; John E. Hopcroft; Jeffrey D. Ullman.The Design and Analysis of Computer Algorithms. Addison-Wesley.; здесь: Thm.10.4, 1974.
- ↑ Метод Гаусса
- ↑ Связь между Булевой алгеброй и Булевым кольцом
- ↑ Конечное поле
Источники информации
- Википедия — Boolean satisfiability problem
- Cook, Stephen A.Proceedings of the 3rd Annual ACM Symposium on Theory of Computing: 151–158, 1971.
