我正在研究SAT优化问题的一个特殊子集。对于那些不熟悉SAT和相关主题的人,这里是related Wikipedia article。
TRUE=(a OR b OR c OR d) AND (a OR f) AND ...
没有NOTs,它是联合正常形式。这很容易解决。但是我正在尝试来最小化真正的赋值数以使整个语句成立。我找不到解决这个问题的方法。
我想出了以下解决方法:
你有什么想法/意见吗?你能想出其他可行的方法吗?
答案 0 :(得分:9)
此问题也是NP-Hard。
可以显示Hitting Set的东减:
点击设置问题:给定集S1,S2,...,Sn
和数字k
:选择大小为S
的集k
,以便每个{ {1}} Si
中有一个元素s
,S
位于s
。 [替代定义:每个Si
和Si
之间的交集不为空。
<强>减少强>:
对于点击集合的S
实例,构建问题的实例:(S1,...,Sn,k)
其中(S'1 AND S'2 And ... S'n,k)
是S'i
中的所有元素,带有OR。 S'i中的这些元素是公式中的变量。
<强>证明:强>
击中组 - &gt;这个问题:如果设置了一个hittins实例Si
,那么通过将所有S
的元素赋值为true,公式就会满足S
元素,因为对于每个k
,有一些变量S'i
位于v
和S
中,因此也位于Si
中。
此问题 - &gt;点击集合:构建S'i
,其中所有元素都是真的[与点击集合相同的想法 - >这个问题]。
由于您正在为此寻找优化问题,它也是NP-Hard,如果您正在寻找一个精确的解决方案 - 您应该尝试指数算法