算法分析与设计:NP完全问题

8.12 The k-SPANNING TREE problem is the following.

Input: An undirected graph G=(V,E)
Output:A spanning tree of G in which each node has degree <= k,if such a tree exits.
Show that for any k>= 2:
(a) k-SPANNING TREE is a search problem.
(b) k-SPANNING TREE is NP-complete.
解:a) k-生成树是指给定一个无向图,找到一个生成树,其中每个节点的度数不超过k。验证任意给定的正解S是否是k生成树的过程,只需要用图搜索算法对S进行搜索,假设通过搜索可以知道S中所有顶点,不包含环,且每个点的度数不超过K,那么S就是K的生成树。同时因k 生成树问题可在多项式时间内验证的,可以通过访问每一个候选的生成树来判定是否存在k生成树,因此是搜索问题。
b) 由于题目的hint已经给出思路,即寻找k-SPANING TREE问题和RUDRATA PATH问题的关系。若k = 2 ,若k生成树存在,则该生成树中每个顶点度数小于等于2,则该生成树是G的一条最长路,且路径P包含了G的所有顶点, k 生成树是一条 Rudrata 路径。而寻找一个 Rudrata路径的搜索是一个NP完全问题。当 k ≥ 2时,寻找K-生成树的问题可以转换为寻找是否存在Rudrata 路径的问题,也就是转换为NP完全问题,因此k生成树是 NP-完全问题。

8.14 Prove that the following problem is NP-complete:given an undirected graph G=(V,E)and an integer k, return a clique of size k as well as an independent set of size k ,proved both exist.

解:假设要求任意图G (V , E) 中大小为 k 的团,可以在图G 中添加 k 个相互独立的顶点,得到新图G ’ 。这新加的 k 个顶点保证了图G ‘存在大小为k 的独立集,同时又不影响到原图的团,使得大小为k的团和独立集军均存在。

你可能感兴趣的:(Algorithms,c++)