数据结构——哈夫曼树与哈夫曼编码

1.哈夫曼编码 Huffman code:

  是一种文本压缩算法,这种算法依据的是不同符号在一段文本中相对出现的频率。假设一个文本是由a,u,x,z组成的字符串,其长度为1000,每个字符用1字节来存储,共需要1000字节,即8000位。如果每个字符用2位二进制来编码:00=a, 01=x, 10=u, 11=z.那么,用2000位空间即课表示1000个字符。此外,我们还需要一定的空间来存放编码表,它可以采用如下的存储格式:

    符号个数,代码1,符号1,代码2,符号2,...

  符号个数即以及每个符号分别占8位,每个代码占 log2(符号个数) 向上取整 位。因此,在这个例子中,编码表需要5*8+4*2 = 48 位。压缩比为8000/2048 = 3.9。

  即一段文本的压缩结果是:压缩有的字符串+编码表。

  在字符串aaxuaxz中,a出现3。一个符号出现的次数称为频率frequency. 当不同字符出现的频率有很大差别时,我们可以通过可变长编码来缩短编码串的长度。这带来一个 问题:每次提取多少为代码来解释符号?——只要没有任何一个代码是另一个代码的前缀就可以!因此,当从左到右检查编码位串时,可以得到与一个确切的代码相匹配的字符。</

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值