- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
软件工程学院
程序设计实践(下)实验
报告
题目:哈夫曼编码/译码器
姓名:张祺
学号
班级:软件工程3班
一、问题解析(对问题的分析、解题思路与解题方法)
问题主要分为三部分,分别是文件的操作、界面的设计、文件
的压缩,其中界面的设计和文件的压缩又是基于哈弗曼编码的,因此,
构造哈弗曼树和获取哈弗曼编码是程序的关键。
1、文件的操作:
程序中文件的操作主要是文件的读和写,关于这点,基本上没
有遇到什么问题。
2、界面设计
前面已经提到,界面设计是基于哈弗曼树和哈弗曼树的小时,
我分到了这一块,下面做介绍。
由于哈弗曼树是正则二叉树,即对于每个结点,要么其左右孩子都存
在,要么都不存在。但对于树形结构来说,其变化多端,每一行的结
点数不确定,虽然第二层(第一层只有根结点)和最后一层结点数没
有任何确定的关系,但他们之间却有相互制约关系,即底层结点的个
数关系着上层(尤其是第二、三层)结点之间的距离,这也是最难把
握的地方。
最初,我用矩阵保存同一层结点之间的关系,但后来发现,兄弟结点
的关系容易获得,但如果两结点不是兄弟结点而是堂兄结点时,这种
关系就比较难找了,再不理想一点,如果两结点在的根结点父节点来
自不同的结点,这种关系就更难确定了。
然后,我又想想到了从根结点出发仿照先序遍历的原理逐个打印
结点的信息。很快,我发现,这种方法也是不行的,原因在于在先序
遍历时可也借助栈或者递归栈来储存后面要访问的元素。但是想要找
到这个元素的具体位置比较难,所以这种方法也很快被否认。
一直找不到可行的办法,想过用打表,也想过放弃。但是实在不想,
一个原因是这是我的任务,如果我放弃或者做的不够完美,这将会影
响我们组所有同学的成绩。另一个原因就是我一直认为,只要是能想
的到的,就能用代码实现,这也是编程的精髓。无奈之下,我开始查
找资料,突然,一张满二叉树的图片(其实是一张家谱图)给了我灵
感。我为什么要根据结点选位置呢?完全可也根据位置确定这点的结
点啊……所以我的最初构想是先打印出一个树形结构,然后根据每个
结点的信息,将其输出到指定的位置,最后我就是用这种方法做到的。
3、构造哈弗曼树、获取哈弗曼编码
构造哈弗曼树的关键在于每次将权值最小的两个结点合并成一个
新结点,如此循环,直到只剩一个结点。在获取编码时,从每一个叶
子结点出发,访问哈弗曼树的根结点,所走过的路径刚好和编码相反。
二、任务分工及进度计划
我们组的成员还有王倩、求春磊、章力挺。最初分工时,王倩负
责文件的读写操作;求春磊负责文件的编码压缩这一块;章力挺负责
构造哈弗曼树、获取哈弗曼编码这一块;我负责疏导图形化输出、界
面这一块。
总体来说,小组的进度比较慢,原因在于第一个程序还没写好。
而且我的任务在中间,只有有了哈弗曼编码才能进行树形结构的输
出,所以在开始时,前面的问题我也解决了。下面谈谈我的见解。
文件的读写基本上没有什么大的问题,在统计字符频率时,我统
计了128个常见字符,用了点小算法,效率比较高。在构造哈弗曼树
时出现了瓶颈。究其原因,主要是以前没有接触过哈弗曼树,只有老
师在上课时提到过,所以,面对一个新问题,首先需要时间去熟悉。
等到哈弗曼树构造完成,获取编码也就相应比较简单了
三、数据结构选择、算法设计
前面已经提到,这个程序我基本上全都做了,现在就出现的问题
分析。
1、统计字符频率
常见的字符有128个,如果检索一个一个判断,那样的代价
会很大的。由于128个字符分别对应1~~128的ASCII码值,所
以可以定义一个128单元的数组,用字符代替下标。这样一来,
对于每一个字符,其计算频率其出现一次,下标为该字符的元素
递增1。这样可以高效的简单的统计每一个字符出现的频率。
2、构造哈弗曼树、获取哈弗曼编码
在问题分析中叶提到,构造哈弗曼树的关键是每次将两个
权值最小的结点合并成一个新的结点。教材上采用0号元素不用,
通过判断结点的父结点是否为0确定该结点是否要被计算。在我
的计算中,我用0号结点,而且另外开辟了一个存放结点权值的
副本数组,这
您可能关注的文档
- 热力学中的热容和比热容.pdf
- 新视野大学英语读写教程4课后习题文本.pdf
- 调频接收机设计报告.pdf
- 软件工程课程设计报告16352.pdf
- 职教云机上服务(实践)答案详解.pdf
- 新疆阿克苏地区小学数学小学奥数系列6-2-3溶液浓度问题专练2.pdf
- 当代艺术的十五个论题.pdf
- 法律服务合同(房地产项目)标准版本.pdf
- 环境工程技术.pdf
- 建筑施工与管理专业毕业大作业要求.pdf
- 英语人教PEP版八年级(上册)Unit4+writing+写作.pptx
- 人美版美术四年级(上册)8 笔的世界 课件 (1).pptx
- 人美版美术七年级(上册)龙的制作.pptx
- 英语人教PEP版六年级(上册)Unit 2 第一课时.pptx
- 数学苏教版三年级(上册)3.3 长方形和正方形周长的计算 苏教版(共12张PPT).pptx
- 音乐人教版八年级(上册)青春舞曲 课件2.pptx
- 音乐人教版四年级(上册) 第一单元 音乐知识 附点四分音符|人教版.pptx
- 英语人教PEP版四年级(上册)Unit 6 Part B let's learn 1.pptx
- 道德与法治人教版二年级(上册)课件-3.11大家排好队部编版(共18张PPT).pptx
- 人美版美术七年级(上册)《黄山天下奇》课件1.pptx
文档评论(0)