當前位置:首頁 » 操作系統 » 普林姆演算法

普林姆演算法

發布時間: 2023-08-03 22:08:21

❶ 利用普里姆演算法求解最小生成樹,寫出步驟或畫圖表示過程。

<1,6>邊長度未知,這里看成無窮大。
歷次循環中,選擇兩端點分別在U,V中的邊中長度最小者,
具體如下:
1. 將1加入U中,其餘點加入V中。
2. 選擇邊<1,7>,將7加入U中,從V中除去該點。
3. 選擇邊<7,6>,將6加入U中,從V中除去該點。
4. 選擇邊<1,2>,將2加入U中,從V中除去該點。
5. 選擇邊<2,3>,將3加入U中,從V中除去該點。
6. 選擇邊<2,4>,將4加入U中,從V中除去該點。
7. 選擇邊<2,5>,將5加入U中,從V中除去該點。
結束。由上述六條邊組成的樹為求得的最小生成樹。

❷ 利用Prim(普里姆)演算法 構造最小生成樹 程序

演算法同樣是解決最小生成樹的問題。

其演算法為:在這n個點中的相通的邊進行排序,然後不斷地將邊添加到集合中(體現了貪心的演算法特點),在並入集合之前,必須檢查一下這兩點是不是在一個集合當中,這就用到了並查集的知識。直到邊的集合達到了n-1個。

與prim演算法的不同:prim演算法為單源不斷尋找連接的最短邊,向外擴展,即單樹形成森林。而Kruskal演算法則是不斷尋找最短邊然後不斷將集合合並,即多樹形成森林。

復雜度的不同:prim演算法的復雜度是O(n^2),其中n為點的個數。Kruskal演算法的復雜度是O(e*loge),其中e為邊的個數。兩者各有優劣,在不同的情況下選擇不同的演算法。

Prim演算法用於求無向圖的最小生成樹

設圖G =(V,E),其生成樹的頂點集合為U。

①、把v0放入U。

②、在所有u∈U,v∈V-U的邊(u,v)∈E中找一條最小權值的邊,加入生成樹。

③、把②找到的邊的v加入U集合。如果U集合已有n個元素,則結束,否則繼續執行②。

其演算法的時間復雜度為O(n^2)

Prim演算法實現:

(1)集合:設置一個數組set(i=0,1,..,n-1),初始值為 0,代表對應頂點不在集合中(注意:頂點號與下標號差1)

(2)圖用鄰接陣表示,路徑不通用無窮大表示,在計算機中可用一個大整數代替。
{先選定一個點,然後從該點出發,與該點相連的點取權值最小者歸入集合,然後再比較在集合中的兩點與其它各點的邊的權值最小者,再次進入集合,一直到將所有的點都歸入集合為止。}

❸ 普里姆演算法是什麼

在計算機科學中,普里姆(也稱為Jarník's)演算法是一種貪婪演算法,它為加權的無向圖找到一個最小生成樹 。

相關簡介:

這意味著它找到邊的一個子集,能夠形成了一個包括所有頂點的樹,其中在樹中所有邊的權重總和最小。該演算法通過從任意起始頂點開始一次給樹增加一個頂點來操作,在每個步驟中添加從樹到另一個頂點的花費最小的可能的連接。

該演算法由捷克數學家沃伊茨奇·賈尼克於1930年開發後,後來在1957年被計算機科學家羅伯特·普里姆,以及在1959年被艾茲赫爾·戴克斯特拉重新發現和重新出版。因此,它有時也被稱為Jarník演算法,普里姆-jarník演算法。普里姆-迪克斯特拉演算法或者DJP演算法。

這個問題的其他眾所周知的演算法包括克魯斯卡爾演算法和 Borvka's演算法。這些演算法在一個可能的非連通圖中找到最小生成森林;相比之下,普里姆演算法最基本的形式只能在連通圖中找到最小生成樹。然而,為圖中的每個連通分量單獨運行普里姆演算法,也可以用於找到最小生成森林。

就漸近時間復雜度而言,這三種演算法對於稀疏圖來說速度相同,但比其他更復雜的演算法慢。然而,對於足夠密集的圖,普里姆演算法可以在線性時間內運行,滿足或改進其他演算法的時間限制。

❹ 普林演算法如果兩條邊權相同怎麼辦

普利姆演算法(prim演算法),每次選擇最小邊的時候,可能存在多條同樣權值的邊可選,此時任意選其一就可以。
參考資料:數據結構(C語言版 第二版)

❺ 普里姆演算法

你要先明白prim演算法的原理,明白原理後看下面的程序要點:

1.程序實現的時候將點分成兩部分,加入集合的和沒有加入集合的;
2.每次從沒有加入集合中找點;
3.對所有沒有加入到集合中的點中,找一個邊權最小的;
4.將邊權最小的點加入集合中,並且修改和加入點相連的沒有加入的點的權,重復第2步,知道所有的點都加入到集合中;

❻ 普里姆演算法的普里姆演算法的實現

為了便於在兩個頂點集U和V-U之間選擇權最小的邊,建立了兩個輔助數組closest和lowcost,它們記錄從U到V-U具有最小權值的邊,對於某個j∈V-U,closest[j]存儲該邊依附的在U中的頂點編號,lowcost[j]存儲該邊的權值。
為了方便,假設圖G採用鄰接矩陣g存儲,對應的Prim(g,v)演算法如下:
void Prim(MatGraph g,int v) //輸出求得的最小生樹的所有邊
{ int lowcost[MAXVEX]; //建立數組lowcost
int closest[MAXVEX]; //建立數組closest
int min,i,j,k;
for (i=0;i<g.n;i++) //給lowcost[]和closest[]置初值
{ lowcost[i]=g.edges[v][i];
closest[i]=v;
}
for (i=1;i<g.n;i++) //構造n-1條邊
{ min=INF; k=-1;
for (j=0;j<g.n;j++) //在(V-U)中找出離U最近的頂點k
if (lowcost[j]!=0 && lowcost[j]<min)
{ min=lowcost[j];
k=j; //k為最近頂點的編號
}
printf( 邊(%d,%d),權值為%d ,closest[k],k,min);
lowcost[k]=0; //標記k已經加入U
for (j=0;j<g.n;j++) //修正數組lowcost和closest
if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j])
{ lowcost[j]=g.edges[k][j];
closest[j]=k;
}
}
}
普里姆演算法中有兩重for循環,所以時間復雜度為O(n2),其中n為圖的頂點個數。由於與e無關,所以普里姆演算法特別適合於稠密圖求最小生成樹。

熱點內容
oracle物理存儲結構 發布:2025-03-13 07:43:00 瀏覽:820
大型ftp 發布:2025-03-13 07:41:20 瀏覽:20
c語言奇數 發布:2025-03-13 07:36:58 瀏覽:219
手機游戲源碼交易平台 發布:2025-03-13 07:25:46 瀏覽:634
為什麼現在沒有原生安卓系統了 發布:2025-03-13 07:11:31 瀏覽:880
編程報名網 發布:2025-03-13 06:54:11 瀏覽:975
androidstudio安裝apk 發布:2025-03-13 06:48:39 瀏覽:500
電腦伺服器怎麼打開連接網路 發布:2025-03-13 06:42:12 瀏覽:631
阿里雲伺服器文檔 發布:2025-03-13 06:39:51 瀏覽:778
安卓手機怎麼找到應用的文件夾 發布:2025-03-13 06:27:27 瀏覽:207