演算法之 普里姆(Prim)演算法

2021-09-24 08:17:29 字數 998 閱讀 7450

普里姆演算法(prim's algorithm)是圖中的一種演算法,可在加權連通圖中搜尋最小生成樹。

該演算法的作用就是根據圖中權值找到連線所有頂點的最短路徑,也就是連線所有頂點的最小權值之和,也是這個加權圖中的最小生成樹。

1.選取權值最小邊的其中乙個頂點作為起始點。

2.找到離當前頂點權值最小的邊,並記錄該頂點為已選擇。

3.重複第二步,直到找到所有頂點,就找到了圖的最小生成樹。

假如我們有 v 表示圖中的頂點個數,e 表示圖中的邊個數。

通過鄰接矩陣圖表示的簡易實現中,找到所有最小權邊共需

使用簡單的二叉堆和鄰接表來表示的話,普里姆演算法的執行時間則可縮減為

如果使用較為複雜的斐波那契堆,則可將執行時間進一步縮短為

根據上面加權連通圖找到最小生成樹。

首先選擇頂點 a 作為起點。頂點 d、f、b 與 a 相連,且 ad 之間的權值最小,因此選擇這條邊。此時 a、d 為已選擇頂點,e、f、b 為待選擇頂點,h、g 為未選擇頂點。

下乙個頂點應選擇離 a、d 權值最小的頂點,因此選擇 ab 這條邊。此時 a、d、b 為已選擇頂點,e、f、g 為待選擇頂點,h 為未選擇頂點。

下乙個頂點應選擇離 a、d、b 權值最小的頂點,因此選擇 de 這條邊。此時 a、d、b、e 為已選擇頂點,f、g、h 為待選擇頂點,沒有未選擇頂點。

下乙個頂點應選擇離 a、d、b、e 權值最小的頂點,因此選擇 eh 這條邊。此時 a、d、b、e、h 為已選擇頂點,f、g 為待選擇頂點,沒有未選擇頂點。

下乙個頂點應選擇離 a、d、b、e、h 權值最小的頂點,因此選擇 fh 這條邊。此時 a、d、b、e、h、f 為已選擇頂點,g 為待選擇頂點,沒有未選擇頂點。

最後,只剩下乙個頂點 g,到頂點 g 的權值最小的是 hg。現在圖中所有頂點都連線了,紅色連線的邊就是最小生成樹,最小生成樹的權值之和為 42。

普里姆演算法就是通過乙個頂點擴散開找權值最小的邊,所經過的頂點和邊就是這個圖的最小生成樹。通過不用的資料結構儲存圖會導致時間複雜度不一致,用鄰接矩陣的時間複雜度是

普里姆(Prim)演算法

普里姆 prim 演算法 網類 template class netgraph 析構函式 void print 列印鄰接矩陣 void minispantree prim prim演算法生成最小生成樹 獲取資料el在頂點表中的位置 template int netgraph getposition ...

普里姆Prim演算法介紹

普里姆 prim 演算法,和克魯斯卡爾演算法一樣,是用來求加權連通圖的最小生成樹的演算法。基本思想 對於圖g而言,v是所有頂點的集合 現在,設定兩個新的集合u和t,其中u用於存放g的最小生成樹中的頂點,t存放g的最小生成樹中的邊。從所有u u,v v u v u表示出去u的所有頂點 的邊中選取權值最...

深度學習普里姆演算法(Prim)

如果你對資料結構了解不深,又想要學習普里姆演算法,建議你看看我這篇,我盡量往細緻的方向寫,如果有些大佬認為我寫的比較囉嗦,請見諒,畢竟我的目的是為了讓資料結構小白能夠在理解普里姆演算法上相對容易一些。由於為了清楚地說明普里姆演算法,可能會犧牲一些嚴謹性,但只講嚴謹的術語會加大理解難度,尤其對於非科班...