[算法概论]习题8.12

xiaoxiao2021-02-28  114

今天写了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完全问题。

转载请注明原文地址: https://www.6miu.com/read-27584.html

最新回复(0)