這兩種演算法都是基於貪心的,但是這兩個演算法的目的不同:
prim演算法是將圖生成乙個一棵樹,這棵樹的邊權值和是這個圖能生成的所有樹中最小的。
dijksra演算法是求圖中某個節點到所有其他節點的分別的最短路徑:即求的是一組路徑,每條路徑都從起點出發通向圖中的乙個不同頂點,當然,其中某些路徑可能具有公共邊。
下面是分別以a為起點的prim演算法和dijksra演算法的結果如下:
而以d為起點的prim演算法的結果和上圖一樣,dijksra演算法的執行結果,如下:
kruskal演算法
floyd演算法、wsrshall演算法
可參見:
prim
dijkstra
目的最小生成樹
單源最短路
讓所有邊權值之和最小
讓每個頂點到源點路徑上的權值最小
貪心,不斷更新每個頂點到整棵樹的距離
貪心,不斷更新每個頂點到源點的距離
複雜度o(n^2),可堆優化到o(nlogn)
o(n^2),可堆優化到o(nlogn)
當圖無權時,求最短路,dijkstra演算法 可用bfs代替
Prim演算法 與 dijkstra演算法
有時總將兩者搞混,兩者都是基於貪心策略,且都是將圖中頂點劃分為兩部分,每次取最小值。在這裡對兩者的演算法做乙個區分。prim演算法是解決圖的 最小生成樹 問題,在每次迴圈中,選取乙個點在s中,另乙個點在v s中,且兩點權值最小,直到v s為空。dijkstra演算法是解決圖的 最短路徑 問題,即從某...
dij與prim演算法
兩種演算法本質是相同的。都是從某乙個點開始進行延伸,不斷更新乙個dis值,直到所有的點都被遍歷到,從而求出乙個最短路或者是乙個樹的邊權的最小總和。樸素演算法都是n 2,都可以採用堆優化處理,降低複雜度到mlogn.但是在一張完全圖上跑,此時m n 2,樸素演算法反而快一些。而且常數小。相比較於spf...
Dijkstra演算法與Prim演算法的異同
dijkstra演算法用於構建單源點的最短路徑樹 mst 即樹中某個點到任何其他點的距離都是最短的。例如,構建地圖應用時查詢自己的座標離某個地標的最短距離。可以用於有向圖,但是不能存在負權值 bellman ford可以處理負權值 dijkstra 選初始點r,q是無向圖g中所有點v的權值優先佇列,...