【发布时间】:2012-04-30 03:10:46
【问题描述】:
考虑具有以下特殊位置属性的 3SAT 实例。假设布尔公式中有 n 个变量,它们的编号为 1,2,3....n,这样每个子句都包含编号在 +-10 范围内的变量。给出求解此类 3SAT 实例的线性时间算法。
我无法解决问题,但我的直觉是,如果我们可以将问题映射到图表中,那么可能会解决但不能走得更远..
【问题讨论】:
标签: algorithm divide-and-conquer
考虑具有以下特殊位置属性的 3SAT 实例。假设布尔公式中有 n 个变量,它们的编号为 1,2,3....n,这样每个子句都包含编号在 +-10 范围内的变量。给出求解此类 3SAT 实例的线性时间算法。
我无法解决问题,但我的直觉是,如果我们可以将问题映射到图表中,那么可能会解决但不能走得更远..
【问题讨论】:
标签: algorithm divide-and-conquer
我认为您可以在多时间内暴力破解它。将子句列表分成两部分。对拆分两侧的变量进行详尽搜索。最多有 30 个,因此可以尝试 2^30 = O(1) 设置。一旦设置了这些变量,您就可以递归求解两边,每一个都是具有 n/2 个变量的独立 SAT 实例。
【讨论】:
这是一个相对简单的动态规划问题。我将描述一个解决方案,忽略围绕任一边界的相当简单的索引问题。
在第 m 步之后,我们有一组可能的变量值 (m-10, m-9, ..., m+10),它们可能是迄今为止的解决方案,每个都链接到一组值导致方程解的所有先前变量 1..m.
对于第 m+1' 步,我们采用这个可能的解决方案集的每个成员,忽略第 m-10' 值,并考虑第 m+11' 值的每种可能性。如果第 m+1 个方程为真,我们将其添加到下一个解决方案集中,指向我们的历史,前提是该解决方案模式尚未添加。
这让我们为第 m+2 步做好了准备。
需要 n 个步骤,每个步骤可以考虑大约 200 万个可能的情况,所以这是线性的。
(有趣的挑战。修改这个算法,不仅可以找到解决方案,还可以计算有多少解决方案。)
【讨论】: