- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈夫曼编码课-程设计报告
G:\009
数据结构 课程设计报告
课 题:
专业班级:
学 号:
姓 名:
指导教师:
1 课程设计的目的和意义
在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。
哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。
通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度尽可能最短,即采用最短码。
2.需求分析
课 题:哈夫曼编码译码器系统
问题描述:打开一篇英文文章,统计该文章中每个字符出现的次数,然后以它们作为权值,对每一个字符进行编码,编码完成后再对其编码进行译码。
问题补充:1. 从硬盘的一个文件里读出一段英语文章;
2. 统计这篇文章中的每个字符出现的次数;
3. 以字符出现字数作为权值,构建哈夫曼树
4. 对每个字符进行编码并将所编码写入文件然后对所编码进行破译。
具体介绍:在本课题中,我们在硬盘D盘中预先建立一个file.txt文档,在里面编辑一篇文章(大写)。然后运行程序,调用fileopen()函数读出该文章,显示在界面;再调用tongji()函数对该文章的字符种类进行统计,并对每个字符的出现次数进行统计,并且在界面上显示;然后以每个字符出现次数作为权值,调用Create_huffmanTree()函数构建哈夫曼树。然后调用Huffman_bianma()函数对哈夫曼树进行编码,调用coding()函数将编码写入文件。
测试数据:例如从文本中读到文章为:IAMASTUDENT。
则效果如下:
读出文本为:IAMASTUDENT
字符A次数:2
字符D次数:1
字符E次数:1
字符I 次数:1
字符M次数:1
字符N 次数:1
字符S 次数:1
字符T次数:2
字符U次数:1
输出编码:000 101 001 101 011 110 100 1110 1111 010 110
Press any key to continue
3 系统(项目)设计
(1)设计思路及方案
本课题是用最优二叉树即哈夫曼树来实现哈夫曼编码译码器的功能。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长度为(W1*L1)+(W2*L2)+…+(Wi*Li)。若将此对应到二叉树上,Wi为叶结点,Li为根结点到叶结点的路径长度。那么,(W1*L1)+(W2*L2)+…+(Wi*Li)恰好为二叉树上带权路径长度。
因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。
该系统将实现以下几大功能:从硬盘读取字符串,建立哈夫曼树,输出哈夫曼树的存储结构的初态和终态,输出各种字符出现的次数以及哈夫曼编码的译码等。
(2)模块的设计及介绍
1从硬盘读取字符串
fileopen(参数)
{
实现命令;
打印输出;
}
2建立HuffmanTree
通过三个函数来实现:
void select_min(参数)
{
初始化;
for
{
接受命令;
处理命令;
}
}
说明:在ht[1....k]中选择parent为0且权值最小的两个根结点的算法
int tongji(参数)
{
初始化;
for
{
接受命令;
处理命令;
}
}
说明:统计字符串中各种字母的个数以及字符的种类
void Create_huffmanTree()
{
初始化;
for
{
接受命令;
处理命令;
}
输出字符统计情况;
}
说明:构造哈夫曼树
3哈夫曼编码
void Huffman_bianma(参数)
{
定义变量;
{
处理命令;
}
}
说明:哈夫曼编码
(3)主要模块程序流程图
下面介绍三个主要的程序模块流程图:
①主函数流程图:
结束统计字符种类及频率
结束
统计字符种类及频率
字符总数num
建立哈夫曼树
哈夫曼编码
打开文件?
开始
否
是
您可能关注的文档
最近下载
- (高清版)B-T 19889.7-2022 声学 建筑和建筑构件隔声测量 第7部分:撞击声隔声的现场测量.pdf VIP
- lesson8日语综合教程(第六册).ppt VIP
- 汽修资料-4JB1-VE泵柴油发动机维修手册.pdf VIP
- 2025年城市地铁轨道交通考试题库(附答案).pdf VIP
- 第五章焦炭工业分析.doc VIP
- 初中英语语法专题(精品讲练结合附答案.pdf VIP
- 2023年注册安全工程师《安全生产管理》.docx VIP
- 2025最新中国红十字会救护员培训理论考试试题+答案.docx VIP
- 轨道交通专业知识竞赛题库资料(职业技能竞赛通用)-600题(含各题型).pdf VIP
- ct室防护施工合同7篇.docx VIP
文档评论(0)