线性3SAT:线性时间内的3SAT版本

时间:2012-04-18 16:38:03

标签: algorithm divide-and-conquer

考虑具有以下特殊位置属性的3SAT实例。假设布尔公式中有n个变量,并且它们的编号为1,2,3 .... n,这样每个子句都包含其数字在彼此的+ -10范围内的变量。给出一个线性时间算法来解决这样一个3SAT实例。

我无法解决问题,但我的直觉是,如果我们能够在图表中映射问题,那么可能会解决但不能再进一步......

2 个答案:

答案 0 :(得分:4)

这是一个相对简单的动态编程问题。我将描述一个解决方案,忽略围绕任一边界的相当简单的索引问题。

在第m步后,我们得到了变量的可能值集(m-10,m-9,...,m + 10),这些值可能是到目前为止的解,每个变量都链接到一组值所有先前的变量导致方程1 ... m。

的解

对于第m + 1步,我们取这个可能解集的每个成员,忽略m-10'值,并考虑m + 11'值的每种可能性。如果m + 1'方程为真,我们将其添加到下一个解决方案集,指向我们的历史记录,只有在尚未添加该解决方案模式的情况下。

这让我们为m +第二步做好了准备。

需要n个步骤,每个步骤可以考虑大约200万个可能的情况,所以这是线性的。

(有趣的挑战。修改此算法不仅要找到解决方案,还要计算有多少解决方案。)

答案 1 :(得分:1)

我认为你可以在聚合时间内强行推断它。将条款清单分为两部分。彻底搜索分裂两侧的变量。其中最多有30个,所以要尝试2 ^ 30 = O(1)设置。设置这些变量后,您可以递归求解双方,每个都是一个具有n / 2个变量的独立SAT实例。