演算法概論 8 12 k 生成樹問題

2021-08-03 12:19:59 字數 476 閱讀 6596

一、題目

輸入:無向圖g:=(v,e)

輸出:g的乙個生成樹,其中所有節點度數都不超過k-如果該樹存在

題目a:k-生成樹問題是乙個搜尋問題。 

二、證明

a.給出乙個g的待確定生成樹,想要判斷該生成樹是否為滿足要求的k-生成樹,只需要遍歷每個節點去找每個節點的度數是否小於等於k,且這個判定過程的時間複雜度為o(v)。該過程可以表明該問題是乙個搜尋問題。

b.首先要驗證所找的生成樹是否符合要求,只需要遍歷每個點,檢查其度數即可,時間複雜度為o(v+e),為多項式時間複雜度,因此k-生成樹問題為np問題。使用rudrata歸約,

當k=2時,所要尋找的生成樹其實就是一條經過所有頂點的路徑,只不過相比rudrata路徑而言,這個生成樹是沒有迴路的。那麼rudrata環路問題就可以歸約為尋找乙個k=2的生成樹,在找到這個生成樹之後,加上一條邊使生成樹成為乙個環路,就是要尋找的rudrata環路。因此,k-生成樹問題為np完全問題。

最小生成樹問題, Prim演算法,Kruskal演算法

1.prim演算法 從某個頂點開始,假設v0,設v0在一頂點集合u中,此時頂點集合u只有乙個點v0,選取集合u中的點到與其他點權值最小的乙個邊,並將與之相連的點加入集合u,不斷重複此操作,最後的到一顆最小生成樹。int cost maxv maxv cost u v 表示u,v兩點間權值,兩點無邊則...

prim演算法來解最小生成樹問題

includeusing namespace std int main dis陣列是記錄生成樹到非樹頂點的距離,book記錄生成樹的頂點 int inf 999999 int count 0,sum 0 count用來記錄生成樹中頂點的個數,sum用來儲存路徑之和 int n,m n表示圖的頂點個數...

最小生成樹問題 Prim演算法(C實現)

問題介紹及演算法思想參考 求最小生成樹 普里姆演算法 最小生成樹prim演算法理解 實現 include include define max 100 define maxcost 0x7fffffff int graph max max void prim int graph max int n ...