数据结构与Python算法——哈夫曼树

哈夫曼编码

哈夫曼编码是一种变长的字符编码方式,常用于对指定的字符集进行数据压缩,压缩率在20%~90%。
在对由n个字符组成的文本进行编码过程中,有两种编码方式,即定长编码和变长编码。
对于定长编码而言,会为每个字符赋予一个长度固定为 m(m≥log2n)的位串,我们常用的标准ASCII 码就是采用定长编码策略对字符集进行编码的。
长度各异的编码,其中出现频率较高的字符,采用长度较短的编码表示,出现频率较低的字符,采用长度较长的编码表示。著名的摩尔斯电码就是采用这种策略进行编码的。
通常情况下,与定长编码相比,变长编码可以有效减少表示同一字符集所需的编码长度,提升编码效率。
但是,为了使用变长编码策略,需要解决在定长编码模式下不会遇到的一个问题,就是前缀码问题。对每一个字符规定一个 0-1 串作为其代码,并要求任一字符的代码都不是其他字符代码的前缀,这种编码称为前缀码。
有了前缀码,我们可以在编码完成的位串中准确定位每个属于字符集的字符,通过简单扫描一个位串,直到得到某个等于字符集中字符的位串后,将该字符替换之前的位串,重复以上操作,即可根据位串恢复原来的文本。哈夫曼编码就是一种前缀码。

哈夫曼树

为了对某字母表构造一套二进制的前缀码,可以借助二叉树。将树中所有的左向边都标记为0,所有的右向边都标记为1。通过记录从根节点到字符所在的叶子节点的简单路径上的所有0-1 标记来获得表示该字符的编码。
用于表示二进制前缀码的二叉树每个叶子节点对应一个字符,非叶子节点不对应任何字符。由于二叉树叶子节点之间没有互联的简单路径,所以依据这种二叉树生成的编码序列为前

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值