- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实训报告
题 目: 哈夫曼编码和译码系统
院 系:
专 业:
姓 名:
学 号:
指导教师:
日 期:
目录
一. 需求分析····································2
二. 概要设计
(1) 建立哈夫曼树 、编码······················3
(2) 字符匹配·································3
(3) 哈夫曼树遍历·····························3
三. 详细设计及编码实现··························3
四. 流程图
(1) 总流程图·································15
(2) 编码实现流程图···························16
(3) 译码实现流程图···························17
五. 调试分析
(1)计算权值···································18
(1)生成哈夫曼树,建立编码表···················18
(3)将输入字符编码·····························19
(4)输入新的字符串,进行译码···················19
(5)输入新的二进制数将其译为字符 ··············20
六. 系统维护······································20
七.实验总结······································20
八. 源代码········································21
一.需求分析
《1》问题描述:在传送电文时,人们总是希望传送时间尽可能短,这就是
要求使电文代码长度尽可能短。利用哈夫曼编码进行通信可以大大提高信道利用
率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系
统能够对待传输数据预先编码,在接收端将传来的数据进行译码。对于双工信道
(即可以双向传输信息的信道),每段都需要一个完整的编/译系统。所以为这样
的信息收发站写一个哈夫曼的编译码系统。
《2》打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们
作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。
问题补充:
1. 从硬盘的一个文件里读出一段英语文章。
2. 统计这篇文章中的每个字符出现的次数。
3. 以字符出现字数作为权值,构建哈夫曼树,并将哈夫曼树的存储 结构的
初态和终态进行输出。
4. 对每个字符进行编码并将所编码写入文件然后对所编码进行编译。
《3》这个哈夫曼编码译码主要是以英文字母输入进行编码与编译,编码译
码过程由系统自动完成,人工操作部分就是电文的录入,和编译出来时的读操作。
二.概要设计
本程序主要用到了三个算法。
(1)哈夫曼树建立、编码
在初始化(I)的过程中间,要用输入的字符和权值建立哈夫曼树并求得
哈夫曼编码。先将输入的字符和权值存放到一个结构体数组中,建立哈夫
曼树,将计算所得的哈夫曼编码存储到另一个结构体数组中。
(2)串的匹配
在编码(D)的过程中间,要对已经编码过的代码译码,可利用循环,将
代码中的与哈夫曼编码的长度相同的串与这个哈夫曼编码比较
(3)哈夫曼遍历
在印哈夫曼树(T)的中,因为哈夫曼树也是二叉树,所以就要利用二
叉树的先序遍历将哈夫曼树输出。
三.详细设计及编码实现
构造哈夫曼树的方法如下:
初始化:每个字符就是一个结点,字符的频度就是结点的权;
1、将结点按频度从小到大排序;
2、选取频度最小的两个结点,以它们为儿子,构造出一个新的结点;新结点
的权值就是它两个儿子的权值之和;构造之后,从原来的结点序列里删除刚才选
出的那两个结点,但同时将新生成的结点加进去;
3、如果结点序列里只剩下一个结点,表示构造完毕,退出。否则回到第一步。
编码:
上面已经生成了树,接着就该对该树进行编码了。
文档评论(0)