- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈弗曼压缩算法(附源程序)
(完全可以运行)
一、?课程设计目的
通过运用哈夫曼树的知识编写该压缩与解压软件,能使学生将所学
的理论知识应用起来,有效地运用到解决实际问题中去,提高学生的自
身的编程能力,从而达到学以致用的目的。
二、课程设计内容
1.应用系统分析,建立该系统的功能模块框图及界面的组织和设计;
2.分析系统中的各个函数及它们之间的关系;
3.根据问题描述,设计系统的结构体及各个函数;
4.设计哈弗曼树的构造算法和哈弗曼编码算法;
5.完成设计的系统各个应用模块;
6.将各个模块整合进行功能测试。
三、需求分析
哈弗曼压缩软件
1.需求分析目的
为明确软件需求、安排项目规划与进度、组织软件开发与测试,供设计人员、开发人员参考。
2. 项目开发计划
时间 开发内容 6月22日 读取文本文件,并统计文件中字母个数 6月23日 建立huffman树对文件,进行huffman编码 6月24日 压缩 6月25日 解压缩 3. 任务目标
能比较完善的对txt文件进行压缩和解压缩。
4. 数据字典
名称:字符频率
别名:weight
描述:读取文本文件,并统计文件中字母个数
定义:字符频率 = 字符 + 数量
名称:结点
别名:HTNode
描述:建立huffman树的叶子和非叶子结点
定义:结点 = 数量 + 字符 + 双亲结点 + 左孩子结点 + 右孩子结点
位置:编码文件
5. 功能划分
压缩
解压缩
四、概要设计
哈弗曼压缩软件
1 建立哈夫曼树。根据哈夫曼编码技术,可以将已经给出的字母的使用频率建立一个哈夫曼树,即以二叉树的形式将英文字母和空格存储。?2 编码。利用二叉树的遍历知识,左孩子用“0”表示,右孩子用“1”表示,将输入的一组英文句子进行编码。?3测试和输出。程序要求的测试的英文句子是:“knowledge is power”,输出每一个字母然后给出相应的哈夫曼编码。本程序输入字母以“#”结束。?4译码。本程序要求对已编码的数字能够给以反编码。
六、调试情况,设计技巧及体会
1.测试结论
能较好地进行压缩和解压
不足的是对最后所补的0未处理,解压会多出几个字符。
设计技巧
本软件可对字母、汉字可以实现共同压缩,压缩率在50%以上,压缩后对哈夫曼树进行保存,以便后面解压,对叶子结点只保存其字符、左孩子、右孩子,对非叶子结点保存左孩子和右孩子。解压时从根结点开始,利用哈夫曼树进行解压,遇到0,找左孩子,遇到1找右孩子,到叶子结点时,输出字符。
3.心得体会:
通过这次课题实验的程序实践,我实在获益匪浅!数据结构是上个学期开展的一门学科,学习好这门学科是非常重要的,在以后的程序设计方面这门学科能给我们很大的帮助。同时,学习这门学科也是艰辛的,因为它比较难懂,这不仅需要我们要发挥我们的聪明才志,还需要我们在不断的实践中领悟。
这次的程序设计对我来说无疑是一个具大的考验,从接起课题后,我就一直为实现程序而努力,翻阅相关书籍、在网上查找资料。因为开始时基础不是很好,过程中遇到了不少的阻碍,编写程序的进度也比较慢。虽然如此,但是通过自己的努力与老师的指导,我对这次实验的原理有了一定的理解,通过参照从网上找到的源程序,终于在其它源程序的基础下写出了本次实验的核心算法,并使其能够正常的运行。
这一个多月的设计工作,让我体会到了作为一个编程人员的艰难,一个算法到具体实现,再到应用层面的开发是需要有一段较长的路要走的,不是一朝一夕就可以实现的,而且在编好程序后,编程人员还要花很多的时间去完善它,其中包含的心酸,外人是不会明白的。
非常感谢在背后一直给我指导的老师和同学,他们的支持和鼓励让我在遇到挫折时能够站起来战胜它,也让我走到了今天这一步,完成了实验的设计。今后,我会更加努力的学习专业知识,提高自我的能力。
七、参考文献
《c语言程序设计》谭浩强主编
八、附录:源代码
#includestdio.h
#includestdlib.h
#includemalloc.h
#includestring.h
#includeio.h
typedef struct word
{
char word[3];
unsigned long times;
struct word *next;
}word,*word_list;
typedef struct Tnode
{
unsigned long weight;
char word[3];
long parent
文档评论(0)