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="5"|Система уравнений
+
!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="5"|Нормированная система уравнений
+
!colspan="2"|Нормированная система уравнений
 
|-align="center"
 
|-align="center"
! Используя свойства Булевых колец              
+
!Используя свойства Булевых колец  
(<tex>\neg x=1 \oplus x</tex>, <tex>x \oplus x=0</tex>)
+
(<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

Задача:
[math]\mathrm {XORSAT}[/math] (XOR-satisfiability) выполнимость функции — задача распределения аргументов в булевой КНФ функции, записанной в виде XOR-КНФ, таким образом, чтобы результат данной функции был равен [math] 1 [/math].


Описание

Одним из особых случаев [math]\mathrm {SAT}[/math] является класс задач, где каждый конъюнкт содержит операции [math]\oplus[/math] (т. е. исключающее или), а не (обычные) [math]\lor[/math] операторы.(Формально, обобщенная КНФ с тернарным булевым оператором R работает только если [math] 1[/math] или [math] 3[/math] переменные дают [math] \mathtt {true}[/math] в своих аргументах. Конъюнкты,имеющие более [math] 3[/math] переменных могут быть преобразованы в сочетании с формулой преобразования с сохранением выполнимости булевой функции, т. е. [math]\mathrm {XOR}[/math]-[math]\mathrm {SAT}[/math] может быть снижена до [math]\mathrm {XOR}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math])[1]


Это задача Р-класса,так как [math]\mathrm {XOR}[/math]-[math]\mathrm {SAT}[/math] формулу можно рассматривать как систему линейных уравнений по модулю [math]2[/math],которая ,в свою очередь, может быть решена за [math]O(n^3)[/math] методом Гаусса [2].Такое представление возможно на основе связи между Булевой алгеброй и Булевым кольцом [3] и том факте,что арифметика по модулю [math]2[/math] образует конечное поле [4].

Решение XOR-SAT задачи методом Гаусса

Система уравнений
("[math]1[/math]" означает «[math] \mathtt {true}[/math]», "[math]0[/math]" означает «[math] \mathtt {false}[/math]»)

Каждый конъюнкт ведет к одному уравнению.

Переменные Значение
[math] a [/math] [math]\oplus[/math] [math] c [/math] [math]\oplus[/math] [math] d [/math] [math]=1[/math]
[math] b [/math] [math]\oplus[/math] [math]\neg c [/math] [math]\oplus[/math] [math] d [/math] [math]=1[/math]
[math] a [/math] [math]\oplus[/math] [math] b [/math] [math]\oplus[/math] [math]\neg d [/math] [math]=1[/math]
[math] \neg a [/math] [math]\oplus[/math] [math] \neg b [/math] [math]\oplus[/math] [math]\neg c [/math] [math]=1[/math]
[math] \neg a [/math] [math]\oplus[/math] [math] b [/math] [math]\oplus[/math] [math] c [/math] [math] \cong 1 [/math]
Нормированная система уравнений
Используя свойства Булевых колец

([math]\neg x=1 \oplus x[/math], [math]x \oplus x=1[/math])

Переменные Значение
[math] a [/math] [math]\oplus[/math] [math] c [/math] [math]\oplus[/math] [math] d [/math] [math]=1[/math]
[math] b [/math] [math]\oplus[/math] [math] c [/math] [math]\oplus[/math] [math] d [/math] [math]=0[/math]
[math] a [/math] [math]\oplus[/math] [math] b [/math] [math]\oplus[/math] [math] d [/math] [math]=0[/math]
[math] a [/math] [math]\oplus[/math] [math] b [/math] [math]\oplus[/math] [math] c [/math] [math]=1[/math]
[math] a [/math] [math]\oplus[/math] [math] b [/math] [math]\oplus[/math] [math] c [/math] [math] \cong 0 [/math]
Матрица соответствующих коэффициентов
[math]a[/math] [math]b[/math] [math]c[/math] [math]d[/math] Строка
[math]1[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]A[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]B[/math]
[math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]C[/math]
[math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]D[/math]
Преобразования, чтобы сформировать

верхнюю треугольную матрицу

[math]a[/math] [math]b[/math] [math]c[/math] [math]d[/math] Операция
[math]1[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]A[/math]
[math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]C[/math]
[math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]D[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]B[/math]
[math]1[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]A[/math]
[math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]C[/math]
[math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]D[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]B[/math]
[math]1[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]A[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]E=C \oplus A[/math]
[math]0[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]F=D \oplus A[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]B[/math]
[math]1[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]A[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]E[/math]
[math]0[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]G=F \oplus E[/math]
[math]0[/math] [math]0[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]H=B \oplus E[/math]
Преобразования, чтобы сформировать

диагональную матрицу

[math]a[/math] [math]b[/math] [math]c[/math] [math]d[/math] Операция
[math]1[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]0[/math] [math]I=A \oplus H[/math]
[math]0[/math] [math]1[/math] [math]1[/math] [math]0[/math] [math]1[/math] [math]E[/math]
[math]0[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]0[/math] [math]J=G \oplus H[/math]
[math]0[/math] [math]0[/math] [math]0[/math] [math]1[/math] [math]1[/math] [math]H[/math]

Вычислительная сложность

Формула с [math]2[/math]-мя дизъюнктами может быть неудовлетворена(красный),[math]3[/math]-[math]\mathrm {SAT}[/math](зелёный),[math]\mathrm {XOR}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math](синий) ,или/и [math]1[/math]-[math]\mathrm {in}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math], в зависимости от количества переменных со значением [math] \mathtt {true}[/math] в [math]1[/math]-м (горизонтальном) и втором (вертикальном) конъюнкте.

Поскольку [math]a\ XOR\ b\ XOR\ c[/math] принимает значение [math] \mathtt {true}[/math],если и только если [math]1[/math] из [math]3[/math] переменных {[math]a[/math],[math]b[/math],[math]c[/math]} принимает значение [math] \mathtt {true}[/math] ,каждое решение в [math]1[/math]-[math]\mathrm {in}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math] задачи для данной КНФ-формулы является также решением [math]\mathrm {XOR}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math] задачи, и ,в свою очередь,обратное также верно.
Как следствие, для каждой КНФ-формулы, можно решить [math]\mathrm {XOR}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math]-задачу и на основании результатов сделать вывод, что либо [math]3[/math]-[math]\mathrm {SAT}[/math] задача решаема или, что [math]1[/math]-[math]\mathrm {in}[/math]-[math]3[/math]-[math]\mathrm {SAT}[/math]-задача нерешаема.
При условии ,что P- и NP-классы не равны,ни [math]2[/math]-,ни Хорн-,ни [math]\mathrm {XOR}[/math]-[math]\mathrm {SAT}[/math] не являются задачи NP-класса,в отличии от [math]\mathrm {SAT}[/math].

См. также

Примечания

  1. Alfred V. Aho; John E. Hopcroft; Jeffrey D. Ullman.The Design and Analysis of Computer Algorithms. Addison-Wesley.; здесь: Thm.10.4, 1974.
  2. Метод Гаусса
  3. Связь между Булевой алгеброй и Булевым кольцом
  4. Конечное поле

Источники информации