第38课 - 霍夫曼树
1. 最初的解决方案
对于文本“BADCADFEED”的传输而言,因为重复出现的只有“ABCDEF”这六个字符,因此可以用下面的方式编码:
| A | B | C | D | E | F | 
| 000 | 001 | 010 | 011 | 100 | 101 | 
接收方可以根据每3个bit进行一次字符解码的方式还原文本信息。
2. 存在的问题
这样的编码需要30个bit才能表示10个字符。容易出错。
3. 改进
避免每个字符都占用相同的bit位。
| A | B | C | D | E | F | 
| 01 | 1001 | 101 | 00 | 11 | 1000 | 
25个bit就能表示10个字符,效率提高17%。
4. 霍夫曼树
(1) 给定n个数值{v1, v2, ...vn}
(2) 根据这n个数值构造二叉树集合F,F = {T1, T2, ..,Tn},Ti得到数据域vi,左右子树为空。
(3) 在F中选取两颗树根节点的最小的数作为左右子树构造一棵新的二叉树,这棵二叉树的根节点中的值为左右子树根节点中的值的和。
(4) 在F中删除这两棵子树,并将构造的新的二叉树加入F中。
(5) 重复3和4,直到F中只剩下一个树为止。这棵树就是霍夫曼树。
5. 霍夫曼树的应用
假设经过统计ABCDEF在需要传输的保温中出现的概率如下:
| A | B | C | D | E | F | 
| 27% | 8% | 15% | 15% | 30% | 5% | 
根据这些数值构造的霍夫曼树如下:
该霍夫曼树叶结点在树中的位置编码如下:
A:01
B:1001
C:101
D:00
E:11
F:1000
小结:
霍夫曼树是一种特殊的二叉树。
霍夫曼树应用于信息编码和数据压缩领域。
霍夫曼树是现代压缩算法的基础。