最佳合並模式(貪心法算法的正確性)證明:
1.貪心法
本方法采用構造最大堆和最小堆來解決。
思路: 最差合並順序—總是最長的兩個先合並;
最優合並順序—總是最短的兩個先合並。
2.1.3 貪心法最優合並證明
最優合並順序證明:設有n個權值W={W0;W1;W2...Wn-1; }作為外結點的權值,構造兩路合並樹的貪心算法將生成一棵具有最小帶權路徑長度的二叉樹。 證明:
1)對於n=1,算法將返回只有一個外結點的二叉樹,這棵樹顯然是最優的。
2)假定外結點的數目為k<n時,算法能夠生成有k個外結點的最佳二路合並樹。
3)當k=n時,
假定有n個權值W0<=W1<=W2...<=Wn-1; ,並設貪心算法生成的兩路合並樹為Tn ,設cost(Tn)是Tn的帶權外路徑長度。如果它不是最優的,而另一棵同樣以此n個權值為外結點的兩路徑合並樹(Tn)'是最優的,即cost(Tn')<cost(Tn)。
對於Tn',現假定結點p是該樹上離根最遠的內結點,它有兩個孩子wi和wj。如果它們不是最小的兩個權值w0和w1,可以通過交換使得p的孩子為w0和w1。於是得到另一棵有n個外結點的兩路合並樹Tn' ',必有cost(Tn' ') ≤ cost(Tn' )。

對於(Tn)' ',用權值為W0+W1 的外結點取代以p為根的子樹(見圖),得到一棵有n-1個外結點的兩路合並樹(Tn-1)''。同樣,可以對由貪心法得到的兩路合並樹Tn也進行類似替代,即對由兩個外結點w0和w1合並形成的子樹,用一個權值為W0+W1 的外結點取代之,從而得到一棵n-1個外結點的兩路合並樹Tn-1。二叉樹Tn-1正是對權值集{W0+W1 ;W2;W3...Wn-1}執行上述貪心算法所生成的兩路合並樹。
根據歸納法假設,cost(Tn-1)≤cost(Tn-1''),由於cost(Tn) = cost(Tn-1) +w0+w1和cost((Tn)' ')=cost(Tn-1'')+w0+w1,所以cost(Tn)≤cost((Tn)' ');又因為cost((Tn)' ')≤cost(Tn'),所以cost(Tn)≤cost(Tn'),這與假設矛盾,這就證明了貪心算法生成的兩路合並樹必定是具有最小帶權外路徑長度的二叉樹,因而是最佳兩路合並樹。證明完畢!
本文是書上證明,特意摘錄下來理解。
