導航:首頁 > 源碼編譯 > kruskal演算法時間復雜度

kruskal演算法時間復雜度

發布時間:2023-06-14 18:43:49

Ⅰ kruskal演算法是什麼

kruskal演算法是:克魯斯卡爾演算法。禪緩是求連通網的最小生成樹的另一種方法。與普里姆演算法不同,它的時間復雜度為O(eloge)、(e為網中的邊數)租襲野,所以,適合於求邊稀疏的網的最小生成樹。

克魯斯卡爾(Kruskal)演算法從另一途徑求網的最小生成樹。其基本思想是:假設連通網G=(V,E),令最小生成樹的初始狀態為只有n個頂點而無邊的非連通圖T=(V,{}),概述圖中每個頂點自成一個連通分量。

在E中選擇代價最小的邊,若該邊依附的頂點分別在T中不同的連通分量上,則將此邊加入到T中;否則,捨去此邊而選擇下一條代價最小的邊。依此類推,直至T中所有頂點構成一個連通分量為止。

復雜度:

克魯斯卡爾演算法的時間復雜度主要由排序方法決定,而克魯斯卡爾演算法的排序方法只與網中邊的條數有關,而與網中頂點的個數無關,當使用時間復雜度為O(elog2e)的排序方法時,克魯斯卡爾演算法的時間復雜度即為O(log2e),因此當網的頂點個數較多、而邊的條數較少時,使用克魯斯卡爾演算法構造最小生成弊喊樹效果較好。

Ⅱ 克魯斯卡爾演算法的時間復雜度為多少

時間復雜度為O(|E|log|E|),其中E和V分別是圖的邊集和點集。

基本思想是先構造一個只含 n 個頂點、而邊集為空的子圖,把子圖中各個頂點看成各棵樹上的根結點,之後,從網的邊集 E 中選取一條權值最小的邊,若該條邊的兩個頂點分屬不同的樹,則將其加入子圖,即把兩棵樹合成一棵樹。

反之,若該條邊的兩個頂點已落在同一棵樹上,則不可取,而應該取下一條權值最小的邊再試之。依次類推,直到森林中只有一棵樹,也即子圖中含有 n-1 條邊為止。

(2)kruskal演算法時間復雜度擴展閱讀:

克魯斯卡爾演算法證明

假設G=(V,E) 是一個具有n個頂點的連通網,T=(U,TE)是G的最小生成樹,U的初值等於V,即包含有G中的全部頂點,TE的初值為空集。該演算法的基本思想是:將圖G中的邊按權值從小到大的順序依次選取。

若選取的邊使生成樹T不形成迴路,則把它並入TE中,保留作為T的一條邊,若選取的邊使生成樹T形成迴路,則將其舍棄,如此進行下去直到TE中包含n-1條邊為止,此時的T即為最小生成樹。

克魯斯卡爾演算法,至多對e條邊各掃描一次,每次選擇最小代價的邊僅需要O(loge)的時間。因此,克魯斯卡爾演算法的時間復雜度為O(eloge)。

Ⅲ 數據結構(十):最小生成樹

最小生成樹是帶權無向連通圖中權值最小的生成樹,根據 圖 中生成樹定義可知, 個頂點的連通圖中,生成樹中邊的個數為 ,向生成樹中添加任意一條邊,則會形成環。生成樹存在多種,其中權值之和最小的生成樹即為最小生成樹。

若 為最小生成樹 的一個真子集,即 的頂點集合和邊集合都是 的頂點和邊集合的子集,構造最小生成樹過程為向 中添加頂點和邊,添加的原則有兩種:

kruskal 演算法即為上述第一種原則,通過選擇圖中的最小權值邊來構造最小生成樹,過程中需要注意避免形成環。

step 1:
最小權值邊為頂點 7、8 形成的邊

step 2:
最小權值邊為頂點 3、9 形成的邊

step 3:
最小權值邊為頂點 6、7 形成的邊

