【演算法】筆記二
Minmum spanning tree 在一個無向連通圖中,一個包含所有頂點的樹稱為 spanning tree,若圖裡的連線有權重,則權重總和最小的 spanning tree 就是 Minmum spanning tree。而在一個圖中, MST 可能有好幾個。 每個頂點所相鄰權重最小的連線必定包含於 MST 之中。 將 MST 中某些點和連線合併後,剩下的樹仍然是合併後所產生之子問題的 MST。 由上兩點可知,此問題可使用貪婪演算法,將某些必包含於 MST 的點和連線合併後,在遞迴求剩餘圖的 MST。 Kruskal 演算法: 找到整個圖中權重最小的連線,將此連線相連的兩點合併,遞迴直到完成。時間複雜度為 O(E logV)。 (必須注意,若兩頂點已合併則之間的連線不可再使用。) Prim 演算法: 由某一點出發,找相鄰權重最小的連線,將連線兩端合併,遞迴。此演算法可使用 heap 達成,將出發點相鄰連線皆丟入堆疊中,再找出權重最小者,若連線的對面不是已合併的頂點,則將該頂點合併,且加入所有與它相鄰的連線於堆疊中。時間複雜度為 O(E logV)。