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

Posted

技术标签:

【中文标题】2-CNF SAT如何在P中,而3-CNF SAT在NPC中?【英文标题】:How is 2-CNF SAT is in P, while 3-CNF SAT is in NPC? 【发布时间】:2012-01-18 01:19:15 【问题描述】:

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

【问题讨论】:

请注意,P 是 NPC 的子集。证明 2-CNF SAT 在 P 中同时证明它在 NPC 中。 既然它在P里,它也在NP里,所以我必须努力展示它的NP,让它在NPC里,所以东西可能同时在P和NPC里?请回答 呃,是的,对不起,我回答得太快了,把 NP 和 NPC 混为一谈 :) 对不起 :) 当然不是 NPC。你理解的实际问题是你不能将SAT减少到2-SAT,减少会失败。 @antti.huima “请注意,P 是 NPC 的子集”。仅当 P=NP 时才成立。 P是NP的子集,我们不知道它是否是NPC的子集。 @Undreren 是的,你是对的。我不知道我在 12 月一直在想什么。 【参考方案1】:

为什么 2-CNF SAT 在 P

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

证明的粗略草图:

请注意,2-CNF 中的任何子句都采用A => B 的形式,其中AB 是变量或它们的否定。因此,我们可以看出这个子句说当 A 为真时,它强制 B 为真。这也意味着B是假的,迫使A是假的。我们必须稍后考虑。

现在,您可以一个一个地取一个变量,并搜索它是否会传递地强制自己成为它的负数(A => B => C => ... => non A),反之亦然(non A => ... => A)。如果第一个为真,则 A 必须为假;如果是第二个,A 为真。如果两者都存在,则公式不可满足。

如果没有发现任何使公式不可满足的变量,则它是可满足的。

请注意,这种“残酷”算法并不是使用图的强连通分量的实际算法,我建议您继续阅读。然而,它是多项式的(对一个变量的搜索显然是 O(N^2),因为考虑 O(N) 子句一次强制一个变量,并且考虑 O(N) 个变量,这意味着算法是多项式的) .请注意,我们在一个子句中最多有两个文字这一事实至关重要。如果子句是A => B or C 之类的,就不会那么好用了。

【讨论】:

你是怎么想出来的,我对此有点迷茫,我只是在关注这本书,我只是想知道这一点还是从书中接受它。我的意思是,如果它是在测试中给出的,我可能会尝试证明它的 NPC,(从 SAT 或 3-CNF-SAT 减少它)。如果他们像我一样在 P 中展示它,我会完全迷路【参考方案2】:

从 CNF SAT 到 3-CNF SAT 的规范简化是采用像 lit_1 OR lit_2 OR ... OR lit_n 这样的子句,并用两个子句 lit_1 OR lit_2 OR ... OR lit_floor(n/2 ) OR var, lit_floor(n/2) + 1 OR ... OR lit_n OR NOT var。如果您尝试以这种方式破解一个包含三个文字的子句,您将得到另一个包含三个文字的子句,因此相同的证明不适用于 2-CNF SAT(并且可能有充分的理由)。

【讨论】:

以上是关于2-CNF SAT如何在P中,而3-CNF SAT在NPC中?的主要内容,如果未能解决你的问题,请参考以下文章

2-SAT

如何将 3-SAT 简化为独立集?

2-sat

UVALive - 3211 (2-SAT + 二分)

2-SAT

可计算性:具有有限子句数的 SAT 公式