算法 - 哈夫曼(Huffman)编码

概念

哈夫曼(Huffman)编码算法是基于二叉树构建编码压缩结构的,它是数据压缩中经典的一种算法。算法根据文本字符出现的频率,重新对字符进行编码。因为为了缩短编码的长度,我们自然希望频率越高的词,编码越短,这样最终才能最大化压缩存储文本数据的空间。

哈夫曼二叉树

哈夫曼二叉树是一颗带有权重的二叉树,权重为数据中每个字符出现的频率。并且哈夫曼二叉树权重有低到高遵循从左到右,从下到上(即:权重低的靠左,在最下层)。

构建哈夫曼二叉树

例如:已知一个文件中出现的各字符及其对应的频率如下表所示。

字符abcdef
频率(%)4513121695

一、初始队列:按字符出现的频率从左到右递增排列。

fecbda
5912131645

二、合并:由左到右进行合并,依次构建二叉树。

三、重新调整队列:每次合并完成,需对合并后的权重值从新排序,依次类推(所有二叉树叶子均为字符权重值,所有字符权重值均为二叉树叶子)。
哈夫曼二叉树

哈夫曼编码

我们把二叉树分支中左边的支路编码为0,右边分支表示为1,依次遍历这颗二叉树获取得到所有字符的编码。

哈夫曼编码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值