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