布尔公式编码

时间:2013-04-14 04:28:30

标签: math np-complete np np-hard satisfiability

我想知道编码像

这样的布尔公式需要多少位
@(x1,x2,x3,x4) = (x1 OR x2 OR NOT(x3) OR x4) AND ((NOT)x2 OR x3) AND (x1 OR (NOT)x4)  

@是SAT的一个实例。我认为它是4位,因为可能的组合总数是2(power4)。那是对的吗?我应该计算OR,NOT,和计算编码所需的位数吗?我经常搜索但却找不到任何相关内容。

2 个答案:

答案 0 :(得分:2)

您始终可以将表达式转换为逻辑等效的CNF,同时保留变量的数量。然而,在最坏的情况下,这会产生指数的子句,这对于大多数应用来说至少是不切实际的;-)。因此,通常在SAT中使用其他编码,其使用较少(多项式数)的子句但添加(多项式)数量的变量。通常使用Tseitin Transformation来生成此编码。

请注意,变量的数量不一定衡量编码的效率。在某些情况下,SAT可以通过增加冗余条款等技巧大大加快。因此,当您想要生成有效编码时,您应该查看CNF的结构,而不是变量或子句的数量。

2009年7月25日,Magnus Bjiirk的“成功的SAT编码技术”是一篇很好的论文,其中包含许多有关SAT编码的有用参考资料: http://jsat.ewi.tudelft.nl/addendum/Bjork_encoding.pdf

答案 1 :(得分:0)

我真的不知道SAT是什么,但是从维基百科看来,你需要为x1-x4分配一些保证真相的值。真值表看起来像这样(我想):

如果为false,则parens中的#是导致AND失败的子句

TTTT => T
TTTF => T
TTFT => F (2)
TTFF => F (2)
TFTT => T 
TFTF => T
TFFT => T
TFFF => T
FTTT => F (3)
FTTF => T
FTFT => F (2,3)
FTFF => F (3)
FFTT => F (3)
FFTF => F (1)
FFFT => F (3)
FFFF => T

观察它,似乎有4种情况表达式总是如此:

x1=T,x3=T => T
x1=T,x2=F => T
FTTF => T
FFFF => T

所以我不确定你是如何编码的,但也许这有帮助?