#声明:本文创作内容含代码均为个人创作所得,允许学习、传阅,不得用于商业用途#
在图像,视频等压缩应用中,通过压缩方式可以加快传送速率,其中一个方式就是使用不同的编码方案。haffman编码方案的核心思想就是通过对于出现概率越高的字符采用更短的编码字长,而出现概率越低字符使用更长字长去表示。
举个例子:一个信息串“abaaeabcbbbecaadddaa”, 其中a出现的频率为:0.4, b出现的0.25,c出现的频率为:0.1,d出现的频率为:0.15, e出现的频率为:0.1,
编码过程:
1. 先将原始频率按照小到大排列, 0.1, 0.1, 0.15,0.25, 0.4
2. 将最小的两个频率相加得到新的排列频率,0.15, 0.2,0.25, 0.4
重复上述过程直到最后两个频率和为1 , 0.25, 0.35, 0.4
0.4 ,0.6
每次相加的两个频率分别编码为0, 1 ;
如下图所示:
最后abcde的编码分别是: 1, 01, 0000, 001, 0001 ,一共是用来1+2+2+3+4+4 = 16个bit,如果我们使用通用的二进制那就是2^3 * 5 = 40bit,所以huffman编码方案可以减少信息使用bit数,提高了传输效率;
abaaeabcbbbecaadddaa数据的编码结果是:101110001010000101000100001100100100111
那如何通过比特串解码数据呢?比如00101010010000101110101,那就需要每1bit和编码表对比,如果没有匹配上,那就再加上后面1bit去编码表查找,
例:0在没有对应的编码数字,那就再查找00,发现编码表中没有00这种编码,那就再查找001,而编码表中d的编码是001,于是我们找到了第一个编码符号d,然后再看剩下的01010010000101110101,同样从0开始匹配,发现01为a,然后再匹配剩下的,直到所有的bit全部匹配完成。