证明哈夫曼编码是最优的



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

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 一棵可能的哈夫曼树,在此树中,对于最小权重的的两个叶结点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. 


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

    
    
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
哈夫曼算法的正确性可以通过两种方法进行证明:常规方法和强数学归纳法。 常规方法的证明步骤如下: 1. 首先,我们需要证明哈夫曼编码最优的,即它能够产生最短的编码长度。 2. 假设存在一种编码方式比哈夫曼编码更优,即产生的编码长度更短。 3. 根据这种更优的编码方式,我们可以构建一棵树,其中每个叶子节点表示一个字符,且树的路径长度等于编码长度。 4. 由于哈夫曼编码是通过贪心算法构建的,它总是选择频率最低的两个字符进行合并。因此,我们可以假设在这棵树中,存在两个频率最低的叶子节点,它们的父节点的频率小于等于这两个叶子节点的频率。 5. 我们可以通过交换这两个叶子节点的位置,使得它们的父节点的频率大于这两个叶子节点的频率。这样,我们得到了一棵新的树,它的路径长度比原来的树更短。 6. 这与我们的假设相矛盾,因为我们假设存在一种编码方式哈夫曼编码更优。因此,我们可以得出结论:哈夫曼编码最优的。 强数学归纳法的证明步骤如下: 1. 首先,我们需要证明哈夫曼编码最优的,即它能够产生最短的编码长度。 2. 假设对于任意的n个字符,哈夫曼编码都能够产生最短的编码长度。 3. 现在考虑n+1个字符的情况。我们可以将这n+1个字符分为两组,一组包含n个字符,另一组包含一个字符。 4. 根据我们的假设,对于这n个字符,哈夫曼编码能够产生最短的编码长度。 5. 对于这n+1个字符,我们可以将这个问题转化为一个子问题,即将这n个字符看作一个字符,这个字符和剩下的一个字符进行合并。 6. 根据我们的假设,哈夫曼编码能够产生最短的编码长度。因此,我们可以得出结论:哈夫曼编码最优的。 通过以上两种方法的证明,我们可以得出结论:哈夫曼算法的正确性已经得到证明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值