将n xor表达式翻译成CNF?

时间:2014-02-20 04:01:00

标签: c# algorithm math logic formula

我有n xor表达式:

a xor b xor c xor d...

我想翻译成cnf: cnf的答案可以在这里找到:

http://www.wolframalpha.com/input/?i=a++XOR+b++XOR+c+XOR+d+

我想写一个转换器,但我该如何实现呢?

1 个答案:

答案 0 :(得分:3)

最小CNF表单是一个术语列表,当它们评估为0时,每个术语强制整个CNF为零。如果你改变XOR的任何输入位XOR c XOR ..你改变了输出,所以对于xor,它的区域只对一个比特组合强制0,并且它们有一个指数级的大数 - 有n个输入2 ^(N-1)。你准备好了吗?

鉴于这种解释,您可以通过以下方式构建CNF表格的公式。 (a = 0且b = 0且c = 1且d = 1)=> 0并将其转换为术语(OR或OR或不是d)。然后,您可以为生成0的所有内容执行此操作,并将它们全部放在一起。

如果稍微更改问题,您可以获得更易于管理的解决方案。如果试图给一个坐标求解器提供XOR b XOR c XOR d = 0,你可以引入新的变量来阻止这样的指数爆炸:(一个XOR b = y)和(y XOR c = z)AND(z XOR d = 0)即使(一个XOR b = y)不能很好地归结,结果也不会随着你增加变量的数量而变得更糟。