Math 布尔公式编码

Math 布尔公式编码,math,np-complete,np,np-hard,satisfiability,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)。对吗?我应该计数还是不计数,并计算编码所需的位数?我找了很多,但在这上面找不到任何东西 我真的不知道SAT是什么,但从维基百科上看,似乎需要为x1-x4分配一些值来保证真实性。真值表如下所示(我认为): 如果

我想知道编码这样的布尔公式需要多少位

@(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)。对吗?我应该计数还是不计数,并计算编码所需的位数?我找了很多,但在这上面找不到任何东西

我真的不知道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

因此,我不确定如何对其进行编码,但这可能会有所帮助?

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

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

Magnus Bjiirk于2009年7月25日撰写的“成功的SAT编码技术”是一篇很好的论文,其中包含了大量有关SAT编码的有用参考资料:

运气好吗?我也在寻找同样的东西,但在任何地方都找不到任何资源或解释。