《算法概论》习题8.10

来源:互联网 发布:人工智能能产生意识吗 编辑:程序博客网 时间:2024/05/17 06:05

8.10. Proving NP-completeness by generalization. For each of the problems below, prove that it is NP-complete by showing that it is a generalization of some NP-complete problem we have seen in this chapter.

(a) SUBGRAPH ISOMORPHISM: Given as input two undirected graphs G and H, determine whether G is a subgraph of H ( that is, whether by deleting certain vertices and edgeso f H we obtain a graph that is, up to renaming of vertices, identical to G), and if so, return the corresponding mapping of V (G) into V (H).

(b) LONGEST PATH: Given a graph G and an integer g,findi n G a simple path of length g.

(c) MAX SAT: Given a CNF formula and an integer g,find a truth assignment that satisfies at least g clauses.

(d) DENSE SUBGRAPH: Given a graph and two integers a and b, find a set of a vertices of G such that there are at least b edges between them.

(e) SPARSE SUBGRAPH: Given a graph and two integers a and b, find a set of a vertices of G such that there are atmost b edges between them.

(f) SET COVER. (This problem generalizes two known NP-complete problems.)

(g) RELIABLE NETWORK: We are given two n×n matrices,a distance matrix dij and a connectivity requirement matrix rij, as well as a budget b; we must find a graph G = ({1,2,...,n},E)  such that (1) the total cost of all edges is b or less and (2)between any two distinct vertices i and j there are rij vertex-disjoint paths. (Hint: Suppose that all dij’s are 1 or 2, b = n,and all rij’s are 2. Which well known NP-complete problem is this ?)

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)可靠网络:给定两个n x n矩阵,一个距离矩阵dij,一个连接需求矩阵rij以及预算b。我们要求一个图G=({1,2,3...,n},E)使得:(1)其中所有边的总代价不超过b;(b)在任意两个不同的顶点i和j之间,存在rij条顶点互不相交的路径。(提示:假设所有dij都为1或2,b=n,所有的rij = 2.想一下这会是哪个著名的NP-完全问题?)


证明:

(a) 令图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) Hint 中所描述的特例即是一个 TSP。