1. 程式人生 > 其它 >圖的應用—最小生成樹

圖的應用—最小生成樹

 

生成樹:所有頂點均由邊連線在一起,但不存在迴路的圖。(從任意點出發可以遍歷到其他任何點,但是不能回到自身)

一個圖可以有許多棵不同的生成樹了,但是其中
        生成樹的頂點個數和圖的頂點個數相同
        生成樹是圖的極小連通子圖,去掉一條邊則非連通。
         一個有n個頂點的連通圖的生成樹有n-1條邊(反之不一定),再加一條邊必然形成迴路。則其中任意兩個頂點間的路徑是唯一的。

1.無向圖的生成樹

 最小生成樹:給定一個無向網路,在該網的所有生成樹中,使得各邊權值之和最小的那顆生成樹稱為該網的最小生成樹,也叫最小代價生成樹。(最小生成樹不唯一)

應用:n個城市之間建立通訊網,求最小花費

頂點——表示城市有n個
邊——表示線路,有n-1條
邊的權值——表示線路的經濟代價
連通網——表示n個城市間通訊網

演算法實現

構造最小生成樹的演算法都利用了MST的性質

MST性質:設N = (V, E) 是一個連通網,U是頂點集V的一個非空子集。若邊(u,v)是一條具有最小權值的邊,其中u∈U,v∈V-U,則必存在某一顆包含邊(u,v)的最小生成樹。

理解:將集合U和其他所有結點構成的集合V-U路徑之間的權值比較,找到最小的權值路徑,並將其加入集合U中,則其一定包含在最小生成樹中。

1.Prim(普里姆)演算法

理解:初始隨機選擇一個頂點,找出其和其他的結點的最小權值。然後加入,依次迴圈,直到所有結點都加入其中。

2.Kruskal(克魯斯卡爾)演算法

理解:初始化將所有頂點加入其中,依次從小到大的權值加入,判斷每一條權值是否已經有重複頂點,如果有這捨去,取下一條邊。

(3)兩種演算法的比較

時間演算法比較:Prim演算法  每一個結點和其他會比較,一共有n個結點,則為n2

                        Kruskal演算法  只計算變數