最小生成樹算法——Prime算法、kruskal算法

兩種算法都是用於求帶權無向圖的最小生成樹,最小生成樹即代價值最小的樹。最小代價有很多實際的應用,比如鋪電網連通城市節省造價等。

一、Prime算法

俗稱加點法

  • 適用於結點少,但是邊數多的圖。

算法思想:
在帶權連通圖中V是包含所有頂點的集合,U是已經在最小生成樹中的節點;

  1. 初始時,從圖中任意某一頂點v開始,此時集合U={v}(以v到其他頂點的所有邊爲侯選邊);

  2. 在所有u∈U,w∈V-U的邊(u,w)∈E中找到一條權值最小的邊,將(u,w)這條邊加入到已找到邊的集合,並且將點w加入到集合U中。

  3. 重複上一操作,當U=V時,就找到了這顆最小生成樹。

例:從結點1出發,構造最小生成樹。
在這裏插入圖片描述

二、Kruskal算法

俗稱加邊法

  • 適用於邊數多,但是節點少的圖;
  • 當邊的權值可重複時,最小生成樹可能不唯一,但是最小代價值唯一。

算法思想:

  1. 把n個頂點看成n棵獨立的樹;
  2. 把所有邊的權值從小到大排序;
  3. 按權值從小到大選擇邊,邊應該跨立在兩顆不同的樹之間,使這兩棵樹合併爲一棵樹;
  4. 重複3,直到所有結點都在一棵樹位置,或者一棵樹內有n-1條邊。

例:從結點1出發,構造最小生成樹。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章