今天写了NP完全问题的习题8.12
题目如下:
The k-SPANING 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 exists.
Show that for any k >= 2:
(a) k-SPANNING TREE is a search problem.
(b) k-SPANNING TREE is NP-complete.(Hint: Start with k = 2 and consider the relation between this problem and RUDRATA PATH.)
对于第一问(a),要证明k-SPANING TREE问题是一个搜索问题,其实很简单。
对于一个k-spanning tree的实例I和一个待确定的解S,S是G的一颗待确定的k生成树,要验证S是否是k生成树,只需要一一遍历S中的每个顶点,验证是否d(v) <= k 对于任意v∈S恒成立,由于v(S) = v(G),所以时间复杂度为O(v),所以S在多项式时间内是可验证的,所以k-SPANING TREE是一个搜索问题。
至于第二问(b),证明k-SPANING TREE问题是NP完全的,由于题目的hint已经给了我们思路了,所以我们从hint入手,寻找k-SPANING TREE问题和RUDRATA PATH问题的关系。
若k-SPANING TREE问题是NP完全的,则其他所有搜索问题都可以规约到它。我们先思考当k=2的情况,如果对于实例G=(V,E),若k生成树存在,则该生成树中每个顶点度数小于等于2,则该生成树是G的一条最长路,且路径P包含了G的所有顶点,且P的起点与终点的度数为1,显然当k=2时,k生成树问题就是以该生成树的起点和终点为两个端点s,v的Rudrata Path(s,v)问题。
至于当k>2时,我们可以在2-生成树G'上添加其他的边e(e∈G且e∉G')得到G的k生成树,则如果我们可以求出G的2生成树,即求出G的Rudrata Path(s,v),我们也就可以求出G的k生成树。所以综上RUDRATA PATH问题可以规约到k-SPANING TREE问题。
所以k-SPANING TREE是NP完全问题。