当前位置:文档之家› 哈夫曼编码的方法

哈夫曼编码的方法

1.哈夫曼编码的方法
编码过程如下:
(1) 将信源符号按概率递减顺序排列;
(2) 把两个最小的概率加起来, 作为新符号的概率;
(3) 重复步骤(1) 、(2), 直到概率和达到1 为止;
(4) 在每次合并消息时,将被合并的消息赋以1和0或0和1;
(5) 寻找从每个信源符号到概率为1处的路径,记录下路径上的1和0;
(6) 对每个符号写出"1"、"0"序列(从码数的根到终节点)。

2.哈夫曼编码的特点
①哈夫曼方法构造出来的码不是唯一的。

原因
·在给两个分支赋值时, 可以是左支( 或上支) 为0, 也可以是右支( 或下支) 为0, 造成编码的不唯一。

·当两个消息的概率相等时, 谁前谁后也是随机的, 构造出来的码字就不是唯一的。

②哈夫曼编码码字字长参差不齐, 因此硬件实现起来不大方便。

③哈夫曼编码对不同的信源的编码效率是不同的。

·当信源概率是2 的负幂时, 哈夫曼码的编码效率达到100%;
·当信源概率相等时, 其编码效率最低。

·只有在概率分布很不均匀时, 哈夫曼编码才会收到显著的效果, 而在信源分布均匀的情况下, 一般不使用哈夫曼编码。

④对信源进行哈夫曼编码后, 形成了一个哈夫曼编码表。

解码时, 必须参照这一哈夫编码表才能正确译码。

·在信源的存储与传输过程中必须首先存储或传输这一哈夫曼编码表在实际计算压缩效果时, 必须考虑哈夫曼编码表占有的比特数。

在某些应用场合, 信源概率服从于某一分布或存在一定规律
使用缺省的哈夫曼编码表有
解:为了进行哈夫曼编码, 先把这组数据由大到小排列, 再按上方法处理
(1)将信源符号按概率递减顺序排列。

(2)首先将概率最小的两个符号的概率相加,合成一个新的数值。

(3)把合成的数值看成是一个新的组合符号概率,重复上述操作,直到剩下最后两个符号。

5.4.2 Shannon-Famo编码
Shannon-Famo(S-F) 编码方法与Huffman 的编码方法略有区别, 但有时也能编
出最佳码。

1.S-F码主要准则
符合即时码条件;
在码字中,1 和0 是独立的, 而且是( 或差不多是)等概率的。

这样的准则一方面能保证无需用间隔区分码字,同时又保证每一位码字几乎有
1位的信息量。

2.S-F码的编码过程
信源符号按概率递减顺序排列;
把符号集分成两个子集, 每个子集的概率和相等或近似相等;
对第一个子集赋编码"0", 对第二个子集赋编码"1";
重复上述步骤, 直到每个子集只包含一个信源符号为止。

5.4.3 游程编码
游程编码(简写为RLE或RLC)是一种十分简单的压缩方法,它将数据流中连续出现的字符( 称为游程) 用单一的记号来表示。

例如,字符串
a b a C C C b b a a a a
可以压缩为
a b a 3c 2b 4a
游程编码的压缩效果不太好, 但由于简单, 编码/ 解码的速度非常快, 因此仍然得到广泛的应用。

许多图形和视频文件, 如 .BMP,.TIF 及 .AVI 等, 都使用了这种压缩。

5.4.4 算术编码
1.算术编码
算术编码把一个信源集合表示为实数线上的0 到1 之间的一个区间。

这个
集合中的每个元素都要用来缩短这个区间。

信源集合的元素越多,所得到的区间
就越小,当区间变小时,就需要更多的数位来表示这个区间,这就是区间作为代
码的原理。

算术编码首先假设一个信源的概率模型,然后用这些概率来缩小表示
信源集的区间。

2.举例说明算术编码过程
[ 例]设英文元音字母采用固定模式符号概率分配如下:
范围变成[0.2,0.26] 。

(3) 对下一个字符i 编号,i 的rangelow=0.5,rangehigh=0.6, 则:
low=0.2 +0.06 × 0.5=0.23
high=0.2 +0.06 × 0.6=0.236
即用[0.23,0.236] 表示数据串eai, 如果解码器知道最后范围是
[0.23,0.236 ]这一范围, 它马上可解得一个字符为e, 然后依次得到惟一
解a, 即最终得到eai 。

3.算术编码的特点
①不必预先定义概率模型, 自适应模式具有独特的优点;
②信源符号概率接近时, 建议使用算术编码, 这种情况下其效率高于Huffman 编码;
③算术编码绕过了用一个特定的代码替代一个输入符号的想法, 用一个浮点输出数值代替一个流的输入符号, 较长的复杂的消息输出的数值中就需要更多的位数。

④算术编码实现方法复杂一些, 但JPEG 成员对多幅图像的测试结果表明, 算术编码比Huffman 编码提高了5% 左右的效率, 因此在JPEG 扩展系统中用算术编码取代Huffman 编码。

相关主题