几个NP-完全问题的证明

1.吝啬SAT问题

8.3吝啬SAT问题是这样的:给定一组子句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值——如果该赋值存在。证明吝啬问题是NP-完全问题。
证明:
易得吝啬SAT问题是NP问题。
已知SAT是NP完全问题,因此,只要能把SAT归约到吝啬SAT问题,即可证明。
归约过程:假设SAT问题有n个变量,即等价于k=n的吝啬SAT问题。命题得证。

2. 4 SAT问题

8.8.在精确的4SAT问题中,输入为一组子句。每个子句都是恰好4个文字的析取,且每个变量最多在每个子句中出现一次,目标是求它的满足赋——如果赋值存在。
证明
易得4SAT问题是NP问题。
已知3SAT问题是NP完全问题。现将3SAT问题归约到4SAT上。归约时,一要保证每个变量在子句中只出现一次,二要让每个子句恰好有4个文字。
归约过程:对于任意一个3SAT实例, 若一个文字出现多次,可将该文字删减为一次或零次(即肯定或否定同时出现)。再添加一写无关的辅助变量。这样即可将每个子句的文字扩充到4个。

3.碰撞集问题

8.9.在碰撞集问题中,给定一组集合{S1,S2,S3….Sn}和预算b,我们希望求一个所有的Si相交且规模不大于b的集合H,当然,前提是这样的集合确实存在。
证明:
易证,这是个NP问题
将最小顶点覆盖归约到碰撞集问题。现假设求图G的最小顶点覆盖,我们可以建立一个碰撞集实例。其中S1,S2,��,Sn即是图G的各条边,比如
{v1,v2},{v3,v4}….。这样,就可以把求G的最小顶点覆盖归约成,求这|E|个集合的碰撞集H。其中H的大小b就是最小顶点覆盖。已知最小顶点覆盖是一个NP完全问题,所以该问题是一个NP完全问题。

4.利用推广的方法证明NP-完全性。

8.10.
(a)子图同构:给定两个作为输入的无向图G和H,判断G是否与H的某个子图同构,且如果是,返回由V(G)到V(H)的相关映射。
证明:
令图G为一个环,环上的顶点数等于图H的顶点数。那么若G是H的同构子 图,则说明 H 存在 Rudrata 回路。因此, Rudrata 回路事实上是子图同构问题的一个特例。

(b)最长路径:给定图G和整数g,求G中一条长为g的简单路径。
证明:
令g = |V| - 1, 则实际上在求一条Rudrata 路径。

(c)最大SAT:给定一个CNF公式和整数g,求满足其中至少g个子句的真赋值。
证明:
令g为子句的总数,则成了SAT问题。

(d)稠密子图:给定一个图和两个整数a,b,求G中的a个顶点,使得他们之间最少有b条边。
证明:
令b= a(a−1)/2,则问题变成了最大团问题。

(e)稀疏子图:给定一个图和两个整数a和b,求G中的a个顶点,使得它们之间最多有b条边。
证明:
令b=0, 则问题变成了最大独立集问题。

(f)集合覆盖
证明:
集合覆盖就是最小顶点覆盖的一个推广。将G={V,E},以及最小顶点覆盖k,推广成集合覆盖的全集S,子集Ci,以及集合覆盖k。其中令S = V;Ci为与顶点i有连边的边集。则集合覆盖k等于最小顶点覆盖k。

(g)可靠网络:给定两个n*n矩阵,一个距离矩阵dij,一个连接需求矩阵rij以及预算b。我们要求一个图G={{1,2,3,….N},E}使得:(1)其中所有边的总代价不超过b;(2)在任意两个不同的顶点i和j之间,存在rij条顶点互不相交的路径。
证明:
假设所有dij都为1或2,b=n,所有的rij=2, 则这是一个TSP问题。

5.NODE-DISJOINT PATH

8.23.在结点互不相交的路径问题中,输入是一个无向图。该图的一些结点具有特殊标记:节点s1,s2,…,sk 被标记为“出发点”,另一些相同数量的节点t1,t2,…,tk 被标记为“目的地”。目标是对所有的i=1,2,…,k,求由si 到ti 的k条互不相交的路径(即不包含相同节点的路径)。请证明该问题是NP完全的。
证明:
易证,该问题是一个NP问题。
现从 3SAT 问题开始归约。
归约过程如下:
i.对于包含 m 个子句和 n 个变量的 3SAT 公式,使用 k = m + n 个出发点和目的地。 每个变量 v对应于一个节点对(sx,tx) ,每个子句 c 对应于一个节点对(sc,tc) 。
ii.对每个 3SAT 子句(v1∨v2∨v3) ,引入6个中间节点:v1,v2,v3,~v1,~v2,~v3。即对于出现在子句中的每个文字都有一个节点与之对应,同时还有另一个节点对应于该文字的补。
iii.注意到如果Sc到Tc的路径经过某个中间节点(代表变量x在子句中出现过),则其他路径不能再经过该结点。对于任意子句c=(v1∨v2∨v3),分别将sc与vi、vi与tc连结起来形成三条路径,因为任意vi为真都使得c为真。
iv.对于每个变量x,将sx与所有x串联起来,再连向 tx ,从而形成一条路径。再将sx与所有 ~x 串联起来,连向 tx,又形成一条路径。在这两条路径中,必然要选择其中一条,如果有任意子句选择了,则其余子句就不能再选择 v。
下面举 一个简单的例子,假设要验证 CNF:(x ∨ y ∨ z)(~x ∨ y ∨ ~z )是否可以被满足,令u = ( x ∨ y ∨ z ) , v = ( ~x ∨ y ∨ ~z ) :
i. k = 2+3 = 5, 则有“出发点”集 = {sx,sy,sz,su,sv}, “目的地”集 = {tx,ty,tz,tu,tv}。
ii.对于子句u,加入中间结点x,y,z,~x,~y,~z。 对于子句v加入中间节点,~x,y,~z,x,~y,z。
iii.在子句u中,将su分别与x,y,z连起来,再连向tu。在子句v中,将sv分别与~x,y,~z连起来,再连向tv。
iv.将sx跟所有的x串连起来,再连向tx。将sx跟所有的~x串连起来,再连向tx。同理,y,z也是。
可得 NODE-DISJOINT PATH 问题如下图:
这里写图片描述
已知3SAT问题是一个NP-完全问题,所以NODE-DISJOINT PATH 问题也是一个NP-完全问题。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值