最小生成樹的兩種尋路算法及證實[上]

首先,什麼是平面連通圖?

平面連通圖是一個二維網絡,網絡由節點和邊組成,好比我隨手畫了一個:
_2018_03_08_10_49_16
也能夠是這樣:
_2018_03_08_10_50_30
它並非一個空間連通圖由於他能夠拓撲變換成這樣:
_2018_03_08_10_51_00
但若是這種圖就不行了:
_2018_03_08_10_51_29
這樣的連通圖只能出如今三維空間中,因此沒法知足歐拉公式.html

我有幾張阿里雲幸運券分享給你,用券購買或者升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,立刻就要搶光了。算法

其次,歐拉公式是沃特?

歐拉公式也叫歐拉定理,指在簡單多面體上,棱數(邊)、面數和點數具備必定的關係:點+面=邊+2。並且規定,平面網絡屬於特殊的一種多面體,想不到吧(關於歐拉定理的詳解,請轉向個人另外一篇論文《淺談歐拉定理》),這裏要注意一下,數面數的時候要算上整個圖外側的那個無窮大的面,也就是環路的數量加上1。所以平面連通圖恆知足歐拉定理。
   至於我爲何要介紹歐拉公式呢,是爲了作準備,後面的最小生成樹須要用到它!

而後,生成樹有啥特色?

在平面連通圖中,咱們想要用一個如樹枝通常層層分岔但無環的線路通過全部的節點,且這個線路必須被包含於連通圖。換個說法就是,在這個連通圖中,咱們但願刪除掉一些邊,讓剩下全部的邊都沒有造成環,且剩下的邊必須相互連通,不能被隔絕,這就是生成樹(spanning tree)。好比這樣:

_2018_03_08_10_52_29

能夠看出,不一樣的刪邊方法能夠獲得不一樣的生成樹。
   根據歐拉公式,生成樹中的面數爲1,點數不變仍是n,於是獲得邊數等於n-1,對於連通圖中的全部生成樹都成立。
   仍是根據歐拉公式能夠證實,此時在生成樹中隨便增添一條邊(這條邊固然要屬於原連通圖中),都必然將多出一個環,增長n條邊就產生n個環。
   把這張連通圖當作一張地圖,每一個節點都是一個地點,每條邊都是可走的路徑,這時給每條路徑賦予一個權重值,表明這條路徑的長短,這在TCP/IP協議中叫作度量值或開銷(cost),因此這裏權值越大,路徑開銷反而越大。
   所以,不一樣的生成樹的總開銷未必相同,其中總開銷最小的就成爲了本文探討的最小生成樹。
   還能夠看出,在樹上,任意兩點之間走的路徑是最短距離(放之於原來的連通圖比較來講)的可能性很小。因此最小生成樹不是地圖上尋路的最好方法。

以後,求最小生成樹的兩種重要算法

以上都是最基礎的鋪墊部分,寫教程就這點麻煩,必定要從知識的根源開始講起。那麼廢話再也不多說,直接上算法:kruskal(克魯斯卡爾)算法和prim(普利木)算法。這兩個算法是計算最小生成樹最經常使用的算法沒有之一,由於他們既簡單又完美,何況他們有不少的類似之處。

Kruskal Algorithm

前期準備:網絡

相關文章
相關標籤/搜索