1. 程式人生 > >最小生成樹Prim算法和Kruskal算法

最小生成樹Prim算法和Kruskal算法

img 使用 .html 註意 包括 cnblogs 生成 針對 矩陣

Prim算法(使用visited數組實現)

Prim算法求最小生成樹的時候和邊數無關,和頂點樹有關,所以適合求解稠密網的最小生成樹。

Prim算法的步驟包括:

1. 將一個圖分為兩部分,一部分歸為點集U,一部分歸為點集V,U的初始集合為{V1},V的初始集合為{ALL-V1}。

2. 針對U開始找U中各節點的所有關聯的邊的權值最小的那個,然後將關聯的節點Vi加入到U中,並且從V中刪除(註意不能形成環)。

3. 遞歸執行步驟2,直到V中的集合為空。

4. U中所有節點構成的樹就是最小生成樹。

技術分享圖片

方法上:Kruskal在所有邊中不斷尋找最小的邊,Prim在U和V兩個集合之間尋找權值最小的連接,共同點是構造過程都不能形成環。

時間上:Prim適合稠密圖,復雜度為O(n * n),因此通常使用鄰接矩陣儲存,復雜度為O(e * loge),而Kruskal多用鄰接表,稠密圖 Prim > Kruskal,稀疏圖 Kruskal > Prim。

空間上: Prim適合點少邊多,Kruskal適合邊多點少。

最小生成樹Prim算法和Kruskal算法

最小生成樹Prim算法和Kruskal算法