最小樹形圖及其生產方法


諸位看官,這是我第一次在整篇文章的所有圖片里面加水印。小弟寫博客的時間不長,就有兩篇博客被盜用並未注明原文網址。這一方面使我痛心不已,另一方面迫使我不得不重新考慮一下版權保護問題。小弟不是吝嗇鬼,如果影響閱讀或者是確實需要我的圖片的,請私信我,我將免費為有需求的看官提供圖片。謝謝了!


 

最小樹形圖(Arborescence,亦稱Directed Rooted Tree)是有向圖的最小生成樹(Minimum Spanning Tree)。本博客旨在詳細的介紹最小樹形圖的生成方法,但不涉及具體的數學推導。先看一副有向權重圖:
我們該如何求這幅圖的一個最小樹形圖呢?我們在這里給出求最小樹形圖的一個流程圖,該流程圖是經典的Zhu-Liu算法:

上圖中已經詳細的給出了最小樹形圖的全部步驟,現在給出如何解決Step2中更新“以前指向該環中的任意節點的路徑”的辦法。 假定環路中存在一點v,環中有一條邊e1指向該點。環外有一條邊e2指向該點。則e2更新后,新邊的權重e2_new=e2_old-e1(環外邊權重減環內邊權重)
下面是針對本文開始所給出的圖生成最小樹形圖的完整步驟:
算法開始(原圖):
 
現在指定 根節點為V1,即生成根節點為V1的最小樹形圖。(也可指定其他節點,這里以V1為例)
根據流程圖中Step1的規則,根節點V1不用選擇指向該點的最小權重邊;指向V2的最小權重邊為a5;指向V3的最小權重邊為a4;指向V4的最小權重邊為a7;指向V5的最小權重邊為a8;指向V6的最小權重邊為a10;指向V7的最小權重邊為a14;如下圖:
上圖中有兩個環,分別為由V2-V3組成的環和由V4-V5-V6組成的環。現在根據Step2分別對兩個環路進行治理。
首先治理V2-V3環:
第一步:縮環為點,如下圖左側的大圓點(縮環為點后a4,a5邊被取消,其余所有邊保留)
第二步:對於所有從大圓點出去的邊,其權重保持不變;對於所有指向大圓點的邊,更新其權值。在這里采用W[e]表示邊e的權重;用W[e]_New表示邊e更新后的權重;W[e]_Old表示邊e更新前的權重。
W[a1]_New = W[a1]_Old - W[a5] =9-7=2
W[a9]_New = W[a9]_Old - W[a4] =8-3=5
W[a13]_New = W[a13]_Old - W[a4] =4-3=1
邊緣權重更新后的圖如下圖所示:

其次治理V4-V5-V6環:
第一步:縮環為點,如下圖右側的大圓點(縮環為點后a7,a8,a10邊被取消,其余所有邊保留)
第二步:對於所有從大圓點出去的邊,其權重保持不變;對於所有指向大圓點的邊,更新其權值。
W[a3]_New = W[a3]_Old - W[a8] =5-3=2
W[a6]_New = W[a6]_Old - W[a7] =9-4=5
W[a11]_New = W[a11]_Old - W[a10] =9-5=4
W[a15]_New = W[a15]_Old - W[a10] =8-5=3
邊緣權重更新后的圖如下圖所示:

對於新到的圖,按照Step1中的描述,重新尋找除V1以外,指向其他節點的最小邊。其結果如下圖所示:

指向V2V3節點的最小邊為a13,指向V7節點的最小邊為a14;指向V4V5V6節點的最小邊為a3。原論文中證明,a3,a14,a13一定是以V1為根的最小樹形圖的邊集的子集,現在對V2V3節點和V4V5V6節點做展開操作。我們回到原圖中(權重全部恢復到原圖的權重),並標記a3,a14,a13這三條邊,如下圖:

不難發現如果從根節點V1發出的信息想要順暢的流到V4,則只能選擇a7;同理,如果從V1出發的信息流想要順暢的流到V6,則只能選擇經V4到V6的a10。因此,a7,a10在邊集內。同理如果從V1發出的信息想要流向V2,則只能選擇經V3到V2方向的a5。此時所有的節點都有邊相連。新從根節點V1,可以順有向邊的方向到任意節點,如下圖:

上圖即是以 V1 為根節點的最小樹形圖。

 

 

 

 

 

 
 
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM