算法:一个NP问题的证明(课后习题)

来源:互联网 发布:阿里巴巴自创数据库 编辑:程序博客网 时间:2024/05/22 17:31

问题描述:

课后习题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条顶点互不相交的路径。

                (提示:假设所有dij都为1和2,b=n,所有的rij=2。这属于哪个著名的NP-完全问题?)


证明:

(a)令图G 为一个环,环上的顶点数等于图H 的顶点数。那么若G 是H 的同构子图,则说明H 存在Rudrata 回路(经过图中每个顶

         点有且仅有一次的回路)。所以可以判断Rudrata回路事实上是子图同构问题的一个特例。所以子图同构是Rudrata回路的推

         广。

(b)如果令g = V −1,即得到一条Rudrata 路径(经过图中每个顶点有且仅有一次的回路)。所以Rudrata路径可以看做是该问题的

         一个特例。

(c)令 g 为子句的总数,即成SAT问题,所以最大SAT为SAT问题的一个推广。

(d)令b=a(a-1)/2,此时这a 个顶点两两相连,于是即成最大团问题(图中的每个顶点间均有边相连)。

(e)令b = 0,即成最大独立集问题(一个顶点集合中的任意两个顶点间均没有边相连)。

(f) 最小顶点覆盖:每条边所依赖的两个顶点至少有一个在集合中,最小说的是满足前面条件的顶点的集合包含的顶点数最小。

         最小顶点覆盖问题可以看做是将集合覆盖中的集合当做一个点,所以该问题可以看成是最小顶点覆盖问题的推广。

(g)提示中所描述的特例:假设所有dij都为1和2,b=n,所有的rij=2,是一个旅行商问题(TSP)。

         (TSP:给定n个顶点和它们之间两两的距离值,以及预算b,需要确定一条旅行路线,该路线是经过每个顶点一次的环,且总

                       的费用不超过b。)