此处的目标是使用最少数量的子句和变量,在多项式时间内将任意SAT问题简化为3-SAT。我的问题是出于好奇。不那么正式,我想知道:“从SAT到3-SAT的'最自然的'减少是什么?”
现在,我在教科书中经常看到的减少是这样的:
首先以您的SAT实例为例,并应用Cook-Levin定理将其简化为电路SAT。
然后,通过将子句替换为gates,通过将SAT电路标准缩减为3-SAT来完成工作。
在这种情况下,由于库克-莱文定理的最初应用,最终产生的3-SAT子句最终看起来几乎与您最初使用的SAT子句不同。
有人可以跳过中间电路步骤,直接进入3-SAT,再看看如何直接进行简化吗?我对直接减少n-SAT的特殊情况感到满意。
(我猜想在计算时间和输出大小之间会有一些折衷。显然,简并的解决方案是只解决SAT问题,然后发出琐碎的3,尽管幸运的是,除非P = NP,否则它是不可接受的。 -SAT实例...)
编辑:基于棘轮的答案,现在很明显,将n-SAT的减少是微不足道的(在发布之前,我真的应该以为再仔细一点)。如果有人知道更一般情况的答案,我将这个问题保留一小段时间,否则我将只接受棘轮的答案。