《算法概论》第八章NP完全问题部分习题解

来源:互联网 发布:不同的网络用户类型 编辑:程序博客网 时间:2024/06/07 14:29

8.10利用推广的方法证明NP-完全性。对以下每个问题,通过证明它是本章某个NP-完全问题的推广说明它是NP-完全的。
(a)子图同构:给定两个作为输入的无向图G和H,判断G是否为H的一个子图(即删了H中的某些顶点和边后,得到的新的图最多只要再修改某些顶点的名字,便可与G相同),且如果是,返回由V(G)和V(H)的相关映射。
(b)最长路径:给定图G和整数g,求G中一条长为g的简单路径。
(c)最大SAT:给定一个CNF公式和整数g,求满足其中至少g个子句的真赋值。
(d)稠密子图:给定一个图和两个整数a和b,求G中的a个顶点,使得它们之间最少有b条边。
(e)稀疏子图:给定一个图和两个整数a和b,求G中的a个顶点,使得他们之间最多有b条边。
(f)集合覆盖。(该问题衍变出了两个著名的NP-完全问题)
(g)可靠网络:给定两个nxn矩阵,一个距离矩阵dij,一个连接需求矩阵rij以及预算b。我们要求一个图G=({1,2……,n},E)使得:(1)其中所有边的总代价不超过b;(2)在任意两个不同顶点i和j之间,存在rij条顶点互不相交的路径。(Hint:假设所有的dij都为1或2,b=n,所有的rij=2.)


答案:
(a)Rudrata回路事实上是子图同构的问题。我们先令图G为一个环,环上的顶点数等于图H的顶点数。如果G是H的同构的子图,则说明H存在Rudrata回路。所以Rudrata回路事实上是子图同构的问题。
(b)只要设g=|V|-1,就可得到一条Rudrata路径。
(c)设g=子句的总数目,便是SAT。
(d)若为最大团问题,我们可以设b=a*(a-1)/2,此时,这a个顶点两两相连。
(e)设b=0,便可得到最大独立集问题。
(f)可以看作是最小顶点覆盖的一个推广
(g)假设所有的dij都为1或2,b=n,所有的rij=2。此特例即为一个TSP。


8.22
8.22


答案:
(a) 可以从通过顶点覆盖的减少证明是NP完全。给出了一个顶点覆盖实例(G,b),其中G是一个无向图,我们想要一个小于等于b顶点覆盖,我们构建了一个实例(G,b)
FAS如下:
如果G =(V,E)有n个顶点v1,…,vn,然后使G0 =(v0,E0)是一个有向图,包含2n个顶点W1,W’ 1,…,WN,W’ N,和N + 2 | E |(有向)边,(WI,i)所有i = 1,2,…,n(w’i,wj)和(w’j,wj)每(vi,vj)∈E。由于FAS是可以在多项式时间内验证的,所以该问题属于NP问题。
(b)设G中一个大小为b的顶点覆盖为C,对于任意定点vi属于C,设其在G’中相对应的顶点为wi和w’i,那么将边(wi,w’i)添加进E’中,将C中的每个顶点进行处理,得到了相应的E’,而E’就是要求解的FAC问题的结果,它的大小为b,这是因为对于顶点wi和wi’,当去掉(wi,wi’)之后所有与wi相邻的边都不可能位于任何一个环中,这是因为wi,不存在出的边,同理可得与wi’相邻的边都不可能位于任何一个环中,这是因为wi’,不存在入的边。
(c)对于G中的任意一条边(vi,vj),设边中顶点在G中对应着wi,wi’,wj,wj’,相对应的就是边(wi,wi’),(wj,wj’),(wi’,wj)以及(wj’,wi),如果E’是G’的一个大小为t的FAS,那么这四条变中至少有一个是属于E’的否则就会形成环,那么边e一定有一个端点是属于{wi,wj},如果wi是e的端点,那么将vi,加入到C中,否则将vj加入到C中,那么C就是G的与一个 大小最大为t的顶点覆盖。

本次作业我选了两道题。通过复习课本和查阅相关资料,完成了以上两题的解答,由于我用的是英文版本的教材,所以将其翻译成中文时,借助了一些资料和自己的理解,其问题或答案可能有不正确的地方,如发现,还望指正。

阅读全文
0 0
原创粉丝点击