- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【优品课件】-《哈夫曼编码的研究跟实现》
哈夫曼编码的研究与实现
学生姓名: 指导老师:
摘 要 为巩固数据结构与C++程序设计知识,增强实际操作能力进行了本次课程设计。Huffman编码程序设计功能实现建立Huffman树、对文件的压缩及解压缩。基本满足了界面友好,易于操作的要求,因此更利于用户操作方便,运行简易。并能直观的反映数据处理的结果以便用户的研究
关键词 Huffman编码译码;C++;课程设计
1 引 言
Huffman编码程序设计功能实现建立Huffman树、对文件的压缩及解压缩。
1.1课程设计的背景
进入信息时代之后,信息的传递成为社会生活中至关重要的一部分,信息传递的技术也得到了巨大的发展。通常,所传递的信息有多种形式,包括语音、音乐、文字、图像、符号、数据甚至气味等,但最终可以归结为图像、语音和数据三种。信息时代一个很重要的特征就是数据的数字化,但是数字化以后的信息的数据量是非常大的。这样大的数据量,无疑给存储器的存储容量、通信干线的信道传输率以及计算机的速度都提出了很高的要求。这个问题是多媒体技术发展中的一个非常棘手的瓶颈问题。要解决这一问题,单纯用扩大存储器容量、增加通信干线的传输率的办法是不现实的,采用数据压缩技术才是行之有效的方法。通过数据压缩手段减少信息数据量,以压缩形式存储和传输,既节约了存储空间,又提高了通信干线的传输效率。数据压缩技术的研究受到人们越来越多的关注,从基本的无损压缩到语音,图像和视频信号等信号的有损压缩,数据压缩在人们的日常生活中发挥着越来越重要的作用。
1948 年,Shannon 在提出信息熵理论的同时,也给出了一种简单的编码方法– Shannon 编码。Shannon提出将信源符号依其出现的概率进行降序排列,用符号序列累计概率的二进制作为对信源的编码,并从理论上论证的了它的优越性。1952 年,R. M. Fano 又进一步提出了 Fano 编码。这些早期的编码方法揭示了变长编码的基本规律,也确实可以取得一定的压缩效果,但离真正实用的压缩算法还相去甚远。
第一个实用的编码方法是由 D. A. Huffman 在1952 年的论文”最小冗余度代码的构造方法(A Method for the Construction of Minimum Redundancy Codes)中提出的。至今,讨论二叉树时仍要提及这种被后人称为 Huffman 编码的方法。
1.2课程设计的意义
Huffman 编码效率高,运算速度快,实现方式灵活,从 20 世纪 60 年代至今,在数据压缩领域得到了广泛的应用。例如,早期 UNIX 系统上一个不太为现代人熟知的压缩程序 COMPACT 实际就是 Huffman 0阶自适应编码的具体实现。1960年伊莱亚斯( Peter Elias)发现无需排序,只要编、解码端使用相同的符号顺序即可,并提出了算术编码的概念。 伊莱亚斯 没有公布他的发现,因为他知道算术编码在数学上虽然成立,但不可能在实际中实现。1976年,帕斯科(R.Pasco)和 瑞萨尼恩(J.Rissanen)分别用定长的寄存器实现了有限精度的算术编码。 20 世纪 80 年代初, Huffman 编码又出现在 CP/M 和 DOS 系统中,其代表程序叫 SQ 。今天,在许多知名的压缩工具和压缩算法(如WinRAR,gzip和JPEG)里,都有 Huffman 编码的身影。不过, Huffman编码所得的编码长度只是对信息熵计算结果的一种近似,还无法真正逼近信息熵的极限。正是如此,现代压缩技术通常只将Huffman作为最终的编码手段而非数据压缩算法的全部。
2需求分析
2.1程序所能达到的基本功能
程序的主要功能是利用哈夫曼编码对数据进行无损压缩,实现Huffman压缩的编码器和译码器。具体功能有:
⑴建立并分析字母表,对每种字符的出现频度进行统计,以频度作为建立Huffman树的权值。
⑵建立Huffman树,并对读入的字符进行编码。
⑶计算压缩率。
⑷储存编码后的数据。
⑸对已经编码的数据进行译码,建立相关文件。
2.2输入形式和输出值的范围
在程序中主要有两种输入,一是手动建立权值表,程序要求用户输入用户自己想要建立的权值表的字符和对应的权值,程序根据用户的输入信息自动建立Huffman数,所以要求输入正确的字符和整型权重;二是程序在解压文件时候要求输入文件名字,如果该文件在同一目录下则可以不输入路径,否则需要输入完整的路径。程序在读入文件后会输出其中的信息,压缩后所得到的编码,并且将编码写入一个文件中。
2.3 输出的形式
程序中设置有两个输出,都是建立了文件流之后,分别以二进制和文本形式把编码信息和译码结果写入文件中。
2.4测试数据的要求
在程序的测试中,用户可输入少量的字符进行建表
文档评论(0)