7.6 最小生成樹

 

生成樹和最小生成樹均是在無向連通圖中進行的。html

生成樹:含有連通圖的所有節點n,且含有n-1條邊。一個連通圖能夠有多個生成樹。算法

最小生成樹:是基於帶權的無向連通圖,根據權值,按必定規則,代價最小的生成樹爲最小生成樹。網絡

找最小生成樹,經典的兩種算法,普利姆算法和克魯斯卡爾算法。數據結構

一、普利姆(Prim)算法ide

        最小生成樹是數據結構中圖的一種重要應用,它的要求是從一個帶權無向徹底圖中選擇n-1條邊並使這個圖仍然連通(也即獲得了一棵生成樹),同時還要考慮使樹的權最小。 爲了獲得最小生成樹,人們設計了不少算法,最著名的有prim算法和kruskal算法。教材中介紹了prim算法,可是講得不夠詳細,理解起來比較困難,爲了幫助你們更好的理解這一算法,本文對書中的內容做了進一步的細化,但願能對你們有所幫助。spa

 

        假設V是圖中頂點的 集合,E是圖中邊的集合,TE爲最小生成樹中的邊的集合,則prim算法經過如下步驟能夠獲得最小生成樹:
1:初始化:U={u 0},TE={f}。此步驟設立一個只有結點u 0的結點集U和一個空的邊集TE做爲最小生成樹的初始形態,在隨後的算法執行中,這個形態會不斷的發生變化,直到獲得最小生成樹爲止。
2:在全部u∈U,v∈V-U的邊(u,v)∈E中,找一條權最小的邊(u 0,v 0),將此邊加進集合TE中,並將此邊的非U中頂點加入U中。此步驟的功能是在邊集E中找一條邊,要求這條邊知足如下條件:首先邊的兩個頂點要分別在頂點集合U和V-U中,其次邊的權要最小。找到這條邊之後,把這條邊放到邊集TE中,並把這條邊上不在U中的那個頂點加入到U中。這一步驟在算法中應執行屢次,每執行一次,集合TE和U都將發生變化,分別增長一條邊和一個頂點,所以,TE和U是兩個動態的集合,這一點在理解算法時要密切注意。
3:若是U=V,則算法結束;不然重複步驟2。能夠把本步驟當作循環終止條件。咱們能夠算出當U=V時,步驟2共執行了n-1次(設n爲圖中頂點的數目),TE中也增長了n-1條邊,這n-1條邊就是須要求出的最小生成樹的邊。
二、克魯斯卡爾(Kruskal)算法
        求加權 連通圖的最小生成樹的算法。kruskal 算法每次選擇n- 1條邊,所使用的貪婪準則是:從剩下的邊中選擇一條不會產生 環路的具備最小耗費的邊加入已選擇的邊的集合中。注意到所選取的邊若產生環路則不可能造成一棵生成樹。kruskal算法分e 步,其中e 是網絡中邊的數目。按耗費遞增的順序來考慮這e 條邊,每次考慮一條邊。當考慮某條邊時,若將其加入到已選邊的集合中會出現環路,則將其拋棄,不然,將它選入。
克魯斯卡爾算法
假設 WN=(V,{E}) 是一個含有 n 個頂點的連通網,則按照克魯斯卡爾算法構造 最小生成樹的過程爲:先構造一個只含 n 個頂點,而邊集爲空的子圖,若將該子圖中各個頂點當作是各棵樹上的根結點,則它是一個含有 n 棵樹的一個森林。以後,從網的邊集 E 中選取一條權值最小的邊,若該條邊的兩個頂點分屬不一樣的樹,則將其加入子圖,也就是說,將這兩個頂點分別所在的兩棵樹合成一棵樹;反之,若該條邊的兩個頂點已落在同一棵樹上,則不可取,而應該取下一條權值最小的邊再試之。依次類推,直至森林中只有一棵樹,也即子圖中含有 n-1條邊爲止。
舉例:
克魯斯卡爾算法(Kruskal's algorithm)是兩個經典的最小生成樹算法的較爲簡單理解的一個。這裏面充分體現了貪心算法的精髓。大體的流程能夠用一個圖來表示。這裏的圖的選擇借用了Wikipedia上的那個。很是清晰且直觀。
首先第一步,咱們有一張圖,有若干點和邊
以下圖所示:
.
.
.
.
.
.
第一步咱們要作的事情就是將全部的邊的長度排序,用排序的結果做爲咱們選擇邊的依據。這裏再次體現了貪心算法的思想。資源排序,對局部最優的資源進行選擇。
排序完成後,咱們率先選擇了邊AD。這樣咱們的圖就變成了
.
.
.
.
.
.
第二步,在剩下的邊中尋找。咱們找到了CE。這裏邊的權重也是5
.
.
.
.
.
.
依次類推咱們找到了6,7,7。完成以後,圖變成了這個樣子。
.
.
.
.
.
.
下一步就是關鍵了。下面選擇那條邊呢? BC或者EF嗎?都不是,儘管如今長度爲8的邊是最小的未選擇的邊。可是他們已經連通了(對於BC能夠經過CE,EB來鏈接,相似的EF能夠經過EB,BA,AD,DF來接連)。因此咱們不須要選擇他們。相似的BD也已經連通了(這裏上圖的連通線用紅色表示了)。
最後就剩下EG和FG了。固然咱們選擇了EG。最後成功的圖就是下圖:
.
.
.
.
.
.
到這裏全部的邊點都已經連通了,一個最小生成樹構建完成。
Kruskal算法的時間複雜度由排序算法決定,若採用快排則時間複雜度爲O(N log N)。
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息