Answers:
据我了解,您在问两个问题:(1)是否有比朴素的蛮力更聪明的SAT算法,以及(2)在解决NP完全问题时仅给出是/否答案的算法没有真正找到解决方案。我将按顺序回答这两个问题。
(1)完全可以在没有暴力的情况下解决问题,即无需天真地尝试所有可能性。以您的示例为例,现代的完整SAT解算器可以应用巧妙的算法来推断或证明某些(部分)分配不会导致解决方案,因此他们甚至不检查该部分。
更一般而言,即使是NP难题也经常表现出某种算法立足点,这使我们比蛮力设计算法更快。本研究领域是精确(指数)算法。这样的算法花费指数时间,但是仍然比幼稚算法快。例如,您可以在大约解决TSP时间,其中是要访问的城市数。该方法甚至无法缩放到中等值,但是由于Held&Karp的存在,经典的动态编程时间算法。对于一般技术,请参见例如branch&bound。n n O (2 n n 2)
(2)存在用于NP完全问题的“预言算法”,仅输出YES / NO而没有显式证书。例如,考虑路径问题:
(路径问题)给定一个图和一个整数,在个顶点上是否有一条简单路径?ķ ģ ķ
上面的问题很容易看出是NP完全的。在[1]中给出了该问题的算法。该算法本身仅给出对问题的是/否答案,但是我们可以使用其他技巧来构造实际的路径本身。更一般地,当给出这样的“ oracle算法”时,可以使用组合组测试中的工具来提取证人本身。k
[1]威廉姆斯,瑞安。“ 在时间内找到长度为路径。” 信息处理快报109.6(2009):315-318。出版商链接,PDFO ∗(2 k)