L3-图论-第03课 哈夫曼树
哈夫曼编码
❝1951年,哈夫曼在麻省理工学院(MIT)攻读博士学位,他和修读信息论课程的同学得选择是完成学期报告还是期末考试。导师罗伯特·法诺(Robert Fano)出的学期报告题目是:查找最有效的二进制编码。1952年,哈夫曼发表论文《一种构建极小多余编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)中发表了这个编码方法。
❞
在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为 "Farris is not a Ferris wheel" ,这里用到的字符集为“f a r i s n o t e”,各字母出现的次数为{2,2,4,3,3,1, 1, 1, 1}。现要求为这些字母设计编码。要区分这些字母,如何编码才能让编码后长度最短吗?
![87d5af91b7c6ff891ca91e61c0b056f8.png](https://i-blog.csdnimg.cn/blog_migrate/4f4b33de689850bb29defbb63565ab7b.png)
字符 | 频率 | 编码 |
---|---|---|
i | 3 | 00 |
s | 3 | 01 |
f | 2 | 110 |
a | 2 | 111 |
n | 1 | 1000 |
o | 1 | 1001 |
t | 1 | 0110 |
e | 1 | 1011 |
让出现频率越高, 编码越短, 就可以得出最短编码.
前缀编码
前缀编码 是指对字符集进行编码时,要求字符集中任一字符的编码都不是其它字符的编码的前缀,
例如:设有abcd需要编码表示(其中,a=0、b=10、c=110、d=11,则表示110的前缀可以是c或者da&#x