哈夫曼编码(Huffman Coding)

1. 编码含义

编码:给每一个对象标记一个二进制位串来表示一组对象。例:ASCII,指令系统。

2. 编码分类

  • 等长编码:表示一组对象的二进制位串的长度相等
  • 不等长编码:表示一组对象的二进制位串的长度不相等

3. 编码问题

  • 等长编码什么情况下空间效率高?
    等长编码越短,占据空间越小
  • 不等长编码什么情况下空间效率高?
    出现频率高的采用比较短的编码,出现频率低的采用比较长的编码。参考霍夫曼树的特性,符合霍夫曼树的性质的二叉树,即WPL最小权值路径条件的就是最短编码空间的占用情况,也是不等长编码最优的空间效率使用。
  • 不等长编码如何保证解码的唯一性?
    编码不重复,没有二义性。参考霍夫曼树的特性,树干即编码,路径长度即编码长度,根据二叉树特性通过树干路径进行编码,它构成前缀编码的形式,即一组编码中任一编码都不是其他任何一个编码的前缀,前缀编码保证了在解码时不会出现有多种可能的情况,能够保证编码的唯一性

等长编码不等长编码的对比

编码分类空间效率优点不足
等长编码等长编码越短,占据空间越小,空间效率利用最高字符编码等长不支持前缀编码方式
编码长度随字符数量膨胀剧增
不等长编码出现频率高的采用比较短的编码,出现频率低的采用比较长的编码,空间利用效率最高空间占用小编码不等长

3.1 等长编码

在这里插入图片描述
如上图,若按照等长编码形式进行编码则可得到如下:

字符等长编码值
A000
B001
C010
D011
E100
F101
G110
H111

在数据传输格式上,等长编码需要进行分割,例如,ABC则用000,001,010表示,或用000 001 010表示,以上缺点是分隔符占用额外空间,且A到H共8个字符中如A可用二进制0表示,而不需要000,因此也是浪费空间,以此类推其他字符二进制表示方法的空间占用。

3.2 不等长编码

若要提高空间利用率减少空间占用,可以从减少额外分隔符、压缩单个字符不等长编码表示方式等入手,可优化如下:

字符不等长编码值
A0
B1
C10
D11
E100
F101
G110
H111

若按照不等长编码方式去除分隔符的话,则编码出现不唯一情况,如表示ABC为0110,按照不等长编码值可有如下结果,即解密出现多种情况。

解密可能的字符值编码值
AG0 110
ABC0 1 10
ADA0 11 0

总结可知,等长编码无法实现编码压缩节约空间的目的,且需要间隔来避免编解码不唯一的问题。

3.3 哈夫曼编码

有没有可以压缩字符编码、不需要额外分隔符、解码保证唯一性的编码方式呢?
答案就是 ———— 哈夫曼树编码

如有 {A、B、C、D、E、F、G} 字符,出现次数为 {9、5、2、3、11、7、8} ,我们将字符出现次数设置为哈夫曼树中权值结点的权值,此时权值结点即字符,然后根据概念进行哈夫曼树的构建(哈夫曼树具体构建方式可点击此处)如下:
在这里插入图片描述

如上图,可得到字符与编码值的对应表如下:

字符不等长编码值
A00
B010
C0110
D0111
E10
F110
G111

我们再来按照去除分隔符的方式表示ABC,则为 000100110

解密可能的字符值编码值
ABC00 010 0110

以上只有一种解码可能,所以是解码具有唯一性,没有存在二义性,是可靠的。
不难发现,无论是从Root根结点到权值子结点,还是从权值子结点到Root根结点的编码,A至G的不等长编码值中任一字符的编码都不是其它字符的编码的前缀,满足该情况的编码则认为具有前缀编码特性,哈夫曼树编码则拥有该特性。

4. 编码压缩

上面我们了解了哈夫曼编码 ,下面来看看它是如何对编码进行压缩来减少空间占用的。示例对字符 ABCDEFG 进行二进制编码,如下

编码形式分隔符编码值编码可靠占位
等长编码000,001,010,011,100,101,110唯一无二义性27
不等长编码0,1,10,11,100,101,110唯一无二义性21
不等长编码011011100101110不唯一有二义性15
ASCII码01000001 01000010 01000011 01000100 01000101 01000110 01000111唯一无二义性61
哈夫曼编码000100110011110110111唯一无二义性21

5. 总结

哈夫曼编码是可变字长编码(VLC)的一种。 Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就称Huffman编码。在变字长编码中,如果码字长度严格按照对应符号出现的概率大小逆序排列,则其平均码字长度为最小。

6. 参考

https://baike.baidu.com/item/%E5%93%88%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81
https://www.cnblogs.com/hujiapeng/p/6208843.html
https://blog.csdn.net/xgf415/article/details/52628073
https://www.bilibili.com/video/BV1ke411s7Nk
https://blog.csdn.net/u013161278/article/details/111942554

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大摩羯先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值