霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。
霍夫曼编码具体步骤:
1、将信源符号的概率按减小的顺序排序
2、把两个最小的概率相加,始终将比较大的概率的分支放在右边,继续这一步骤(选取根节点权重最小的两棵树合并)
3、画出到每个信源符号的路径,(左0右1)得到每个信源符号的霍夫曼码
如:由6个不同字母组成的30个的字符串:CCABD EAFDD AACEE BBACA EFAAB CCCEA
1、计算每个字母的概率
A-----------------9
C-----------------7
E-----------------5
B-----------------4
D-----------------3
F-----------------2
2、将概率最小的相加并将较大概率分支放在右边
3、按左0右1的原则画出每个信源符号路径,得下图
获得每个字符的编码:
A-----------------9-----------------10
C-----------------7-----------------01
E-----------------5-----------------111
B-----------------4-----------------110
D-----------------3-----------------001
F-----------------2-----------------000
EG:
某通信码中只会出现8中字符,其概率分别是0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,若对其进行霍夫曼编码,其霍夫曼树的高度是?
计算字符概率:
b-----------------29
f-----------------23
e-----------------14
h-----------------11
d-----------------8
c-----------------7
a-----------------5
g-----------------3
霍夫曼树为:
所以高度是4