生成樹 — Spanning Tree

Sharon Peng
Sep 28, 2020

--

如果是第一次接觸的話,應該會對Spanning Tree這詞,感到很陌生。所以這次要帶各位來了解什麼叫做生成樹。

在看這篇之前,建議請先了解一下圖的結構是什麼,再來看會沒那麼複雜,因為會用到一些專有名詞。

什麼是生成樹?

先用例子來解釋,現在我們有一個圖(Graph)稱為G,如下圖:

而生成樹就是

1. 新建一個圖,包含圖 G的所有「點(Vertex)」(這邊就是A, B, C, D)

2. 將所有「點」連接再一起,即為生成樹。(要特別注意,要用最少的邊(Edge)連接再一起才會是生成樹

另一種想法是,可以連接每一個點而且用的是最少的邊。(這個概念可以想成郵差送信,每一戶(Vertex)都要去,但又想要花最少的時間(edges))

如果看不懂沒關係,看下面的圖就能理解是什麼意思。

上面的四個圖,皆為圖G的生成樹。

生成樹的性質

從上面的圖來看,我們知道一個圖的生成樹不一定只有一個,有可能會有很多個生成樹。

得到一些性質:

1. 一個圖(Graph)不只會有一個生成樹(Spanning Tree)

2. 同一個圖的生成樹,會有相同的點 (Vertex), 邊(Edge)的個數。

3. 所有的生成數,不會出現 Cycle, loop的結構。

4. 如果把其中一個「邊(Edge)」拿掉就會成為無連通圖(Disconnected Graph)我們可以說生成樹是最小的連接(minimally connected)

5. 只要多加一個邊,就會形成cycle, Loop,所以也可以成生成樹是maximally acyclic(最大無環)

生成樹通常會應用在哪裡?

通常是網路方面的應用,我們可以將每一台電腦看作是一個「點(Vertex)」如果要將很多電腦連接再一起的時候,這時候就可以形成像圖一樣的結構。

Civil Network Planning

Computer Network Routing Protocol

通常介紹完生成樹後,會提到最小生成樹(Minimum Spanning Tree)

最小生成樹(Minimum Spanning Tree, MST)

概念也是從一個圖G中,找到另一個圖,而這個圖稱為最小生成樹。

那要怎麼找最小生成樹?

在權重圖中,最小生成樹:

  1. 將全部「點(Vertex)」相連。
  2. 相連的「邊(Edge)」其權重(Weigh)要最小,即為最小生成樹。

(*權重的概念是距離的遠近、中間的成本等等。)

上面舉的是很簡單的例子,但我們知道現實生活是不會這麼單純的,所以我們就會有演算法去找最小成樹。

之後就會來介紹兩種普遍尋找最小生成樹的演算法:

  1. Kruskal’s Algorithm
  2. Prim’s Algorithm

希望這篇文章可以幫助到正在學習的夥伴,筆者我一開始學的時候,對這個名詞超級陌生,上網找了很久也不知道在幹嘛,果然還是需要時間的積累,才可以了解其中的意義。如果現在還不懂的話,也不用灰心,多多接觸就可以的!

--

--

Sharon Peng
Sharon Peng

No responses yet