1. 程式人生 > >幾分鐘搞明白生成樹和最小生成樹的定義

幾分鐘搞明白生成樹和最小生成樹的定義

注意文字意思:不管是生成樹還是最小生成樹一定還是輸,千萬別和圖混淆了。

下面來說生成樹:我們這棵樹是針對圖來說的,如果你們已經知道極小連通子圖就非常簡單了,
極小連通子圖什麼意思呢,就是我們把圖中的全部節點連線起來,假如n個節點那麼,邊是n - 1條。

注意形成的一定是一棵樹才是生成樹。

好了回到正題:
那麼我們的生成樹怎麼在圖的基礎上生成的呢?
我們學了圖應該知道有2種遍歷方法:1深度優先遍歷 2廣度優先遍歷
深度優先遍歷(DFS)是什麼意思呢:假定一個起點比如下圖所示:
這裡寫圖片描述

假如我知道0的地址,我們使用深度優先遍歷演算法遍歷當前的圖:
分析:深度字面意思一定要搞定這個意思就是說我們根據當前節點訪問當前節點的一個孩子,然後在訪問孩子節點的一個孩子節點,一直遞迴下去。直到全部節點訪問完畢就停止訪問,否則我們就退到上個節點從另一個孩子節點開始使用相同方式訪問孩子節點。
這裡寫圖片描述

分析:由深度優先遍歷演算法得到的生成樹如上圖;

我們從起點0開始,找到0的第一個鄰節點2, 因此0->2->3->4->1->5.
這個序列是確定的嗎,在這個圖是確定的,先0我們在找鄰節點我們假如在逆時針方位開始0開始找到第一個鄰節點也就是2並且都標為訪問過然後就找到2的鄰節點3 在就是4在就是1,這個時候是不是有4個方位,但是隻有5沒有訪問因此就是5 這個時候全部訪問完畢。

第二個辦法就是廣度優先演算法生成樹:

這裡寫圖片描述

分析:我們來看看這個生成樹是怎麼形成的, 我們還是0開始,標誌為被訪問,
然後由於是廣度優先訪問全部的鄰節點在訪問孩子的全部鄰節點 0->2 1 5 3 4

現在引入我們的最小生成樹的定義:既然是最小在是生成樹的基礎上,在加上假如是帶權值,那麼生成樹的很多種當中必有一個生成樹權值和是最小,那麼最小那棵樹就是最小生成樹。

那麼權值是什麼意思,比如0節點和2節點之間我們可以看成是一個城市到一個城市的車費或者路程。
那麼最小就是走遍全部城市的車費或者路程最小。