九層之台,起於累土;為了證明prim演算法,可以先將一些理論證明,然後再以此為基礎證明prim。
論據1 最小生成樹可能不只一種
論據2 樹做為無環圖,若樹中任意兩點u v沒有直接連線邊,u v連線成邊後樹則變成了有環圖。證明 樹的uv 有是連通的,再uv 直接相連後 u到v有兩條路徑,所以 成環
論據3 所有的最小生成樹 都會包含至少乙個 權重值最小的邊。 證明 採用反證法: 如果最小生成樹不包含權重最小的邊,則將乙個權重最小的邊cd新增到樹上變成有環圖(依據論據2)。則此環中肯定至少乙個邊ab 大於 權重最小邊cd,刪除此邊ab後,生成樹總權值變小,如果這樣那麼 此樹不是最小生成樹。
論據4 每個權重最小的邊都有至少一種最小生成樹包含。證明 依據論據3 ,那麼最小生成樹一定至少乙個 權重值最小的邊。假設 最小權重邊有 ab cd ,最小生成樹包含ab ,新增 cd變成環,去除此環中的另乙個最小邊,生成新的最小生成樹
先找到最小權重邊,此邊一定是某個最小生成樹的邊,根據上述論據一定存在過ac的最小生成樹。 此時 ac 是乙個圖 bdef是乙個圖,又因為這個場景下必有最小生成樹存在(根據論據4),選擇cf作為 ac 與bdef一定在乙個最小生成樹之中。因為如果此場景下最小生成樹不包含cf,將cf連線成環 cf的距離小於等於所有別的點到ac的距離,因此可以替換,替換相等權重的邊,說明此場景存在多個最小生成樹,但至少有乙個過cf的最小生成樹,替換的邊權值更大則不是最小生成樹,與假設矛盾。因此cf一定是乙個最小生成樹的邊。以此類推 prim演算法則最後產生的樹就是一種最小生成樹。
Prim演算法 Kruskal演算法
一 prim演算法 1 要求 1 生成一顆連通的樹 2 生成樹 包含全部頂點,v 1條邊,沒有迴路,並且新增一條邊會變成有迴路 3 權重和最小 2 過程模擬 最重要 貪心的思想,每一步都要選擇權值最小的,這棵樹所有跟頂點相連的邊中最小的。從根節點開始,讓樹慢慢的長大。過程 從v1開始 跟v1有聯絡的...
Prim演算法 Kruskal演算法
prim演算法 kruskal演算法 prim演算法和kruskal演算法,都是用來找出圖中最小生成樹的演算法,兩個演算法有些小差別。prim演算法 又稱普里姆演算法,以圖上的頂點為出發點,逐次選擇到最小生成樹頂點集距離最短的頂點為最小生成樹的頂點,並加入到該頂點集,直到包含所有的頂點。1.選擇一出...
Kruskal演算法 Prim演算法
最小生成樹是什麼?自a2392008643的部落格 此演算法可以稱為 加邊法 初始最小生成樹邊數為0,每迭代一次就選擇一條滿足條件的最小代價邊,加入到最小生成樹的邊集合裡。把圖中的所有邊按代價從小到大排序 把圖中的n個頂點看成獨立的n棵樹組成的森林 按權值從小到 擇邊,所選的邊連線的兩個頂點ui,v...