最佳合并模式(贪心法算法的正确性)证明

最佳合并模式(贪心法算法的正确性)证明:

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'),这与假设矛盾,这就证明了贪心算法生成的两路合并树必定是具有最小带权外路径长度的二叉树,因而是最佳两路合并树。证明完毕!



    本文是书上证明,特意摘录下来理解。

 

posted @ 2016-04-21 14:05  Pancho  阅读(3920)  评论(0编辑  收藏  举报