算法设计 《算法概论》第八章 8.10 习题解答

题目描述:

Proving NP-completeness by generalization. For each of the problems below, prove that it is NPcomplete by showing that it is a generalization of some NP-complete problem we have seen in this chapter.
利 用 推 广 的 方 法 证 明 NP -完 全 性 。 对 以 下 每 个 问 题 , 请 通 过 证 明 它 是 本 章 某 个 NP- 完 全 问 题 的 推 广 说 明 它 是 NP- 完 全 的 。

(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 edges of 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).
(a) 子图同构:给定两个无向图G和H,判断G是否为H的一个子图(即删除H中的某些顶点或边后,所得的新图最多只需再修改某些顶点的名称,即可与G相同),如果是则返回V(G)到V(H)的相关映射。

(b) LONGEST PATH: Given a graph G and an integer g, find in G a simple path of length g.
(b) 最长路径:给定图G和整数g,求G中一条长为g的简单路径。

(c) MAX SAT: Given a CNF formula and an integer g, find a truth assignment that satisfies at least g clauses.
(c) 最大SAT:给定一个CNF公式和数g,求满足其中至少g个子句的真赋值。

(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.
(d) 稠密子图:给定一个图和两个整数a和b,求G中的a个顶点,使得它们之间最少有b条边。

(e) SPARSE SUBGRAPH: Given a graph and two integers a and b, find a set of a vertices of G such that there are at most b edges between them.
(e) 稀疏子图:给定一个图和两个整数a和b,求G中的a个顶点,使得它们之间最多有b条边。

(f) SET COVER. (This problem generalizes two known NP-complete problems.)
(f) 集合覆盖。(该问题衍生了两个著名的NP-完全问题)

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


解答:

(a) 子图同构:
假设图G是一个环,G和H的顶点数相同。如果G是H的子图,那么H中必然存在Ruarata回路。因此子图同构问题实际上是Rudrata回路问题的推广,故而子图同构问题是NP-完全的。

(b) 最长路径:
如果图G中顶点数为|V|,令g = |V| - 1,这时此问题就可以看做是Rudrata回路问题。因此最长路径问题实际上是Rudrata回路问题的推广,故而最长路径问题是NP-完全的。

(c) 最大SAT:
假设给定的CNF公式中子句个数为n。当g = n时,最大SAT问题就是SAT问题。因此最大SAT问题实际上是SAT问题的推广,故而最大SAT问题是NP-完全的。

(d) 稠密子图:
令b = a * (a - 1) / 2,这时问题就转化成了:G中的a个顶点,使得这些顶点两两都存在相邻的边。此时问题就转化成了最大团问题。因此稠密子图T问题实际上是最大团问题的推广,故而稠密子图问题是NP-完全的。

(e) 稀疏子图:
如果b = 0,那么稀疏子图问题可看做是独立集问题,因此稀疏子图问题实际上是独立集问题的推广,故而稀疏子图问题是NP-完全的。

(f) 集合覆盖:
集合覆盖问题是指:包含一个集合U以及U内元素构成的若干各小类集合S,目标是找到S 的一个子集,该子集满足所含元素包含了所有的元素且使小类集合个数最少。
如果使U为图中边的集合E,E中元素构成的Si为与顶点i相邻的所有边。这样,集合覆盖问题就转化为了最小顶点覆盖问题。因此集合覆盖问题实际上是最小顶点覆盖问题的推广,故而集合覆盖问题是NP-完全的。

(g) 可靠网络:
根据提示,可以联系到TSP问题。dij为1时表示两个城市有边,dij为2时表示两个城市没有边;预算b为城市的数目,rij为2,说明任意两点在一个环上。这样,可靠网络问题就转化为了TSP问题。因此可靠网络问题实际上是TSP问题的推广,故而可靠网络问题是NP-完全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值