我不太明白为什么几乎所有的SAT求解器都使用CNF而不是DNF。在我看来,使用DNF可以更轻松地解决SAT问题。毕竟,您只需要浏览一组隐含项,并检查其中的一个是否既不包含变量也不包含其否定值。对于CNF,没有像这样的简单过程。
我不太明白为什么几乎所有的SAT求解器都使用CNF而不是DNF。在我看来,使用DNF可以更轻松地解决SAT问题。毕竟,您只需要浏览一组隐含项,并检查其中的一个是否既不包含变量也不包含其否定值。对于CNF,没有像这样的简单过程。
Answers:
由于Karp,从SAT到3SAT的教科书减少将任意布尔公式转换为多项式大小的“等效” CNF布尔公式,使得在且仅当是可满足才是可满足的。(严格来说,这两个公式并不等效,因为具有其他变量,但是的值实际上并不取决于这些新变量。)Φ ' Φ ' Φ ' Φ '
从任意布尔公式简化为DNF公式的类似还原方法尚不可知。所有已知的转换都会使公式的大小成倍增加。而且,除非P = NP,否则不可能减小!
人们说了大多数重要的事情,但我想强调几点。
因此,SAT求解器使用CNF是因为它们的目标是可满足性,并且任何公式都可以转换为CNF,同时保持线性时间的可满足性。
2013年9月7 日:添加了更多答案,请检查页面底部
基本上,DNF公式是 clause子句的析取。。。∨ Ç 米,其中每个子句Ç 我 = 升我,1 ∧ 。。。∧ 升我,ķ是文字的一个一起选择。让我们把一个条款ç 我矛盾的当且仅当它包含一个文本升和它的否定¬ 升。显而易见,每个不冲突的子句仅编码2 n - k公式的解决方案。因此,整个DNF只是解决方案的列举。一个公式可能具有指数级的多个解,因此相应的DNF公式可能具有指数级的多个子句。尝试转换此CNF公式:
与其对应的DNF公式:您将获得过多的子句。一言以蔽之:CNF是紧凑的,而DNF不是。CNF是隐式的,而DNF是显式的。
以下问题是NP完全的:给定DNF实例,是否存在伪造所有子句的变量分配?
我刚刚意识到另一件事,希望它应该得到一个单独的答案。这个问题的推论并不完全正确。二进制决策图(BDD)可以看作是DNF的紧凑/精确表示。已经有一些使用BDD的SAT求解器,但我相信它们不再出现。
Darwiche和Marquis有一篇不错的论文,研究布尔函数的各种表示形式的不同属性。
这个进一步的答案是作为除以零的评论对我以前的回答的反馈。
正如Diverbyzero所说,CNF和DNF确实是同一枚硬币的两个面,这的确是事实。
当您必须找到满意的作业时,DNF是显式的,因为它明显地向您显示了其满意的作业(DNF可满足性属于),而CNF则是隐式的,因为它会缠绕并缠绕以将其令人满意的作业从您的眼睛隐藏起来(CNF可满足性为N p - ç ö 米p 升ë 吨ë)。我们不知道有任何程序能够将任何CNF公式解包和展开为某种可满足要求的DNF公式,而该公式不是指数大小的。这就是我先前回答的重点(其示例旨在显示指数级的爆炸,尽管可以肯定的是,这种示例并非最佳选择)。
相反,当您必须找到一个伪造的任务时,CNF是显式的,因为它明显地向您展示了其伪造的任务(CNF伪造性属于),而DNF是隐式的,因为它缠绕并缠绕起来以掩盖其伪造的任务(DNF伪造性)是N P - c o m p l e t e)。我们不知道有任何程序能够将任何DNF公式解包和展开为某些可指数化的CNF公式,而该公式的大小不是指数。
一方面,我们有矛盾,即公式无法满足。在相反的末端,我们有重言式,即不可伪造的公式。在中间,我们有既可令人满意又可伪造的公式。
在这种情况下,我们变得更加清楚,为什么CNF可满足性和DNF可伪性在计算硬度方面是等效的。因为它们实际上是一个非常相同的问题,因为基本任务是完全相同的:判断多个集合的并集是否等于所有可能性的空间。这样的任务将我们引向了更广阔的计算领域,在我的拙见中,这是值得探索的途径之一,以期希望在这些问题上取得不可忽视的进步(我怀疑对基于分辨率的求解器的进一步研究可能最终会带来突破性的理论进步,同时它肯定还会继续带来令人惊讶的实际进步)。
此类任务的困难在于,这些集合以包含-排除方式疯狂地重叠。
这种重叠的存在恰恰是计数工作难以解决的地方。此外,我们让这些集合重叠的事实是允许我们拥有紧凑的公式(其解决方案空间却成倍增长)的原因。
我决定将这个线程中的所有这些答案(尤其是Giorgio Camerani的答案)都变成一个漂亮的表格,以便一目了然地看到二元性:
问题的最短答案:根据上表,只能通过指数时间显示通过DNF的可满足性(求解SAT)。