[英]How is 2-CNF SAT is in P, while 3-CNF SAT is in NPC?
我真的很困惑为什么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-CNF SAT在P.
因为有一个多项式算法来解决它。
证明的草图:
请注意,2-CNF中的任何子句都采用A => B
的形式,其中A
和B
是变量或它们的否定。 因此,我们可以告诉该条款说当A为真时,它强制B为真。 这也意味着B是虚假的力量A是假的。 我们以后必须考虑。
现在,您可以逐个获取变量,并搜索它是否过渡性地强制自身为负值(A => B => C => ... =>非A),反之亦然(非A =>。 .. => A)。 如果第一个是真的,A必须是假的; 如果第二个,A是真的。 如果两者兼而有之,公式是不可满足的。
如果您没有找到任何使公式不可满足的变量,那么它是可以满足的。
请注意,这种“野蛮”算法并不是使用图中强连接组件的实际算法,我建议您继续阅读。 然而,它是多项式的(搜索一个变量显然是O(N ^ 2),因为你考虑O(N)子句一次强制一个变量,你考虑O(N)变量,这意味着算法是多项式) 。 请注意,我们在子句中最多包含两个文字是至关重要的。 如果条款是A => B or C
或其他东西,它将无法正常工作。
从CNF SAT到3-CNF SAT的规范缩减是采用类似lit_1或lit_2或......或lit_n的条款,并将其替换为两个子句lit_1或lit_2或......或者lit_ {floor(n / 2)}或者var,lit_ {floor(n / 2)+ 1} OR ... OR lit_n OR NOT var。 如果你试图以这种方式破解一个带有三个文字的子句,你将得到另一个带有三个文字的子句,因此相同的证明不适用于2-CNF SAT(并且可能是有充分理由的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.