NP-完全问题证明

来源:互联网 发布:魔戒最后之日修改数据 编辑:程序博客网 时间:2024/05/02 14:29

8.3 吝啬SAT问题是这样的:给定一组子句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值,如果该赋值存在。证明吝啬SAT是NP-完全问题。

证明: 因为吝啬SAT问题可以在多项式时间内验证,因此属于NP问题。对于一个SAT问题的实例来说,如果变量的总个数为k,那么肯定满足最多有k个变量为true的约束,成为一个吝啬SAT问题。因此将SAT归约到吝啬SAT问题,可知吝啬SAT是NP-完全问题。


8.8 在精确的4SAT(EXACT 4SAT)问题中,输入为一组子句,每个子句都是恰好4个文字的析取,且每个变量最多在每个子句中出现一次。目标是求它的满足赋值–如果该赋值存在。证明精确的4SAT是NP-完全问题。
证明: 显然4SAT问题也可以在多项式时间内验证,因此属于NP问题。
将3SAT归约到精确4SAT,对于一个3SAT实例,将每个子句中多次出现的同一变量缩减为只出现一次,如果同时存在是非的两次可以去掉,再添加一些Dummy Variables,扩充到4个。


8.9 在碰撞集(HITTING SET)问题中,给定一组集合{S1,S2,...,Sn}和预算b,我们希望求一个所有的Si 相交且规模不超过b的集合H,当然,前提是这样的集合确实存在。换句话说,我们希望对所有的i满足 HSiϕ。请证明该问题是NP-完全的。

证明:多项式时间内验证,NP问题。将最小顶点覆盖归约到碰撞集问题,对于一个最小顶点覆盖实例(G,g),将图G中的每条边作为集合{S1,S2,...,Sn}, 例如S1={V1,V2}S2={V3,V4},规模不超过b即为目标值g,因此求得的碰撞集,正是图G的最小顶点覆盖。