有時總將兩者搞混,兩者都是基於貪心策略,且都是將圖中頂點劃分為兩部分,每次取最小值。
在這裡對兩者的演算法做乙個區分。
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的變數,每次都要把到...