稀疏圖演算法
『壹』 普里姆演算法是什麼
在計算機科學中,普里姆(也稱為Jarník's)演算法是一種貪婪演算法,它為加權的無向圖找到一個最小生成樹 。
相關簡介:
這意味著它找到邊的一個子集,能夠形成了一個包括所有頂點的樹,其中在樹中所有邊的權重總和最小。該演算法通過從任意起始頂點開始一次給樹增加一個頂點來操作,在每個步驟中添加從樹到另一個頂點的花費最小的可能的連接。
該演算法由捷克數學家沃伊茨奇·賈尼克於1930年開發後,後來在1957年被計算機科學家羅伯特·普里姆,以及在1959年被艾茲赫爾·戴克斯特拉重新發現和重新出版。因此,它有時也被稱為Jarník演算法,普里姆-jarník演算法。普里姆-迪克斯特拉演算法或者DJP演算法。
這個問題的其他眾所周知的演算法包括克魯斯卡爾演算法和 Borvka's演算法。這些演算法在一個可能的非連通圖中找到最小生成森林;相比之下,普里姆演算法最基本的形式只能在連通圖中找到最小生成樹。然而,為圖中的每個連通分量單獨運行普里姆演算法,也可以用於找到最小生成森林。
就漸近時間復雜度而言,這三種演算法對於稀疏圖來說速度相同,但比其他更復雜的演算法慢。然而,對於足夠密集的圖,普里姆演算法可以在線性時間內運行,滿足或改進其他演算法的時間限制。
『貳』 數據結構之圖:求所有節點之間的最短路徑,用什麼演算法時間復雜度小求答案與解釋
兩者時間復雜度一般都是O(n3),但對於稀疏圖來說重復使用Dijkstra方法比較好!
Dijkstra演算法時間復雜度為O(V*V+E),可以用優先隊列進行優化,優化後時間復雜
度變為0(v*lgn)。
源點可達的話,O(V*lgV+E*lgV)=>O(E*lgV)。
當是稀疏圖的情況時,此時E=V*V/lgV,所以演算法的時間復雜度可為O(V^2) 。可以用優先隊列進行優化,優化後時間復雜度變為0(v*lgn)。
具體詳細解釋你可以看看這個http://blog.chinaunix.net/uid-27164517-id-3287891.html。
『叄』 設有一稀疏圖G,則G採用什麼存儲較省空間
G採用鄰接表存儲較省空間。
鄰接表,存儲方法跟樹的孩子鏈表示法相類似,是一種順序分配和鏈式分配相結合的存儲結構。如這個表頭結點所對應的頂點存在相鄰頂點,則把相鄰頂點依次存放於表頭結點所指向的單向鏈表中。
對於無向圖來說,使用鄰接表進行存儲也會出現數據冗餘,表頭結點A所指鏈表中存在一個指向C的表結點的同時,表頭結點C所指鏈表也會存在一個指向A的表結點。
(3)稀疏圖演算法擴展閱讀:
表示法
n個頂點e條邊的無向圖的鄰接表表示中有n個頂點表結點和2e個邊表結點。(換句話說,每條邊(i,j)在鄰接表 中出現兩次:一次在關於i的鄰接表中,另一次在關於j的鄰接表中)。
對於有向圖,vi的鄰接表中每個表結點都對應於以vi為始點射出的一條邊。因此,將有向圖的鄰接表稱為出邊表。對於無向圖來說,使用鄰接表進行存儲也會出現數據冗餘,表頭結點A所指鏈表中存在一個指向C的表結點的同時,表頭結點C所指鏈表也會存在一個指向A的表結點。
『肆』 prim演算法和kruskal演算法哪一個適合稀疏圖
邊數較少可以用Kruskal,因為Kruskal演算法每次查找最短的邊。 邊數較多可以用Prim,因為它是每次加一個頂點,對邊數多的適用。
『伍』 用來求解加權有向圖的最短路徑的演算法是什麼演算法
單元最短路徑:
1.如果沒有負權環的稀疏圖,可以用SPFA,時間復雜度O(KM)
M是邊數,K是平均入隊列的次數
2.如果沒有負權環的稠密圖,建議用Dijkstra O(N^2),用二叉堆可優化到
O(NlogN),斐波那契堆編程復雜度太高,不易於實現
3.如果有負權環,可以嘗試floyd,O(n^3)
任兩點最短路徑:floyd較好實現,基於重標號johnson也不錯(稀疏圖效率高)
具體程序可以上網查
『陸』 圖論中稀疏圖的概念
圖的鄰接矩陣中超過一半的元素的0的話就叫做稀疏圖
『柒』 稀疏圖的數據結構
數據結構中對於稀疏圖的定義為:有很少條邊或弧(如e<nlogn,n是圖的頂點數,e是弧數)的圖稱為稀疏圖(sparse graph),反之成為稠密圖(dense graph)。
『捌』 求最短路問題的三種演算法並說明使用條件
現在比較常用的最短路演算法是dijkstra它的使用條件是你會寫,且圖中無負權邊
SPFA是現在稀疏圖上常用最短路演算法,且無負環,而且你要會寫
floyd是當前求多源最短路的常用演算法
對於程序猿來說,dijkstra性能穩定比較changyong
對於oier來說,只要不是稠密圖,一定寫spfa,因為spfa在稀疏圖上太快了
『玖』 圖論中稀疏圖的概念
兩個圖D=(V(D),E(D),φ1(D)))和H=(V(D),E(D),φ2(H))),如果存在兩個雙射
θ:V(D)→V(H)
Ψ:E(D)→E(H)
使得 a∈E(D),φ1(a)=(x,y)<=>φ2(Ψ(a))=(θ(x),θ(y))∈E(H)
則稱(θ,Ψ)為D,H 之間的同構映射(isomorphic mapping)。
兩個圖D=(V(D),E(D),φ(D)))和H=(V(D),E(D),φ(H))),如果存在同構映射,則成為同構的,記為D≌H.
『拾』 對於網路中有負權弧時,可以使用哪種演算法求取最短路
現在比較常用的最短路演算法是dijkstra它的使用條件是你會寫,且圖中無負權邊
SPFA是現在稀疏圖上常用最短路演算法,且無負環,而且你要會寫
floyd是當前求多源最短路的常用演算法
對於程序猿來說,dijkstra性能穩定比較changyong
對於oier來說,只要不是稠密圖,一定寫spfa,因為spfa在稀疏圖上太快了