哈夫曼编码及其应用论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
青岛农业大学本科生课程论文
题目:哈夫曼编码及其应用姓名:
学院:
专业:
班级:
学号:
指导教师:
2012 年06 月27 日
青岛农业大学课程论文任务书
论文题目哈夫曼编码及其应用
要求完成时间 2012年 06 月 29 日
论文内容(需明确列出研究的问题):研究哈夫曼编码的目的就是为了更深入的了解哈夫曼编码,更好的了解哈夫曼编码的作用,更好地使用它解决现实生活中的问题。假设已知一个信源的各符号概率,编写适当函数,对其进行哈夫曼编码,得出二进制码字,平均码长和编码效率,总结此编码方法的特点和应用。
资料、数据、技术水平等方面的要求论文要符合一般学术论文的写作规范,具备学术性、科学性和一定的创造性。文字要流畅、语言要准确、论点要清楚、论据要准确、论证要完整、严密,有独立的观点和见解。内容要理论联系实际,计算数据要求准确,涉及到他人的观点、统计数据或计算公式等要标明出处,结论要写的概括简短。参考文献的书写按论文中引用的先后顺序连续编码。
指导教师签名:年月日
哈夫曼编码及其应用
信息与计算科学专业(姓名)
指导教师(老师姓名)
摘要:哈夫曼在1952年提出了一种构造最佳码得方法,我们称之为哈夫曼编码(Huffman Coding)。哈夫曼编码适用于多远独立信源,对于多元独立信源来说它是最佳码。但其存在的不足直接制约了它的广泛应用。范式哈夫曼编码及译码算法的出现, 解决了其应用的不足。本文主要介绍了哈夫曼编码及范式哈夫曼编码的诸多应用。
关键词:哈夫曼编码;应用;范式哈夫曼编码;多元哈夫曼编码
Huffman coding and its application
Student majoring in Information and Computing Science Specialty (英文名)
Tutor (老师英文姓名)
Abstract: in 1952 Huffman proposes a structure optimal coding method, we call the Huffman code ( Huffman Coding ). Huffman coding applied to how far the independent source for multiple independent sources, it is the optimal code. But its shortcomings directly restrict its wide application. Canonical Huffman coding and decoding algorithm, solves the shortcomings of the application. This paper mainly introduced the Huffman coding and Huffman coding of many application paradigm.
Key words :The Huffman code Application Canonical Huffman coding Multiple Huffman coding
引言:哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。
1.哈夫曼编码的简单应用
哈夫曼编码是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。在计算机信息处理中,“哈夫曼编码”是一种一致性编码法(又称"熵编码法"),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。例如,在英文中,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去 25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z则使用了 3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。
2.范式哈夫曼编码及其应用
2.1概念介绍
哈夫曼编码是一种最优的前缀编码技术,然而其存在的不足却制约了它的直接应用。首先,其解码时间为O(lavg), 其中lavg为码字的平均长度;其次,更为最重要的是,解码器需要知道哈夫曼编码树的结构,因而编码器必须为解码器保存或传输哈夫曼编码树。对于小量数据的压缩而言,这是很大的开销。因而,应用哈夫曼编码的关键是如何降低哈夫曼编码树的存储空间。Faller[1973]提出的自适应哈夫曼编码技术使哈夫曼编码树的存储空间降为零,即在使用某种约定的情况下,解码器能动态地重构出和编码器同步的哈夫曼编码树,而不需要任何附加数据。这样做的代价便是时间开销的增大。另一种技术是编码器和解码器使
用事先约定的编码树,这种方法只能针对特定数据使用,不具备通用性。另外一种,也是最为常用的方法,便是范式哈夫曼编码。现在流行的很多压缩方法都使用了范式哈夫曼编码技术,如GZIB、ZLIB、PNG、JPEG、MPEG等。
范式哈夫曼编码最早由Schwartz[1964]提出,它是哈夫曼编码的一个子集。其中心思想是:使用某些强制的约定,仅通过很少的数据便能重构出哈夫曼编码树的结构。其中一种很重要的约定是数字序列属性(numerical sequence property),它要求相同长度的码字是连续整数的二进制描述。例如,假设码字长度为4的最小值为0010,那么其它长度为4的码字必为0011, 0100, 0101, ...;另一个约定:为了尽可能的利用编码空间,长度为i第一个码字f(i)能从长度为i-1的最后一个码字得出, 即: f(i) = 2(f(i-1)+1)。假定长度为4的最后一个码字为1001,那么长度为5的第一个码字便为10100。最后一个约定:码字长度最小的第一个编码从0开始。通过上述约定,解码器能根据每个码字的长度恢复出整棵哈夫曼编码树的结构。
2.2码字构造
假设有如下的码长序列:
符号:a b c d e f g h i j k ... u
码长:3 4 4 4 4 4 4 4 4 5 5 (5)
使用count[i]表示长度为i的码字的数目,first[i]表示长度为i的第一个码字的整数值。根据约定3,即first[3] = 0可得到符号a的范式哈夫曼编码为000。再根据约定2,可得到first[4] = 2*(first[3]+1) = 2,进一步可知b的编码为0010。由约定1可构造出符号c的编码为0011,由此类推可构造出整个码字空间如下:
a=000(0); f=0110(6); k=10101(21);
b=0010(2); g=0111(7); ...
c=0011(3); h=1000(8); u=11111(31);
d=0100(4); i=1001(9);
e=0101(5); j=10100(20);
其中first[3] = 0, first[4] = 0010b = 2, first[5] = 10100b = 20 2.3解法算法