一、克魯斯卡爾算法
克魯斯卡爾算法的核心思想是:每次添加權值儘可能小的邊,同時使新的圖無環,直到得到生成樹爲止。也稱爲“最小邊加入法”“避圈法”
思路:對於帶權圖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所示的最小生成樹