原创 Huffman编码原理简介

2011-2-11 16:34 6022 6 8 分类: 软件与OS
分类: 技术文档 2008-10-20 20:31
Huffman编码原理简介
 
    今天有同学问我huffman算法原理,我本想就在网上找篇文章给他就解决了,没想到找了半天居然看到网上的huffman算法都只是随便copy了一些文章的段落就了事,又没有图片,有没有说明。虽然huffman编码不算难,但是我个人觉得还是写个简单的说明文档要容易让人懂。所以干脆我自己来写一个图文介绍吧!
以下是Huffman编码原理简介:
    霍夫曼(Huffman)编码是1952年为文本文件而建立,是一种统计编码。属于无损压缩编码。霍夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。这样,处理全部信息的总码长一定小于实际信息的符号长度。
    对于学多媒体的同学来说,需要知道Huffman编码过程的几个步骤:
    l)将信号源的符号按照出现概率递减的顺序排列。(注意,一定要递减)
    2)将最下面的两个最小出现概率进行合并相加,得到的结果作为新符号的出现概率。
    3)重复进行步骤1和2直到概率相加的结果等于1为止。
    4)在合并运算时,概率大的符号用编码0表示,概率小的符号用编码1表示。
    5)记录下概率为1处到当前信号源符号之间的0,l序列,从而得到每个符号的编码。
    下面我举个简单例子:
    一串信号源S={s1,s2,s3,s4,s5}对应概率为p={40,30,15,10,5},(百分率)
    按照递减的格式排列概率后,根据第二步,会得到一个新的概率列表,依然按照递减排列,注意:如果遇到相同概率,合并后的概率放在下面!
    最后概率最大的编码为0,最小的编码为1。如图所示:
    所以,编码结果为
    s1=1
    s2=00
    s3=010
    s4=0110
    s5=0111
    霍夫曼编码具有如下特点:
1) 编出来的码都是异字头码,保证了码的唯一可译性。
2) 由于编码长度可变。因此译码时间较长,使得霍夫曼编码的压缩与还原相当费时。
3) 编码长度不统一,硬件实现有难度。
4) 对不同信号源的编码效率不同,当信号源的符号概率为2的负幂次方时,达到100%的编码效率;若信号源符号的概率相等,则编码效率最低。
5) 由于0与1的指定是任意的,故由上述过程编出的最佳码不是唯一的,但其平均码长是一样的,故不影响编码效率与数据压缩性能。
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1442571 2011-2-28 19:48

前一段时间,看量化时候提到了矢量量化,能够更好的利用数据间的冗余,翻了一些信息论的书发现如果将霍夫曼编码进行一定扩展可以让霍夫曼编码变成一种矢量编码就可以让一般的霍夫曼编码无限接近墒率。

用户1442571 2011-2-16 14:42

补遗,昨天刚想起的:霍夫曼编码的实际意义就是把出现概率最大的数据用最短的码字进行编码,出现概率最小的数据用最长的码字表示,使编码后的码率接近墒。他的编码原理也很符合墒的性质,即出现概率最大的是事件携带的信息量最小,而不容易出现的事件携带大量的信息。就好像冬天下雪没什么,但是夏天下雪就变成了一件轰动事件一样。但是无论如何,码字是无法小于1个bit的,不知道有没有别的算法比霍夫曼编码更加接近墒的?
相关推荐阅读
用户1442571 2011-03-19 21:41
Gabor变换
Gabor变换属于加窗傅立叶变换,Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。另外Gabor函数与人眼的生物作用相仿,所以经常用作纹理识别上,并取得了较好的效果。   Gabor变换是...
用户1442571 2011-03-19 21:36
Gabor函数的再次理解
这些时间一直在研究学习Gabor变换,因为在做医学图像处理相关的课题,网上搜罗了几篇文献,发现对于Gabor基函数的描述各不相同。比如在我参考的文献中Gabor基函数的表述是: 而对于另一种表述,则是...
用户1442571 2011-03-19 21:27
高斯核函数的两点性质
       成功高斯核函数 K(x,y)=exp(-||x-y||2/2σ2) 在选择核函数时,若对给出的数据没有先验知识,RBF核就是最好的选择。为了研究为什么使用了核技巧的学习机器往往具有良好的...
用户1442571 2011-03-19 21:24
高斯核函数在图像滤波中的应用
是自己整理的一个读书笔记吧,一些参考别人的地方并没有标出。由于自己的水平有限,理解错误之处望大家指正。高斯(核)函数简介1函数的基本概念所谓径向基函数 (Radial Basis Function ...
用户1442571 2011-03-09 09:12
MATLAB元胞数组
元胞数组:     元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具...
用户1442571 2011-03-04 17:35
IIS BUS 原理
IIS有4条线:串行数据输入(IISDI)、串行数据输出(IISDO)、左右通道选择(IISLRCK)和串行位时钟(IISCLK)。产 生IISLRCK和IISCLK信号的设备称为主设备。   图1...
EE直播间
更多
我要评论
2
6
关闭 站长推荐上一条 /3 下一条