一、prim演算法
普利姆(prim)演算法適用於求解無向圖中的最小生成樹(minimum cost spanning tree)。下面是prim演算法構造最小生成樹的過程**。
選擇乙個節點開始,比如v1進入集合u,剩下的集合的v-u包括剩下的節點,然後尋找從集合u到集合v-u最近的路徑。這裡有三條路徑分別是權重為6到v2,權重為5到v4以及權重為1到v3,顯然到通過v3連線而集合u和集合v-u是最近的,選擇v3進入集合u。同樣繼續選擇到v-u的路徑,此時有6條可選路徑,分別是權為6到v2【從v1】,權為5到v4【從v1】,權為5到v2【從v3】,權為5到v4【從v3】,權為6到v5【從v3】,權為4到v6【從v3】。選擇出從v3到v6的路徑並將v6新增至集合u中。按照這種方法依次將v4,v2和v5新增到集合u直到u和全體節點結合v相等,或者說v-u集合為空時結束,這時選出的n-1條邊即為最小生成樹。
二、kruskal演算法
克魯斯卡爾(kruskal)演算法是另一種求解最小生成樹的演算法。下面是kruskal演算法構造最小生成樹的過程**。
kruskal則是採取另一種思路,即從邊入手。首先n個頂點分別視為n個連通分量,然後選擇一條權重最小的邊,如果邊的兩端分屬於兩個連通分量,就把這個邊加入集合e,否則捨去這條邊而選擇下一條代價最小的邊,依次類推,直到所有節點都在同乙個連通分量上。
三、對比
假設網中有n個節點和e條邊,普利姆演算法的時間複雜度是o(n^2),克魯斯卡爾演算法的時間複雜度是o(eloge),可以看出前者與網中的邊數無關,而後者相反。因此,普利姆演算法適用於邊稠密的網路而克魯斯卡爾演算法適用於求解邊稀疏的網。
最小生成樹 Prim演算法和Kruskal演算法
最小生成樹 3條構造最小生成樹的準則 只能使用該網路中的邊來構造最小生成樹 只能使用恰好n 1條邊來聯結網路中的n個結點 選用的這個n 1條邊不能構成迴路。mst性質 假設n v,是乙個連通網,u是頂點集合v的乙個非空子集。若 u,v 是一條具有最小值 代價 的邊,其中u屬於u,v屬於v u 即u對...
最小生成樹 Prim演算法和Kruskal演算法
轉於 prim演算法 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹。把 找到的邊的v加入u集合。如果u集合已有n個元素,則結束,否則繼續執行 其演算法的時間複雜度為o n 2 define maxn boolflag ...
最小生成樹 Prim演算法和Kruskal演算法
prim演算法 演算法簡單描述 1 輸入 乙個加權連通圖,其中頂點集合為v,邊集合為e 2 初始化 vnew 其中x為集合v中的任一節點 起始點 enew 為空 3 重複下列操作,直到vnew v a.在集合e中選取權值最小的邊,其中u為集合vnew中的元素,而v不在vnew集合當中,並且v v 如...