1. 程式人生 > >生成樹和最小費用生成樹以及Kruskal演算法

生成樹和最小費用生成樹以及Kruskal演算法

Spanning Tree --生成樹

   生成樹是一種特殊通路,在實際應用中具有廣泛意義。

比如:將道路網表示一個圖,則生成樹就表示從某地出發,到達所有其他各地且不繞圈子的直達路徑,就是不經過同一條邊兩次(導航軟體涉及這類演算法)。

   不同的遍歷方法,可以從圖得到不同的生成樹,從不同頂點出發,也得到不同的生成樹。但是,一個連通圖的生成樹一定是原圖的極小連通子圖,這包含原圖所有頂點和 n-1 條邊;而遍歷不連通圖或有向圖得到的一般都是由若干個生成樹組成的一個生成森林。

定義:

    ① 若一個圖的生成子圖是一個樹,則該樹稱為圖的生成樹

    ② 在一個加權圖的所有生成樹中,其邊權之和最小的為最小費用

生成樹(minnmun-cost spanning tree,MST)

    ③ 最小生成樹不是唯一的。

minimun-cost spanning tree 在工程中有著重要的實際意義,例如,要在n個地點之間開通道路,或架設通訊線路,如何使總造價最少,就可以利用這類演算法計算實際問題。

 Kruskal 演算法基本思想:

① 給定有N個頂點的有權圖G=(V,E),定義一個邊和頂點皆為空集的圖T=(∅,∅)為解的集合。

② 依次在集合E中選取權值最小的邊,將其加到T中,若該邊加入後,圖中出現迴路,則將其刪除,選取下一個權值最小的      邊

③ 重複步驟②,直到所有頂點都在同一個連通分量上時 為止。

圖式:


可以把上圖看成是某片地區的小區群落,邊上的權值就表示這些小區之間的距離,電網公司需要在這些小區之間架設 輸電線路,通過該演算法就可以得到一個使總長度最低的線路架設方案。