prim演算法流程圖
『壹』 普里姆演算法是什麼
普里姆(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中包含了最小生成樹中的所有邊。
『貳』 求助解答!!!用普里姆(prim)演算法從右圖中的頂點1開始逐步構造最小生成樹,要求畫出構造的每一步。
•普里姆(Prim)演算法
基本思想
假設N=(V,E)是一個具有n個頂點的連通網,T=(U,TE)是所求的最小生成樹,其中U是T的頂點集,TE是T的邊集。
(1)初始U={u0}(u0∈V),TE=φ;
(2)在所有u∈U, v∈V-U的邊中選一條代價最小的邊(u0,v0)並入集合TE,同時將v0並入U;
(3)重復(2),直到U=V為止。
此時,TE中必含有n-1條邊,則T=(V,{TE})為N的最小生成樹。
『叄』 根據Prim演算法求出圖的最小生成樹(給出生成過程).
解:Floyd演算法的Matlab程序如下:
clear;clc;
n=5; a=zeros(n);
a(1,2)=1;a(1,3)=12;a(1,4)=6;a(1,5)=10;
a(2,3)=8;a(2,4)=9;
a(3,5)=2;
a(4,5)=4;
a=a+a';M=max(max(a))*n^2; %M為充分大的正實數
a=a+((a==0)-eye(n))*M;
path=zeros(n);
for k=1:n
for i=1:n
for j=1:n
ifa(i,j)>a(i,k)+a(k,j)
a(i,j)=a(i,k)+a(k,j);
path(i,j)=k;
end
end
end
end
a, path
Matlab輸出結果:
a =
0 1 9 6 10
1 0 8 7 10
9 8 0 6 2
6 7 6 0 4
10 10 2 4 0
path =
0 0 2 0 0
0 0 0 1 3
2 0 0 5 0
0 1 5 0 0
0 3 0 0 0
『肆』 圖所示是一個無向帶權圖,請分別按Prim演算法和Kruskal演算法求最小生成樹.
•普里姆(Prim)演算法
基本思想
假設N=(V,E)是一個具有n個頂點的連通網,T=(U,TE)是所求的最小生成樹,其中U是T的頂點集,TE是T的邊集。
(1)初始U={u0}(u0∈V),TE=φ;
(2)在所有u∈U,v∈V-U的邊中選一條代價最小的邊(u0,v0)並入集合TE,同時將v0並入U;
(3)重復(2),直到U=V為止。
此時,TE中必含有n-1條邊,則T=(V,{TE})為N的最小生成樹。
注意:1.最小生成樹不唯一。
2.該圖從節點最小開始。
『伍』 普里姆演算法
你要先明白prim演算法的原理,明白原理後看下面的程序要點:
1.程序實現的時候將點分成兩部分,加入集合的和沒有加入集合的;
2.每次從沒有加入集合中找點;
3.對所有沒有加入到集合中的點中,找一個邊權最小的;
4.將邊權最小的點加入集合中,並且修改和加入點相連的沒有加入的點的權,重復第2步,知道所有的點都加入到集合中;
『陸』 誰能幫我畫個PRIM演算法的流程圖
對於這種比較高級的演算法代碼直接看程序會比較蒙,你就光看我的演算法流程吧,prim演算法用的是貪心演算法的思想,即每一步都作出局部的最優解,關於prim演算法為什麼能用貪心演算法的證明,你可以參考《計算機演算法設計與分析》這本書。(我反正不想看那麼無聊的證明,也看不明白,呵呵)。
定義一個集合v 和 a,其中v是全體節點(總節點數為n)的集合,v初始為空。定義一個記錄最小生成數邊數的變數c。
1.在v中任選一個節點,並加入到a中。在v中刪除該節點。
2.選一個在所有連接v集合和a集合權值最小的邊(即一個節點是v的某一個節點,一個是a中的某一個節點)
3。將兩個節點連接。將c加1
4.將第3步才在v中節點刪除並加入到a中.
5.如果c為n-1則完成最小生成樹,否則回到第2步。
明白了沒?不明白再問我啊,希望對你有所幫助。
『柒』 已知圖G如下所示,根據Prim演算法,構造最小生成樹。(要求給出生成過程)
①將帶權連通圖G=的各邊按權從小到大依次排列,如e1,e2,…,em,其中e1的權最小,em的權最大,m為邊數。 ②取權最小的兩條邊構成邊集T0,即T0={e1,e2},從e3起,按次序逐個將各邊加進集合T0中去,若出現迴路則將這條邊排除(不加進去),按此法一直進行到em,最後得到n-1條邊的集合T0={e1,e2,…,en-1},則T0導出的子圖就是圖G的最小生成樹。
『捌』 prim演算法是什麼
prim演算法是:圖論中的一種演算法。
普里姆演算法(Prim演算法),圖論中的一種演算法,可在加權連通圖里搜索最小生成樹。意即由此演算法搜索到的邊子集所構成的樹中,不但包括了連通圖里的所有頂點(英語:Vertex (graph theory)),且其所有邊的權值之和亦為最小。
該演算法於1930年由捷克數學家沃伊捷赫·亞爾尼克(英語:Vojtěch Jarník)發現;並在1957年由美國計算機科學家羅伯特·普里姆(英語:Robert C. Prim)獨立發現;1959年,艾茲格·迪科斯徹再次發現了該演算法。因此,在某些場合,普里姆演算法又被稱為DJP演算法、亞爾尼克演算法或普里姆-亞爾尼克演算法。
通過鄰接矩陣圖表示的簡易實現中,找到所有最小權邊共需O(V)的運行時間。使用簡單的二叉堆與鄰接表來表示的話,普里姆演算法的運行時間則可縮減為O(ElogV),其中E為連通圖的邊數,V為頂點數。如果使用較為復雜的斐波那契堆,則可將運行時間進一步縮短為O(E+VlogV),這在連通圖足夠密集時(當E滿足Ω(VlogV)條件時),可較顯著地提高運行速度。
『玖』 Prim演算法的實現過程
貪心過程.
首先,把圖中的點分成兩種,已連通和未連通的,我把它們分別稱為"黑"和"白"點.
一開始時,圖中全是白點,沒有黑點.演算法的第一步,隨機選出一個白點,染成黑色.
然後開始一個重復的過程:
從當前圖的邊中尋找這樣的一些邊:它的其中一個端點是黑點,而另一個端點是一個白點. 我們可以把這類邊稱為"可擴展邊". 然後演算法需要從所有的可擴展邊之中選出權值最小的一條.把這條可擴展邊加入生成樹之中,且把這條邊的白色端點染成黑色.
重復這個過程,直到全部的節點都為黑色.
演算法可以優化的地方是,在選擇權值最小的可行邊時可以使用堆.