...
总得来说,如果给出了一些待编码的项和它们的出现频率,就可以通过哈夫曼编码来给每个项设置一个编码值,这个编码值可以保证是唯一的,且编码后的总长度最短,也就是sum{每个项的长度 * 出现频率}
值最小。以下是一个示例,针对字符进行哈夫曼编码:
字符 | a | b | c | d | e | f |
---|---|---|---|---|---|---|
频率 | 0.05 | 0.32 | 0.18 | 0.07 | 0.25 | 0.13 |
编码后的结果:
字符 | a | b | c | d | e | f |
---|---|---|---|---|---|---|
频率 | 1000 | 11 | 00 | 1001 | 01 | 101 |
假设一篇文档只包括这几个字符,那么以上面的编码来进行保存,可以保证得到的文档大小一定是最小的,而且能够无歧义地反解析出文档的内容。假设一篇文档只包括这几个字符,那么以上面的编码来进行保存,可以保证得到的文档大小一定是最小的,而且能够无歧义地通过唯一前缀来解析出文档的内容。
哈夫曼编码将所有的待编码字符作为叶子节点,将该字符的频率作为叶子节点的权值,以自底向上的方式,通过n-1次“合并”构造哈夫曼树。
...