什麼是最小生成樹以及如何構建


預習:圖的基本概念及圖演算法

一,概念回顧 - 生成樹

1.1 什麼是生成樹

生成樹:所有頂均由邊鏈接在一起,但不存在迴路的圖。

  • 多一條邊會出現迴路
  • 少一條邊會出現鏈接不到的頂點
  • 一個圖可以有許多棵不同的生成樹
    在這裏插入圖片描述

所有生成樹具有以下共同特點

  • 生成樹的頂點個數與圖的頂點個數相同
  • 生成樹是圖的極小連通子圖,去掉一條邊則非連通;
  • 一個有 n 個頂點的連通圖的生成樹有 n-1 條邊;
  • 在生成樹中再加一條邊必然形成迴路
  • 生成樹中任意兩個頂點間的路徑是唯一的。

注意含有 n 個頂點 n-1 條邊的圖不一定是生成樹。
在這裏插入圖片描述

1.2 如何建立無向圖的生成樹

回顧:深度 / 廣度優先搜索
在這裏插入圖片描述
設圖 G = ( V, E ) 是個連通圖,當從圖任一頂點出發遍歷圖G 時,將邊集 E(G) 分成兩個集合 T(G) 和 B(G)。其中 T(G) 是遍歷圖時所經過的邊的集合,B(G) 是遍歷圖時未經過的邊的集合。顯然,G1(V, T) 是圖G 的最小連通子圖。即子圖G1 是連通圖G 的生成樹

二,最小生成樹(Minimum Spanning Trees)

如下圖,生成了兩個生成樹,權值分別爲 19 和 17.
在這裏插入圖片描述
最小生成樹

  • 給定一個無向網絡,則該網的所有生成樹中,使得各邊權值之和最小的那棵生成樹稱爲該網的最小生成樹,也叫最小代價生成樹

2.1 最小生成樹的典型用途

  • 欲在 n 個城市間建立通信網,在 n 個城市應鋪 n-1 條線路;
  • 但因爲每條線路都會相對應的經濟成本,而 n 個城市最多有 n*(n-1)/2 條線路,那麼,如何選擇 n-1 條線路,使總費用最少?

在這裏插入圖片描述
顯然,此聯通網是一個生成樹,並且我們希望他是一個最小生成樹。

2.2 構造最小生成樹(MST)

2.2.1 MST 性質

視頻講解:6.6.1最小生成樹3–MST性質
構造最小生成樹的算法很多,其中多數算法都利用了MST的性質

MST 性質

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

在這裏插入圖片描述
MST 性質解釋:
再生成樹的構造過程中,圖中 n 個頂點分屬兩個集合

  • 已經落在生成樹上的頂點集:U
  • 尚未落在生成樹上的頂點集:V - U

接下來則應在所有連通 U 中頂點和 V - U中頂點的邊中選取權值最小的邊。
在這裏插入圖片描述

2.2.2 Prim 算法構建最小生成樹

視頻講解:青島大學–王卓 Prim 算法
算法思想

  • 設 N = (V,E)是連通圖,TE 是 N 上最小生成樹中邊的集合
  • 初始令 U = { u0 },(u0∈V),TE = { }。
  • 在所有 u∈U,v∈V - U的邊(u,v)∈E 中,找一條代價(權值)最小的邊(u0,v0)。
    如下圖 U = { 1,3 },V - U = { 2, 4, 5, 6 }
    在這裏插入圖片描述
    如下圖 U = { 1,3 ,6},V - U = { 2, 4, 5 }
    在這裏插入圖片描述
  • 將(u0,v0)併入集合 TE,同時 v0 併入 U。
  • 重複上述操作直至 U = V 爲止,則 T = ( V, TE ) 爲 N 的最小生成樹。
    最終結果如下圖所示
    在這裏插入圖片描述

舉個例子(詳細的每一步,如下圖所示)
在這裏插入圖片描述

2.2.3 Kruskal 算法構建最小生成樹

視頻講解:青島大學–王卓 克魯斯卡爾算法
算法思想

  • 將所有頂點均加入生成樹中,但不加入任何邊
  • 將所有邊的權值進行排序,有小到大依次將邊加入到生成樹中(若加入此邊是形成了環,則選擇下一個最小邊,跳過此邊)
  • 以此類推,直到 T中所有的頂點都在同意分量上爲止。
    在這裏插入圖片描述

如果將邊(5,6)的權值改爲5,則會出現兩個最小生成樹
(因此,最小生成樹不唯一
在這裏插入圖片描述

舉例說明(只有藍色的邊是在生成樹中存在的)
在這裏插入圖片描述
在這裏插入圖片描述

2.2.4 Prim 與 Kruskal 算法比較

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章