4.3.1 - Kruskal's algorithm
Last updated
Last updated
Steps:
自 中挑出最小成本的邊
使用Heap的Delete-Min()
,花
判斷 加入spanning tree中,是否會形成cycle
是: 放棄
否: 將(u, v)加入S中
使用Disjoint Set(互斥集)來判斷是否會產生cycle
if (find(u) != find(v){ //判斷u, v是否屬於同一個集合
union(u, v); //將u, v聯集加入S中
}
重複1~2直到已挑出 個邊或是E為空
若 的邊數小於 ,則 無spanning tree。
Time:
e.g.
挑出(1, 6)
挑出(3, 4)
挑出(2, 7)
挑出(2, 3)
挑出(4, 7)會形成cycle
挑出(4, 5)
挑出(5, 7)會形成cycle
挑出(5, 6)
Min Cost = 99