问题:
用二进制来编码字符串“abcdabaa”,需要能够根据编码,解码回原来的字符串,最少需要多长的二进制字符串?
分析:
哈弗曼编码根据字符出现的概率来构造平均长度最短的码字,是一种文本压缩算法。
1,先统计各字符出现的频率;
2,构造哈弗曼树,左边为0,右边为1,每次选取最小权的两棵树组成新树,直到最终形成一棵最优哈弗曼编码树。
此题,
4个a, 2个b,1个c,1个d
第一次,挑两个最小的 c 和 d
第二次,再挑选两个最小的
最后,组成一棵哈弗曼编码树。
所以,a 的编码是 0,b的编码是 10, c 的编码是110, d的编码是111.
最短是 1*4 + 2*2 + 3*1 + 3*1 = 14.