A. Prim和Dijkstra演算法的區別
在圖論中,Prim演算法是計算最小生成樹的演算法,而Dijkstra演算法是計算最短路徑的演算法。二者看起來比較類似,因為假設全部頂點的集合是V,已經被挑選出來的點的集合是U,那麼二者都是從集合V-U中不斷的挑選權值最低的點加入U,那麼二者是否等價呢?也就是說是否Dijkstra也可以計算出最小生成樹而Prim也可以計算出從第一個頂點v0到其他點的最短路徑呢?答案是否定的,否則就不必有兩個演算法了。
二者的不同之處在於「權值最低」的定義不同,Prim的「權值最低」是相對於U中的任意一點而言的,也就是把U中的點看成一個整體,每次尋找V-U中跟U的距離最小(也就是跟U中任意一點的距離最小)的一點加入U;而Dijkstra的「權值最低」是相對於v0而言的,也就是每次尋找V-U中跟v0的距離最小的一點加入U。
一個可以說明二者不等價的例子是有四個頂點(v0, v1, v2, v3)和四條邊且邊值定義為(v0, v1)=20, (v0, v2)=10, (v1, v3)=2, (v3, v2)=15的圖,用Prim演算法得到的最小生成樹中v0跟v1是不直接相連的,也就是在最小生成樹中v0v1的距離是v0->v2->v3->v1的距離是27,而用Dijkstra演算法得到的v0v1的距離是20,也就是二者直接連線的長度。
B. prim演算法
指的是最小生成樹的一種演算法么,和dijstra演算法思想接近,
但是第一步是先將權最小的邊的兩個點加入以確定set。
然後一步步
從un set加入與這個集合距離最短的點,然後更新這個set到unset的每一點的最短距離,
直到全部加入
C. Prim演算法,求大牛通俗易懂地解釋下為什麼成立。。。
prim演算法就是把點分成兩個集合,一個集合裡麵包含已經加入生成樹的點,另一個包含未加入的,然後不斷在兩個集合之間找最短的邊,直到所有的點都加入到生成樹中,這時候就構成了最小生成樹。
D. 普里姆演算法
可以這么理解:因為最小生成樹是包含所有頂點的所以開始lowcost先儲存到第一個點的所有值,然後執行下面演算法,找到最小值並記錄是第幾個點,比如說這個點是3,這樣有了一條1-3得道路已經確定,現在從3出發找從3出發到其他頂點的路徑,如果這個從3出發到達的路徑長度比從1出發的短,則更新lowcost,這樣使得lowcost保存一直到達該頂點的最短路徑。比如1-4是5,3-4是4,則lowcost從原來的5被改為4。
E. prim演算法是貪心演算法嗎
是F. 普里姆演算法是什麼
普里姆(Prim)演算法,和克魯斯卡爾演算法一樣,是用來求加權連通圖的最小生成樹的演算法。
普里姆演算法(Prim演算法),圖論中的一種演算法,可在加權連通圖里搜索最小生成樹。意即由此演算法搜索到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點(英語:Vertex (graph theory)),且其所有邊的權值之和亦為最小。
該演算法於1930年由捷克數學家沃伊捷赫·亞爾尼克(英語:Vojtěch Jarník)發現;並在1957年由美國計算機科學家羅伯特·普里姆(英語:Robert C. Prim)獨立發現;1959年,艾茲格·迪科斯徹再次發現了該演算法。因此,在某些場合,普里姆演算法又被稱為DJP演算法、亞爾尼克演算法或普里姆-亞爾尼克演算法。
基本思想:
對於圖G而言,V是所有頂點的集合;現在,設置兩個新的集合U和T,其中U用於存放G的最小生成樹中的頂點,T存放G的最小生成樹中的邊。
從所有uЄU,vЄ(V-U) (V-U表示出去U的所有頂點)的邊中選取權值最小的邊(u, v),將頂點v加入集合U中,將邊(u, v)加入集合T中,如此不斷重復,直到U=V為止,最小生成樹構造完畢,這時集合T中包含了最小生成樹中的所有邊。
G. prim演算法是什麼
prim演算法是圖論中的一種演算法。
普里姆演算法(Prim演算法),圖論中的一種演算法,可在加權連通圖里搜索最小生成樹。意即由此演算法搜索到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點(英語:Vertex (graph theory)),且其所有邊的權值之和亦為最小。
簡介
最小生成樹是數據結構中圖的一種重要應用,它的要求是從一個帶權無向完全圖中選擇n-1條邊並使這個圖仍然連通(也即得到了一棵生成樹),同時還要考慮使樹的權最小。
為了得到最小生成樹,人們設計了很多演算法,最著名的有prim演算法和kruskal演算法。教材中介紹了prim演算法,但是講得不夠詳細,理解起來比較困難,為了幫助大家更好的理解這一演算法,本文對書中的內容作了進一步的細化,希望能對大家有所幫助。
H. 什麼是普利姆演算法
Prim演算法:是圖的最小生成樹的一種構造演算法。
假設 WN=(V,{E}) 是一個含有 n 個頂點的連通網,TV 是 WN 上最小生成樹中頂點的集合,TE 是最小生成樹中邊的集合。顯然,在演算法執行結束時,TV=V,而 TE 是 E 的一個子集。在演算法開始執行時,TE 為空集,TV 中只有一個頂點,因此,按普里姆演算法構造最小生成樹的過程為:在所有「其一個頂點已經落在生成樹上,而另一個頂點尚未落在生成樹上」的邊中取一條權值為最小的邊,逐條加在生成樹上,直至生成樹中含有 n-1條邊為止。
如果看不懂還可以找一本數據結構的書看,這個演算法挺簡單的。
btw:其實你有空問,應該有空網路啊~網路就有了。懶得寫,我還是直接從網路過來的~
I. 「prim」 演算法 是誰最先提出在那篇著作裡面提出來的對現在有什麼意義有什麼應用最好詳細點。謝謝
Prim演算法是圖論中求最小生成樹的一種演算法,最早於1930年由捷克數學家Vojtěch Jarník發現;並在1957年由美國計算機科學家Robert C. Prim獨立發現,1959年Edsger Dijkstra再次發現了該演算法,參見論文:
R. C. Prim. Shortest Connection Networks And Some Generalizations
JOSEPH B. KRUSKAL, JR. ON THE SHORTEST SPANNING SUBTREE OF A GRAPH AND THE TRAVELING SALESMAN PROBLEM
該演算法用於求解圖的最小生成樹,所有可轉換為求圖的最小生成樹的問題的應用均可以應用Prim演算法來解決,他本人的論文里也提及了部分應用。
J. prim演算法 復雜度
普里姆演算法(Prim演算法),圖論中的一種演算法,可在加權連通圖里搜索最小生成樹。意即由此演算法搜索到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點,且其所有邊的權值之和亦為最小。該演算法於1930年由捷克數學家沃伊捷赫·亞爾尼克發現;並在1957年由美國計算機科學家羅伯特·普里姆獨立發現;1959年,艾茲格·迪科斯徹再次發現了該演算法。因此,在某些場合,普里姆演算法又被稱為DJP演算法、亞爾尼克演算法或普里姆-亞爾尼克演算法。
演算法簡單描述
1).輸入:一個加權連通圖,其中頂點集合為V,邊集合為E;
2).初始化:Vnew = {x},其中x為集合V中的任一節點(起始點),Enew = {},為空;
3).重復下列操作,直到Vnew = V:
a.在集合E中選取權值最小的邊<u, v>,其中u為集合Vnew中的元素,而v不在Vnew集合當中,並且v∈V(如果存在有多條滿足前述條件即具有相同權值的邊,則可任意選取其中之一);
b.將v加入集合Vnew中,將<u, v>邊加入集合Enew中;
4).輸出:使用集合Vnew和Enew來描述所得到的最小生成樹。
時間復雜度
這里記頂點數v,邊數e
鄰接矩陣:O(v2) 鄰接表:O(elog2v)