证明哈夫曼编码是最优的



课本中没有证明,现补充在这里。改编自下面的证明链接(英文)

http://algoviz.org/OpenDSA/Books/OpenDSA/html/HuffProof.html

[ 感谢N_thread指出的问题。]

====================

引理1:给定W = {w1, w2, w3...,wn} (n >= 2), 以此集合构建相应的哈夫曼树。令wi, wj 是W中权重最小的两个元素,则这两个数对应的结点是兄弟结点,且这两结点在二叉树中的深度不小于其它任何一个叶结点的深度。

证明:由哈夫曼树的构建过程可知,wi, wj 所在结点是兄弟结点(在不影响阅读的前提下,以wi, wj 指代这两个结点)。假设在哈夫曼树中,wi, wj 所在结点的深度不是最深的,则哈夫曼树应似图1 样式,存在一些结点,其深度大于wi, wj 的深度。在图1中,wi, wj的父结点V的权重应大于结点X权重,否则构建哈夫曼树时,应选择V而不是X作为U的子结点。但这是不可能的,因为由假设知wi, wj是W中权重最小的两个元素。得出矛盾,问题得证。

证明哈夫曼编码是最优的_第1张图片


图1 一棵可能的哈夫曼树,在此树中,对于最小权重的的两个叶结点wi,wj, 其深度是不同的。图中三角形表示子树。

定理1:哈夫曼树是最优的。

证明:用归纳法证明。

  • 基本情况: 当 n=2 , 哈夫曼树具有最小权重外部路径(EPW),因为树 仅有二种可能,有二个叶结点的二种哈夫曼树下的EPW是相同的。
  • 假设: 设有哈夫曼树有 n1  个叶子时,定理成立。
  • 推导:T为有n (n>=2)个叶子的哈夫曼树。不失 一般性,设 w1 <= w2 <=... <=wn。令 V  是w1 与w2的父结点。由引理1知, 在T中,不存在叶结点,其深度大于叶结点w1 与w2的深度。若存在深度大于w1, w2深度的结点,我们可以通过将之与w1, w2交换,由此得到更小的WPL。按如下方式得到到二叉树T':以结点V'替换结点V, 其中V'的权重是w1+w2,则T'是相应于{w1+w2,w3,...,wn}的一棵哈夫曼树。根据归纳假设,T'具有最小权重外部路径,T是最优的(EPW最小)。在T'的结点V'上添加叶结点w1, w2,可得T,则T是具有最小权重外部路径的哈夫曼树。由此,我们由数学照片纳法证明了定理1. 


    注意:哈夫曼编码是最优之一。

    
    
  • 你可能感兴趣的:(证明哈夫曼编码是最优的)