霍夫曼编码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
霍夫曼编码
霍夫曼编码(Huffman Coding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。1952年,David A. Huffman在麻省理工攻读博士时所提出一种编码方法,并发表于《一种构建极小多余编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文。
该方法完全依据字符出现概率来构造异字头的平均长度最短的
码字,有时称之为最佳编码,一般就叫作Huffman编码。
在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。1951年,霍夫曼和他
在MIT信息论的同学需要选择是完成学期报告还是期末考试。
导师Robert M. Fano给他们的学期报告的题目是,查找最有效的二进制编码。由于无法证明哪个已有编码是最有效的,霍夫曼放弃对已有编码的研究,转向新的探索,最终发现了基于有序频率二叉树编码的想法,并很快证明了这个方法是最有效的。由于这个算法,学生终于青出于蓝,超过了他那曾经和信息论创立者克劳德·香农共同研究过类似编码的导师。霍夫曼使用自底向上的方法构建二叉树,避免了次优算法Shannon-Fano编码的最大弊端──自顶向下构建树。
霍夫曼(Huffman)编码是一种统计编码。属于无损(lossless)压缩编码。
以霍夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。
←根据给定数据集中各元素所出现的频率来压缩数据的
一种统计压缩编码方法。这些元素(如字母)出现的次数越
多,其编码的位数就越少。
←广泛用在JPEG, MPEG, H.2X等各种信息编码标准中。霍夫曼编码的步骤
霍夫曼编码的具体步骤如下:
1)将信源符号的概率按减小的顺序排队。
2)把两个最小的概率相加,并继续这一步骤,始终将较高的概率分支放在上部,直到最后变成概率1。
3)将每对组合的上边一个指定为1,下边一个指定为0(或相反)。4)画出由概率1处到每个信源符号的路径,顺序记下沿路径的0和1,所得就是该符号的霍夫曼码字。
信源熵的定义:
概率空间中每个事件所含有的自信息量的数学期望称信源熵或简称熵(entropy),记为:
例:现有一个由5个不同符号组成的30个符号的字
符串:BABACACADADABBCBABEBEDDABEEEBB
计算
(1) 该字符串的霍夫曼码
(2) 该字符串的熵
(3) 该字符串的平均码长
平均码长
编码效率
例:
类似书中例4-6
霍夫曼编码的主要特点:
1.霍夫曼编码构造的码字不唯一;
2.霍夫曼编码是变长编码,硬件实现比较困难;
3.采用霍夫曼编码,要传送编码表,占用传送时间;
4.霍夫曼编码是变长编码,出错时难以识别;霍夫曼编码方法不
唯一,因为编码时的0和1是任意给的,另外在两个符号有相同概率时的编码过程不唯一,造成编码结果不同,但平均码长相同。
其次对信源进行缩减时两个概率最小的符号合并后的概率与其
他信源符号的概率相同时,这两者
在缩减信源中进行概率排序,其位置放置次序是可以任意的,故会得到不同的霍夫曼码此时将影响码字的长度,一般将合并的概率放在上面,这样可以获得较小的码方差。
二进制代码组长度为,代码组的平均长度为
它满足
JEPEG采用将码字截断为“前缀码(SSSS)+尾码”的方法,对码表进行了简化:
霍夫曼编码不仅适用于压缩文本文件,经过符号合并后也可用于二进制文件。但在实用中,霍夫曼编码的输入符号数常受限于可实现的码表大小。
尾码为DIFF的B位
在静态霍夫曼编码中,要构造编码树必须提前统计被编码对象中的符号出现概率,因此必须对输入符号流进行两遍扫描,第一遍统计符号出现概率并构造编码树,第二遍进行编码,这在很多实际应用的场合中之不能接受的。其次,在存储和传送霍夫曼
按此规则,当DIFF≥0时,尾码的最高位是“1”;而当DIFF<0时则为“0”。解码时则可借此来判断DIFF的正负。
书中例4—9
编码时,必须先存储和传送霍夫曼编码树。再次,静态编码树构造方案不能对输入符号流的局部统计规律变化做出反应。这些问题使得静态霍夫曼编码在实际中并未得到广泛的应用。为了解决静态Huffman编码的缺点,人们提出了自适应Huffman编码这种方案不需要事先扫描输入符号流,而是随着编码的进行同时构造Huffman树,因此,只需要进行一次扫描即可。在接收端伴随着解码过程同时进行着编码树的构造。自适应霍夫曼编码解决了静态编码树所面临的主要问题,因此在实际领域比如在高质量的图像和视频流传输中中获得了广泛的应用。
自适应霍夫曼编码的原理:
这种方案在不需要事先构Huffman 树,而是随着编码的进行,逐步构造Huffman 树。同时,这种编码方案对符号的统计也动态进行,随着编码的进行,同一个符号的编码可能发生改变(变得更长或更短)。
由于自适应Huffman 编码算法采用了先编码,后调整编码树的方案,相应的解码算法比较简单。解码算法也使用仅有唯一的NYT 节点的编码树作为初始状态,然后根据Huffman编码数据流,对符号进行还原。每次处理完一个符号,就使用这个符号调整编码树。这样,在每一次输入新的符号
之前,Huffman 树都处于与进行编码时使用的的Huffman 树完全相同的状态,保证了解码的正确性。
自适应霍夫曼编码是一种扩展的熵编码方法,相比于先前的静态霍夫曼编码,自适应霍夫曼编码具有仅需单遍扫描、无需传送编码树、能够对输入符号流的局部统计规律变化做出反应等一系列优点,具有更高的压缩效率。这些优点使得它在一些实时性、可靠性要求比较高的场合得到了广泛的应用,被称为近代压缩算法的灵魂。
霍夫曼编码的局限性
利用霍夫曼编码,每个符号的编码长度只能为整数,所以如果源符号集的概率分布不是2负n次方的形式,则无法达到熵极限。
输入符号数受限于可实现的码表尺寸
译码复杂
需要实现知道输入符号集的概率分布
没有错误保护功能