Prim演算法 與 dijkstra演算法

2021-08-19 09:35:31 字數 424 閱讀 9144

有時總將兩者搞混,兩者都是基於貪心策略,且都是將圖中頂點劃分為兩部分,每次取最小值。

在這裡對兩者的演算法做乙個區分。

prim演算法是解決圖的 最小生成樹 問題,在每次迴圈中,選取乙個點在s中,另乙個點在v-s中,且兩點權值最小,直到v-s為空。

dijkstra演算法是解決圖的 最短路徑 問題,即從某一點到其餘各點的最短路徑。在每次迴圈中選取v-s中的點,且其到起點的距離最短,然後用此更新其餘結點的距離,直到v-s為空。

在prim演算法中,兩個for迴圈,乙個是選擇s中結點,乙個是選擇v-s中結點。

但是dijkstra演算法中,第乙個for迴圈僅僅是起乙個計數作用,即最多迴圈n此。

也就是說,prim演算法每次是選擇兩個點,乙個在s,乙個在v-s,讓其距離最短。

而dijkstra演算法是選擇v-s中的乙個點,讓它到起點的距離最短。

Dijkstra演算法與Prim演算法的異同

dijkstra演算法用於構建單源點的最短路徑樹 mst 即樹中某個點到任何其他點的距離都是最短的。例如,構建地圖應用時查詢自己的座標離某個地標的最短距離。可以用於有向圖,但是不能存在負權值 bellman ford可以處理負權值 dijkstra 選初始點r,q是無向圖g中所有點v的權值優先佇列,...

prim 與 dijkstra 的比較

他們的不同之處是 兩個集合u,v u是構成最小生成樹的集合,v原圖的集合 prim 每次都是從u的每個點出發,尋找u集合與v集合最近的距離的點,再將v中的該點加入u中 dijksra從原點出發在v找離該點最近的點 p1,將該距離加入到 dis i 接著以p1為原點開始找 舉個例子就知道他們不能亂來了...

Prim演算法和Dijkstra演算法的異同

之前一直覺得prim和dijkstra很相似,但是沒有仔細對比 今天看了下,主要有以下幾點 1 prim是計算最小生成樹的演算法,比如為n個村莊修路,怎麼修花銷最少。dijkstra是計算最短路徑的演算法,比如從a村莊走到其他任意村莊的距離。2 prim演算法中有乙個統計總len的變數,每次都要把到...