二叉树学习(三)哈夫曼树

先来看一个例子:
如果需要传输 一串文本:
abcdaabbbc(假设是ascii码)
一个英文字符是 1个字节,那么这里需要10 * 8=80bit(80位来表示)
能否使用某种编码,来减少位的使用,节省空间呢?
比如 高频率出现的字符使用较少的位来表示
低频率出现的字符可以使用相对较多的字符来表示
哈夫曼编码就是这个思想.

一 为什么哈夫曼算法能节省空间??

  1. 统计其中字符出现的次数
字符 次数 频率
a 3 3/10=0.3
b 3 4/10= 0.4
c 1 2/8= 0.2
d 3 1/8= 0.1
  1. 将字符按照频率由低到高排列
字符 频率
d 0.1 A= cd=c+d=0.3 b=0.4 C=B+b=1
c 0.2 a=0.3 B=A+a=0.6
a 0.3 b=0.4
b 0.4
  1. 自底向上构建出一棵树:哈夫曼树(所有字符都在叶子节点,频率越小,深度越大),如下
             C
           /    \
          B      b
        /   \
       A      a
     /   \
     c    d
  1. 编码表:如果将向左记为1,向右记为0,
    那么从根节点到各自叶节点的路径顺序即为编码:
字符 编码 频率 编码位数
b 0 0.4<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值