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