我真的很困惑为什么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.

===============>>#1 票数: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或其他东西,它将无法正常工作。

===============>>#2 票数:3

从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(并且可能是有充分理由的)。

  ask by Rave translate from so

未解决问题?本站智能推荐: