我遇到了解决2SAT的多项式算法。我发现2SAT在P中(所有(或许多其他)SAT实例都是NP-Complete)令人吃惊。是什么使这个问题与众不同?是什么使它如此容易(NL完全-甚至比P容易)?
我遇到了解决2SAT的多项式算法。我发现2SAT在P中(所有(或许多其他)SAT实例都是NP-Complete)令人吃惊。是什么使这个问题与众不同?是什么使它如此容易(NL完全-甚至比P容易)?
Answers:
这是根据MGwynne的回答所作的进一步直观而朴实的解释。
使用 -SAT,您只能表达形式含义,其中和是文字。更精确地,每 -clause可以被理解为一对含义:和。如果将设置为true,则必须也为true。如果将设置为false,则必须为false。这样的含义很简单:没有选择,您只有一个⇒ b2 升1 ∨ 升2 ¬ 升1 ⇒ 升2 ¬ 升2 ⇒ 升1一个b b 一个1 ¬ 升升升¬ 升升可能,没有大小写乘法的空间。你可以按照每一个可能产生的影响链,看看你是否曾经获得两个的,并从:如果你对一些做,那么2-SAT公式是不可满足的,否则它是满足的。在这种情况下,可能的蕴涵链数在输入公式的大小上被多项式限制。
使用 -SAT,您可以表示形式含义,其中,和是文字。现在您遇到麻烦了:如果将设置为true,则或必须为true,但是哪个是true?您必须做出选择:您有2种可能性。在这里,可以进行事例乘法,并且在这里发生组合爆炸。一个⇒ b ∨ Ç 一个b ç 一个b Ç
换句话说, -SAT能够表达不止一种可能性的存在,而 -SAT没有这种能力。正是多于一个可能性(例如存在可能性中的情况下 -SAT,中的情况下,可能性 -SAT)引起的NP完全问题的典型的组合爆炸。2 2 3 k - 1 k
考虑使用2-SAT公式进行解析。任何解析器的大小最多为2(注意,如果对于长度为和子句,如果)。大小为2的子句的数量在变量数量上是二次方的。因此,分辨率算法在P中。Ñ ,米≤ 2 Ñ 米
一旦您获得了3-SAT,您将获得越来越大的解决方案,因此一切都变成了梨形:)。
尝试将问题转换为2-SAT。由于您无法使用大小为3的子句,因此您(通常)无法对涉及3个或更多变量的含义进行编码,例如,一个变量是对另外两个变量进行二进制运算的结果。这是一个巨大的限制。
正如Walter所说,2-SAT的子句具有特殊的形式。可以利用它来快速找到解决方案。
实际上,可以在多项式时间内确定SAT实例的几类,而2-SAT只是这些易处理类中的一种。易于处理的原因有三种:
(结构可处理性)可以在多项式时间内求解变量以树状方式交互作用的任何SAT实例类别。多项式的次数取决于类中实例的最大宽度,其中宽度衡量的是实例离树的距离。马克思更精确地表明,如果实例具有有限的亚模宽度,则可以使用分治法在多项式时间内确定类别。
(语言可处理性)可以在多项式时间内求解真假变量模式为“ nice”的任何SAT实例。更准确地说,文字模式定义了一种关系语言,而Schaefer对导致易处理性的六种语言进行了分类,每种语言都有自己的算法。2-SAT构成了六个Schaefer类之一。
(混合易处理性)也有一些实例不属于其他两类,但由于其他原因可以在多项式时间内求解。