今天学到了哈夫曼编码,简单理解记忆一下。
举个例子:
这里有个文本
aaaabbbcce
其中a出现的概率为0.4,b为0.3,c为0.2,d为0.1
首先我们先定义两个规则:
1.上支路为0,下支路为1
2.概率相等时,合并过的概率在上支路
好,我们开始合并,首先从最小的两个开始
1.d和c合并,值为0.3.因为d(0.1)比c(0.2)小,所以合并时候c在d上面,为上支路。根据我们之前定义的规则上支路为0,下支路为1。c首位编码为0,d首位编码为1
2.cd(0.3)和b(0.3合并)。两个概率相等,根据之前定义的规则概率相等时,合并过的概率在上支路,所以cd(0.3)在上支路,b(0.3)在下支路。现在得出cd的第二位编码为0,b的首位编码为1。
3.bcd(0.6)和a(0.4)合并。bcd为上支路,a为下支路。cd第三位编码为0,b第二位编码为0,a首位编码为1
最终结果
a 1
b 01
c 000
d 001
abdc
0/ \1
bdc(0.6) a(0.4)
0/ \1
dc(0.3) b(0.3)
0/ \1
c(0.2) d(0.1)