2-CNF SAT如何在P中,而3-CNF SAT在NPC中?

时间:2011-12-11 21:34:25

标签: algorithm np-complete np

我真的很困惑为什么2-CNF SAT在P中,而3-CNF SAT在NPC中。我读了CLRS,我理解他们如何证明3-CNF SAT在NPC中。我不能使用从SAT到2-CNF-SAT相同的可还原性来证明2-CNF-SAT在NPC中。我不明白为什么2-CNF SAT在P中。

2 个答案:

答案 0 :(得分:13)

  

为什么2-CNF SAT在P

因为有一个多项式算法来解决它。

证明的粗略草图:

请注意,2-CNF中的任何子句都采用A => B格式,其中AB是变量或它们的否定。因此,我们可以告诉该条款说当A为真时,它强制B为真。这也意味着B是虚假的力量A是假的。我们稍后要考虑。

现在,您可以逐个获取变量,并搜索它是否过渡性地强迫自己为负数(A => B => C => ... =>非A)和副反之亦然(非A => ... => A)。如果第一个是真的,A必须是假的;如果第二个,A是真的。如果两者兼而有之,公式是不可满足的。

如果您没有找到任何使公式不可满足的变量,则可以满足。

请注意,这种“野蛮”算法并不是使用图中强连接组件的实际算法,我建议您继续阅读。然而,它是多项式的(搜索一个变量显然是O(N ^ 2),因为你考虑O(N)子句一次强制一个变量,你考虑O(N)变量,这意味着算法是多项式) 。请注意,我们在子句中最多包含两个文字是至关重要的。如果条款是A => B or C或其他内容,则效果不会很好。

答案 1 :(得分:3)

从CNF SAT到3-CNF SAT的规范缩减是采用类似lit_1或lit_2或......或lit_n的条款并将其替换为两个子句lit_1或lit_2或......或lit_ {floor(n / 2) )OR var,lit_ {floor(n / 2)+ 1} OR ... OR lit_n OR NOT var。如果你试图以这种方式破解一个带有三个文字的子句,你将得到另一个带有三个文字的子句,所以相同的证明不适用于2-CNF SAT(并且可能有充分的理由)。