您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Huffman霍夫曼编码
4.2霍夫曼编码霍夫曼编码(HuffmanCoding)是一种编码方法,霍夫曼编码是可变字长编码(VLC)的一种。1952年,DavidA.Huffman在麻省理工攻读博士时所提出一种编码方法,并发表于《一种构建极小多余编码的方法》(AMethodfortheConstructionofMinimum-RedundancyCodes)一文。霍夫曼编码介绍DavidA.Huffman该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。1951年,霍夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。导师RobertM.Fano给他们的学期报告的题目是,查找最有效的二进制编码。由于无法证明哪个已有编码是最有效的,霍夫曼放弃对已有编码的研究,转向新的探索,最终发现了基于有序频率二叉树编码的想法,并很快证明了这个方法是最有效的。由于这个算法,学生终于青出于蓝,超过了他那曾经和信息论创立者克劳德·香农共同研究过类似编码的导师。霍夫曼使用自底向上的方法构建二叉树,避免了次优算法Shannon-Fano编码的最大弊端──自顶向下构建树。霍夫曼(Huffman)编码是一种统计编码。属于无损(lossless)压缩编码。以霍夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。根据给定数据集中各元素所出现的频率来压缩数据的一种统计压缩编码方法。这些元素(如字母)出现的次数越多,其编码的位数就越少。广泛用在JPEG,MPEG,H.2X等各种信息编码标准中。霍夫曼编码的步骤霍夫曼编码的具体步骤如下:1)将信源符号的概率按减小的顺序排队。2)把两个最小的概率相加,并继续这一步骤,始终将较高的概率分支放在上部,直到最后变成概率1。3)将每对组合的上边一个指定为1,下边一个指定为0(或相反)。4)画出由概率1处到每个信源符号的路径,顺序记下沿路径的0和1,所得就是该符号的霍夫曼码字。信源熵的定义:概率空间中每个事件所含有的自信息量的数学期望称信源熵或简称熵(entropy),记为:)(log)(])(1[log)]([)(122iniiiiapapapEaIEXHniiiapap11)(,0)(单位:以2为底的对数时是比特/符号(bit/symbol);以e为底的对数时是奈特/符号(nat/symbol);以10为底的对数时是哈特/符号(hart/symbol)其中表示某个事件xi的信息量。I(xi)=-logp(xi)平均码长编码效率例:现有一个由5个不同符号组成的30个符号的字符串:BABACACADADABBCBABEBEDDABEEEBB计算(1)该字符串的霍夫曼码(2)该字符串的熵(3)该字符串的平均码长H(S)=(8/30)×log2(30/8)+(10/30)×log2(30/10)+(3/30)×log2(30/3)+(4/30)×log2(30/4)+(5/30)×log2(30/5)=(44.3136-24.5592)/9.0308=2.1874(Sh)例:平均码长:=(2×8+2×10+3×3+3×4+2×5)/30=2.233位/符号类似书中例4-61.042.01.042.02.032.02.02.024.04.04.014.04.06.054321sssss000011110011001000001154321sssss965.0/)(LSH)/(2.2)(51信源符号码元iilsPL霍夫曼编码的主要特点:1.霍夫曼编码构造的码字不唯一;2.霍夫曼编码是变长编码,硬件实现比较困难;3.采用霍夫曼编码,要传送编码表,占用传送时间;4.霍夫曼编码是变长编码,出错时难以识别;霍夫曼编码方法不唯一,因为编码时的0和1是任意给的,另外在两个符号有相同概率时的编码过程不唯一,造成编码结果不同,但平均码长相同。其次对信源进行缩减时两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减信源中进行概率排序,其位置放置次序是可以任意的,故会得到不同的霍夫曼码此时将影响码字的长度,一般将合并的概率放在上面,这样可以获得较小的码方差。霍夫曼树1、有关霍夫曼树的相关概念霍夫曼树:指所有叶子结点的二叉树中带权路径长度最小的二叉树。节点的带权路径长度:从树的根节点到该节点的路径长度与该节点权的乘积。树的带权路径长度:树中所有叶子结点的带权路径长度之和。2、霍夫曼算法(1)根据给定的n个权值{w1,w2,...,wn}构造n棵二叉树的集合F={T1,T2,...,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树均空。(2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根结点的权值之和。(3)在F中删除这两棵树,同时将新得到的二叉树加入F中。(4)重复(2)和(3),直到F中只含一棵树为止。这棵树便是最优二叉树。当信源符号的出现概率为2的整数次幂时霍夫曼编码的效率才能达到100%。当符号出现概率不是2的整数次幂时编码效率下降。香农第一定理:(又称为变长编码定理)设离散无记忆信源S包含r个符号,信源发出N重符号序列,则此信源可发出个不同的符号序列消息,其中第j个符号序列消息的出现概率为,其信源编码后所得的},,,,{21NqiNqjP信源编码基本定理二进制代码组长度为,代码组的平均长度为它满足jlNqjjjNlPL1rSHNLNrSHNlog)(1log)(当N趋于无限大时,和H(S)之间的关系为)(limSHNLNNNL书中例4-8JEPEG采用将码字截断为“前缀码(SSSS)+尾码”的方法,对码表进行了简化:霍夫曼编码不仅适用于压缩文本文件,经过符号合并后也可用于二进制文件。但在实用中,霍夫曼编码的输入符号数常受限于可实现的码表大小。截断霍夫曼编码尾码为DIFF的B位原码,若DIFF0反码,若DIFF0前缀码用来指明尾码的有效位数(设为B位),用标准的霍夫曼编码;尾码则直接采用B位自然二进码(对于给定的前缀码它为定长码,高位在前)。对于8位量化的图像,SSSS值的范围为0~11,故其码表只有12项。根据DIFF的幅度范围由表4.2查出前缀码字和尾码的位数后,则可按以下规则直接写出尾码的码字,即在静态霍夫曼编码中,要构造编码树必须提前统计被编码对象中的符号出现概率,因此必须对输入符号流进行两遍扫描,第一遍统计符号出现概率并构造编码树,第二遍进行编码,这在很多实际应用的场合中之不能接受的。其次,在存储和传送霍夫曼按此规则,当DIFF0时,尾码的最高位是“1”;而当DIFF0时则为“0”。解码时则可借此来判断DIFF的正负。书中例4—9自适应霍夫曼编码提出的目的和意义:编码时,必须先存储和传送霍夫曼编码树。再次,静态编码树构造方案不能对输入符号流的局部统计规律变化做出反应。这些问题使得静态霍夫曼编码在实际中并未得到广泛的应用。为了解决静态Huffman编码的缺点,人们提出了自适应Huffman编码这种方案不需要事先扫描输入符号流,而是随着编码的进行同时构造Huffman树,因此,只需要进行一次扫描即可。在接收端伴随着解码过程同时进行着编码树的构造。自适应霍夫曼编码解决了静态编码树所面临的主要问题,因此在实际领域比如在高质量的图像和视频流传输中中获得了广泛的应用。自适应霍夫曼编码的原理:这种方案在不需要事先构Huffman树,而是随着编码的进行,逐步构造Huffman树。同时,这种编码方案对符号的统计也动态进行,随着编码的进行,同一个符号的编码可能发生改变(变得更长或更短)。由于自适应Huffman编码算法采用了先编码,后调整编码树的方案,相应的解码算法比较简单。解码算法也使用仅有唯一的NYT节点的编码树作为初始状态,然后根据Huffman编码数据流,对符号进行还原。每次处理完一个符号,就使用这个符号调整编码树。这样,在每一次输入新的符号之前,Huffman树都处于与进行编码时使用的的Huffman树完全相同的状态,保证了解码的正确性。自适应霍夫曼编码是一种扩展的熵编码方法,相比于先前的静态霍夫曼编码,自适应霍夫曼编码具有仅需单遍扫描、无需传送编码树、能够对输入符号流的局部统计规律变化做出反应等一系列优点,具有更高的压缩效率。这些优点使得它在一些实时性、可靠性要求比较高的场合得到了广泛的应用,被称为近代压缩算法的灵魂。利用霍夫曼编码,每个符号的编码长度只能为整数,所以如果源符号集的概率分布不是2负n次方的形式,则无法达到熵极限。输入符号数受限于可实现的码表尺寸译码复杂需要实现知道输入符号集的概率分布没有错误保护功能霍夫曼编码的局限性
本文标题:Huffman霍夫曼编码
链接地址:https://www.777doc.com/doc-3903520 .html