概述:
1.计算每个字符出现的频率,得到频率表。
2.将最小的两个频率进行组合,画出哈夫曼树。
3.合并频率时,要给哈夫曼树的枝干赋值,可以给大的概率赋值1,小的赋值0,也可以相反,但前后必须一致。
核心:给出现频率高的字符较短的编码,出现频率低的字符较长的编码。用来缩短总码长。
例1:
已知频率表:
写出哈夫曼树和编码结果:(哈夫曼树可自己写)
tip:注意码长的含义,是指码字的位数。
计算平均码长:2×0.3+4×0.08+4×0.11+1×0.37+3×0.14=2.15(位)。而采用等长码长对5个字符进行编码需要的码长是3位。
前缀码:
1.表示最优前缀码的二叉树总是一棵完全二叉树,即树中任一结点都有2个儿子结点。
2.使平均码长达到最小的前缀码编码方案称为给定编码字符集C的最优前缀码。
3.哈夫曼提出构造最优前缀码的贪心算法,由此产生的编码方案称为哈夫曼编码。
哈夫曼编码的代码部分参考:https://blog.csdn.net/kelvinmao/article/details/51347755