兩種算法都是用於求帶權無向圖的最小生成樹,最小生成樹即代價值最小的樹。最小代價有很多實際的應用,比如鋪電網連通城市節省造價等。
一、Prime算法
俗稱加點法
- 適用於結點少,但是邊數多的圖。
算法思想:
在帶權連通圖中V是包含所有頂點的集合,U是已經在最小生成樹中的節點;
-
初始時,從圖中任意某一頂點v開始,此時集合U={v}(以v到其他頂點的所有邊爲侯選邊);
-
在所有u∈U,w∈V-U的邊(u,w)∈E中找到一條權值最小的邊,將(u,w)這條邊加入到已找到邊的集合,並且將點w加入到集合U中。
-
重複上一操作,當U=V時,就找到了這顆最小生成樹。
例:從結點1出發,構造最小生成樹。
二、Kruskal算法
俗稱加邊法
- 適用於邊數多,但是節點少的圖;
- 當邊的權值可重複時,最小生成樹可能不唯一,但是最小代價值唯一。
算法思想:
- 把n個頂點看成n棵獨立的樹;
- 把所有邊的權值從小到大排序;
- 按權值從小到大選擇邊,邊應該跨立在兩顆不同的樹之間,使這兩棵樹合併爲一棵樹;
- 重複3,直到所有結點都在一棵樹位置,或者一棵樹內有n-1條邊。
例:從結點1出發,構造最小生成樹。