哈(霍)夫曼编码

哈(霍)夫曼编码原理

哈夫曼编码是一种异字头的可变字长编码,它依据出现的不同概率来构造平均长度最短的码字。编码的基本方法是先对信源符号进行扫描,统计出每个符号出现的概率,然后根据概率的大小来分配不同长度的码字,以此来构造一张编码表使得该信源符号平均长度最短。

举个例子,如果信源符号有u1,u2,u3,对应的概率分别为P1=0.2,P2=0.2,P3=0.6.

在编码时,首先将这三种符号按照从小到大的概率排序,从其中两个最小概率的信源符号开始,选其中一个支路标记为0,另外一个支路为标记1,接着将已经编码好的两条支路的概率进行合并,并进行重新排队。

不断重复上述过程,直到合并后概率加起来为1。最后将支路上遇到的0、1进行逆序排序,得到的编码就是该符号的哈夫曼码字。

如下图所示,u2的哈夫曼码字为“01”,哈夫曼编码将每个符号的码字记录下来,码字与信源符号的对应关系记为码表,如表1所示。

哈(霍)夫曼编码_第1张图片
图1. 哈弗曼编码原

但是,哈夫曼编码所得的结果并不是唯一的,在概率统计时,可能会出现两个信源符号概率相等的情况,导致排队的方法不唯一,另外一个原因就是在进行编码标记的过程中,0、1分支选择的不固定,就会使得可能出现不一样的编码结果。但总体来说出现概率高的字符都会被分配较短的码字,而较长的码字就会分配给出现概率低的字符,保证了按概率来分配码字并且使得平均码长最短,达到无损压缩数据的目的。

表1. 哈弗曼编码表:
哈(霍)夫曼编码_第2张图片

你可能感兴趣的:(算法,霍夫曼树)