- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于哈夫曼编码实现文本文件的压缩和解压缩实验报告模板精要
本科学生设计性实验报告
软件工程技能实践Ⅰ
项目组长 陈启 学号_ 0154225
专 业 软件工程 班级_15软件 7 班
成 员 陈启 杨林昌 邓志远 万胜
实验项目名称_
指导教师及职称_ _讲师 _ _
开课学期 2015 至 2016 学年 第二 学期
实验设计方案
实验名称:基于哈夫曼编码实现文本文件的压缩和解压缩 实验时间:2016-7-1—2016-7-7 实验场地:H113 成员角色:程序员:陈启 杨林昌 测试员:万胜 邓志远 文档员:杨林昌 邓志远 软件环境:Windows XP、VC++6.0
实验任务与目的(简单介绍实验内容,说明实验任务和目的)
1.1实验内容
根据ascii码文件中各ascii字符出现的频率情况创建Haffman树,再将各字符对应的哈夫曼编码写入文件中,实现文件压缩。对于给定的一组字符,可以根据其权值进行哈夫曼编码,并能输出对应的哈夫曼树和哈夫曼编码;实现哈夫曼解码。能够分析文件,统计文件中出现的字符,再对文件进行编码,实现文件的压缩和解压缩,能够对于文件的压缩,比例进行统计,能够打印文件。分析与设计哈夫曼树的存储结构,实现哈夫曼算法以及编码与译码基本功能,并对任意文本文件利用哈夫曼编码进行压缩得到压缩文件,然后进行解压缩得到解压文件。
1.2实验任务和目的
1.2.1了解文件的概念。
1.2.2掌握线性链表的插入、删除等算法。
1.3.3掌握Huffman树的概念及构造方法。
1.4.4掌握二叉树的存储结构及遍历算法。?
1.5.5利用Huffman树及Huffman编码,掌握实现文件压缩的一般原理。
实验思路(详细描述解决问题的整体思路、涉及的算法思想及数据结构等)
2.1整体思路
2.2涉及的算法思想及数据结构:
2.2.1输入要压缩的文件
首先运行的时候,用户主界面上有菜单提示该如何使用软件,根据菜单提示选择所要执行的 项,依次进行,因为各个环节之间有先后顺序。第一步为输入压缩软件的名称,由键盘输入文件路径和文件名称,读入字符数组中,打开该文件,按照提示进行压缩。若打不开,则继续输入。
2.2.2读文件并计算字符频率
文件将信息存放在字符数组中;计算每个字符出现的次数,申请一个结构体数组空间, 用读取的字符减去字符结束符作为下标记录字符的频率。
2.2.3根据字符的频率,利用Huffman编码思想创建Huffman树
将所记录的字符的频率作为权值来创建Huffman树,依次选择权值最小的两个字符作为左右孩子,其和作为父结点的权值,依次进行下去,直到所有的字符结点都成为叶子结 点。
2.2.4由创建的Huffman树来决定字符对应的编码,进行文件的压缩
根据创建的Huffman树来确定个字符的01编码,左孩子为0,右孩子为1。读取文件,依次将每个字符用他们的编码表示,即完成一次编码。
2.2.5解码压缩即根据Huffman树进行译码
读取编码文件,依据创建的Huffman树,定义一个指针指向根结点。从根结点开始,每读一个字符,指针变化一次(当读取的字符是‘1’时,指针指向当前所指结点的右孩子,当读取的字符是‘0’时,指针指向当前所指结点的左孩子),直至该指针所指结点为叶子结点时结束(即当结点的左右孩子均为空时)。将当前叶子结点所代表的字符值输出到译码文件中,依次读取编码文件中的字符,按照上述方法依次进行下去直至文件
2.2.6Huffman算法
(1)根据给定的n个权值{}构成n棵二叉树的集合F={},其中每棵二叉树中只有一个带权为的根结点,其左右子树为空。
(2)在F中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。
(3)在F中删除这两棵树,同时将新达到的二叉树加入F中。
(4)重复(2)和(3),直到F只含一棵树为止。
2.2.7Huffman编码
假设每种字符在电文中出现的次数为,其编码长度为,电文中只有n种字符,则电文总长为。对应到二叉树上,若置为叶子结点的权,恰为从根到叶子结点的路径长度,则恰为二叉树上的带权路径长度。由此可见,设计电文总长最短的二进制前缀编码即为以n种字符出现的频率做权,设计一棵Huffman树的问题,由此得到的二进制前缀编码即为Huffman编码。
2.2.8 压缩过程
前提:与输入的路径对应的文件为txt格式。
(1)构造Huffman树:算法如3.2.1所示。
(2)将Huffman树编码:初始化编码数组,并遍历Huffman树,得到各个字符的编码,并保存为.txt文件。
(3)将.txt文件中的内容读取出来,找到对应的Huffman编码,
您可能关注的文档
- 四川省2016中考化学考点聚焦第25讲专题三物质的鉴别与推断课件分析.ppt
- 基于UC3909芯片对铅酸蓄电池的充电管理方案精要.docx
- 基于Proe的活塞有限元分析实例精要.docx
- 基于SystemView的PM系统设计精要.doc
- 四川省2016中考化学考点聚焦第21讲化学肥料课件分析.ppt
- 四川省2016中考化学考点聚焦第20讲生活中常见的盐课件分析.ppt
- 四川省2016届高三上学期语文滚动限时练九Word版含解析分析.doc
- 基于MATLAB的AM信号的调制与解调精要.docx
- 四川广安爱众股份有限公司电力事业部电量销售报告分析.pptx
- 基于STM32的模数结合简易波形发生器精要.docx
文档评论(0)