圖的最小生成樹

一、克魯斯卡爾算法

克魯斯卡爾算法的核心思想是:每次添加權值儘可能小的邊,同時使新的圖無環,直到得到生成樹爲止。也稱爲“最小邊加入法”“避圈法”

思路:對於帶權圖G(V,E),首先將圖G中的邊按權值排序,並將其中權值最小的邊選出並標記,如果最小權值的邊有多條,則可以隨機從中選擇一條。然後從未標記的邊中選出權值最小的的邊並做檢查,檢查該邊是否與已經標記的邊構成圈。如果是,則廢棄它重新選擇一條權值最小的邊並檢查,一到到找到一條與已標記的邊不會構成圈的權值最小的邊,然後標記成爲最小生成樹的一部分。

克魯斯算法時間複雜度爲O(eloge)e爲網中邊的數目,因而克魯斯算法適合於求邊稀疏的網的最小生成樹

二、普里姆算法

對於連通帶權圖G(V,E),最小生成樹爲T,過程爲:

首先,從圖中隨意選擇一點作爲起始點,並將其標記後加入集合U中,即U={u0}。然後算法重複執行操作爲所有u屬於U,v屬於(V-U)中找一個代價最小的邊(u0,v0)併入集合T,同時將v0併入U,直到U=V爲止。

例:用普里姆算法求圖1G所示的最小生成樹

圖的最小生成樹 - 楓葉 - 楓葉
首先,算法選擇頂點4作爲起始點,將4放入U中,然後在剩餘的G中選擇一個頂點v0使邊(4,v0)權值最小,選擇頂點2,則U中爲{4,2}
再從剩餘的頂點中選一個頂點v1使邊(u,v1)的權值最小,u屬於{4,2},可供選擇的有(2,1),(2,3),(2,6),(4,6)選擇頂點頂點6,則U爲{4,2,6}
再從剩餘的頂點中選 一個v2使邊(u,v2)的權值最小,此時可供選擇的有(2,1),(2,3),(6,3),(6,5),選擇頂點1,則U爲{4,2,6,1}
依次,直到將所有的頂點添加到U中得到最小生成樹,如下圖
圖的最小生成樹 - 楓葉 - 楓葉
普里姆算法的時間複雜度爲O(n^2),與網中的邊數無關,適用於求邊稠密的網的最小生成樹
發佈了196 篇原創文章 · 獲贊 196 · 訪問量 120萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章