2_哈夫曼树和哈夫曼算法

本文探讨了哈夫曼树在字符编码中的应用,解释了如何通过不等长编码节省空间并确保非歧义性。通过举例展示了哈夫曼算法如何将出现频率高的字符编码得更短,减少了文件的总位数,达到最优二叉树状态。
摘要由CSDN通过智能技术生成
  • 问题

    1. 现在我们要对a,b,c,d,e,f,g 7个字符进行编码,一种笨办法就是每个字符都用3bit进行编码,这样7个字符可以表示为000, 001, 010, 011, 100, 101, 110

    2. 按照上面的编码方式,如果a出现1次,b出现2次,c出现3次……那么这个文件一共要占(1+2+…+7) * 3 = 84bit

    3. 这样编码固然解决了无歧义性的问题,但是如果我们把g编码为11的话,即采用不等长编码的方式,那么其实也没有歧义的问题

    4. 歧义不歧义的根源在于,如果每个字符和其他字符的前缀编码不同,那么它们肯定就不会歧义,也就是说只要不出现a用11表示,b用110表示这种问题,就不会出现歧义

    5. 画个图表示就是下面这样

                      (0)
                   0       1
                0    1   0    1
               0 1  0 1 0 1  0  1
      

      现在最下面一层是叶结点,a是最左下角的,b是a右边的……,g放在0110处也可以,放在011处也可以,因为放在哪都不会挡到其他字符的路径

    另外这也说明了根节点的那个0是一个伪结点,它是永远不会用来编码字符的,因为只要放上去就会挡到其他字符

    1. 所以现在的需求就是:如果能让出现次数多的字符尽可能出现在靠近根结点的位置,那么编码这样的字符占用的位数就少,文件的总空间就小;另外就是注意不要让不同的字符有共同前缀,一定不要让一个字符挡到其他字符的编码路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值