算法科普:有趣的霍夫曼编码

2019 年 3 月 9 日 算法与数据结构

来自:五分钟学算法(微信号:CXYxiaowu)


前言

霍夫曼编码 ( Huffman coding ) 是一种可变长的前缀码。霍夫曼编码使用的算法是 David A. Huffman 还是在MIT 的学生时提出的,并且在 1952 年发表了名为《 A Method for the Construction of Minimum-Redundancy Codes 》的文章。

编码这种编码的过程叫做 霍夫曼编码,它是一种普遍的熵编码技术,包括用于无损数据压缩领域。

霍夫曼编码过程

霍夫曼编码使用一种特别的方法为信号源中的每个符号设定二进制码。出现频率更大的符号将获得更短的比特,出现频率更小的符号将被分配更长的比特,以此来提高数据压缩率,提高传输效率。

以字符串 ” ABAABACD “ 为例进行说明。

接下来,按照字符出现的比例从高往低对字符进行排序。

图 1

然后,按出现比例低的顺序查找两个字母。在这种情况下,它是 “ C ” 12.5% 和 “ D ” 12.5% 。

通过一条线连接两个字母拼构成一个树状结果。将两个字母合并为 “ C 或 D”,并将出现比率相加起来。

动画 2

按照同样的操作,将合并后的 “ C 或 D ” 视为一个字符,重复相同的操作。

在 “ A " "B" " C 或 D " 三个中,按照出现比例低的顺序查找两个字母。

图 3
图 4

这样,所有的字母都变成了 " A 或 B 或 C 或 D" ,出现的比率为 100% 。

图 4 就是霍夫曼编码的树结构。

接下来再次显示各个字母出现的比率,同时使用 0 和 1 进行编码,代码 0 和 1 分别分配给上下延伸的分支。

图 5

分配完毕后,从树的根部遍历每个字符并确定相应的代码。

  • 在 " A " 的情况下,被分配的代码为 " 0 "

  • " B " 的情况下,被分配的代码为 " 10 "

  • " C " 的情况下,被分配的代码为 " 110 "

  • " D " 的情况下,被分配的代码为 " 111 "

动画 6

就这样,通过这样的编码规则, " ABAABACD " 的二进制编码就变成了 " 01000100110111 ",只需要 14 个比特就能表示,比单纯的使用 2 比特表示一个字符缩短了很多。


●编号866,输入编号直达本文

●输入m获取文章目录

推荐↓↓↓

程序员求职面试

更多推荐25个技术类公众微信

涵盖:程序人生、算法与数据结构、黑客技术与网络安全、大数据技术、前端开发、Java、Python、Web开发、安卓开发、iOS开发、C/C++、.NET、Linux、数据库、运维等。

登录查看更多
0

相关内容

一份简明有趣的Python学习教程,42页pdf
专知会员服务
77+阅读 · 2020年6月22日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
291+阅读 · 2020年6月3日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
239+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
263+阅读 · 2020年5月17日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
195+阅读 · 2020年3月12日
3 行代码 5 秒抠图的 AI 神器,根本无需 PS
大数据技术
20+阅读 · 2019年7月24日
告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
程序人生
6+阅读 · 2019年7月11日
最全Python算法实现资源汇总!
AI100
3+阅读 · 2019年5月13日
GitHub超2.7万星,最全Python入门算法来了
新智元
5+阅读 · 2019年4月28日
Web开发人员学习路线总结的最清晰的四张图
程序猿
7+阅读 · 2018年12月20日
图像主题色提取算法
算法与数学之美
4+阅读 · 2018年9月1日
国内各大平台的推荐算法,看到360的时候笑喷了……
黑客技术与网络安全
5+阅读 · 2018年3月28日
各平台的推荐算法,太贴切了!
算法与数据结构
4+阅读 · 2018年1月23日
无问西东,只问哈希
线性资本
3+阅读 · 2018年1月18日
各厂推荐算法!
程序猿
17+阅读 · 2018年1月13日
Real-time Scalable Dense Surfel Mapping
Arxiv
5+阅读 · 2019年9月10日
Universal Transformers
Arxiv
5+阅读 · 2019年3月5日
Arxiv
5+阅读 · 2018年4月22日
Arxiv
3+阅读 · 2018年3月13日
VIP会员
相关VIP内容
一份简明有趣的Python学习教程,42页pdf
专知会员服务
77+阅读 · 2020年6月22日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
291+阅读 · 2020年6月3日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
239+阅读 · 2020年5月21日
Python导论,476页pdf,现代Python计算
专知会员服务
263+阅读 · 2020年5月17日
【经典书】Python数据数据分析第二版,541页pdf
专知会员服务
195+阅读 · 2020年3月12日
相关资讯
3 行代码 5 秒抠图的 AI 神器,根本无需 PS
大数据技术
20+阅读 · 2019年7月24日
告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
程序人生
6+阅读 · 2019年7月11日
最全Python算法实现资源汇总!
AI100
3+阅读 · 2019年5月13日
GitHub超2.7万星,最全Python入门算法来了
新智元
5+阅读 · 2019年4月28日
Web开发人员学习路线总结的最清晰的四张图
程序猿
7+阅读 · 2018年12月20日
图像主题色提取算法
算法与数学之美
4+阅读 · 2018年9月1日
国内各大平台的推荐算法,看到360的时候笑喷了……
黑客技术与网络安全
5+阅读 · 2018年3月28日
各平台的推荐算法,太贴切了!
算法与数据结构
4+阅读 · 2018年1月23日
无问西东,只问哈希
线性资本
3+阅读 · 2018年1月18日
各厂推荐算法!
程序猿
17+阅读 · 2018年1月13日
Top
微信扫码咨询专知VIP会员