step 4:
最小權值邊為頂點 3、6 形成的邊

step 5:
最小權值邊為頂點 1、2 形成的邊

step 6:
最小權值邊為頂點 3、4 形成的邊

step 7:
最小權值邊為頂點 1、8 形成的邊

step 8:
最小權值邊為頂點 4、5 形成的邊

最小生成樹的權值之和為 37

這里使用鄰接表作為圖的存儲結構

這里使用 getEdgesFromAdjacencyList 函數完成鄰接表到邊集合的轉換,使用快排 sort 完成對邊集合的排序,使用 origin 函數返回每個子圖的根。

該函數返回頂點 index 所屬子圖的根頂點,其中 vertices[index] 位置上存儲的是頂點 index 的上一個頂點,每個子圖中,根頂點的上一個頂點為自身。

kruskal 演算法中使用 getEdgesFromAdjacencyList 函數完成鄰接表向邊集合的轉換,函數內部存在兩層循環,訪問鄰接表中每個頂點的相鄰頂點,復雜度為 。使用快排對邊集合進行排序,時間復雜度為 ,因為 ,所以快排時間復雜度可以表述為 。 kruskal 演算法中 while 循環取最小權值邊,並對邊的兩個頂點執行 origin 函數判斷是否屬於同一個子圖,時間復雜度為 。所以 kruskal 演算法的時間復雜度為 。

kruskal 演算法的過程為不斷對子圖進行合並,直到形成最終的最小生成樹。 prim 演算法的過程則是只存在一個子圖,不斷選擇頂點加入到該子圖中,即通過對子圖進行擴張,直到形成最終的最小生成樹。

step 1:
距離子圖的最近頂點為 4

step 2:
距離子圖的最近頂點為 3

step 3:
距離子圖的最近頂點為 9

step 4:
距離子圖的最近頂點為 6

step 5:
距離子圖的最近頂點為 7

step 6:
距離子圖的最近頂點為 8

step 7:
距離子圖的最近頂點為 2

step 8:
距離子圖的最近頂點為 1

最小生成樹的權值之和為 37

這里使用鄰接表作為圖的存儲結構

這里使用 vertices 列表存儲每個頂點元素,每個元素包括兩個屬性, index 為頂點下標, weight 為頂點距離子圖的大小。演算法中使用 verticesIndex 列表存儲每個頂點元素在 vertices 列表中的下標位置。使用 heapSort 堆排序對每個頂點到子圖的距離進行排序,即對 vertices 列表進行排序,使用堆排序內的 transformToHeap 函數調整 vertices 列表為小頂堆。當添加新頂點到子圖後,使用 updateVertices 函數完成對相鄰頂點的距離更新。

當 vertices 列表調整為小頂堆之後,將列表首、尾元素交換,則列表尾元素即為距離子圖最近的頂點元素。

對每一個相鄰頂點,如果不在子圖中,則判斷是否更新到子圖的距離。更新距離後的 while 循環操作,目的為調整堆結構為小頂堆。

prim 演算法中構造頂點列表的時間復雜度為 。使用堆排序對頂點列表進行排序,時間復雜度為 。 prim 演算法中 while 循環取最近頂點元素,並調整元素取出後列表的堆結構,所以調整復雜度為 ;同時,循環結構內執行 updateVertices 函數,更新每個取出頂點的相鄰頂點距離值,所以更新頂點數為 ,因為每個頂點更新距離後,需要調整堆結構為小頂堆,所以更新復雜度為 。所以 prim 演算法的總時間復雜度為 。

Ⅳ 最小生成樹兩種演算法有何區別

主要有兩個:
1.普里姆(prim)演算法
特點:時間復雜度為御老o(n2).適合於求邊稠密鎮森升的最小生成樹。
2.克魯斯卡爾(kruskal)演算法
特點:時間復雜度為o(eloge)(e為網中邊數),適合於春蔽求稀疏的網的最小生成樹。

閱讀全文

與kruskal演算法時間復雜度相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163