哈夫曼编码C语言程序设计课程设计报告
哈尔滨工业大学学院
20本科《课程设计》报告
项目题目:
班 级:
项目组编号: 班第组
项目组成员: 姓名 学号
杜嘉诚 6120610319
指导教师:
开始日期: 20年月日
完成日期: 20年月日
目 录
2012C语言程序设计课程设计》评价表I
哈尔滨工业大学课程设计任务书II
第1部分 项目开发计划1
第2部分 系统分析2
第3部分 系统设计3
第4部分 系统实现及测试4
第5部分 项目总结5
参考文献6
附录1 函数总表7
附录2 全局变量及主函数代码7
附录3 部分重要代码7
2012级本科《课程设计》评价表
题 目指导老师项 目 内 容 简 介(0字)
学 号姓 名项目组内角色职责贡献排平时扣成 绩评 委 评 分评选项得分项目规模、技术难度、工作量(20分)项目文档及报告(20分)项目实现结果(可运行演示)(20分)答辨表现(30分)团队分工与协作情况(10分)项目总分(100分)项目评价项目规模及工作量(□饱满、□达到要求、□不饱满);项目实现结果 (□良好、□有小问题、□错误较多);项目文档及报告撰写(□规范、□较规范、□不规范、□未提交);答辩表示(□优秀、□良好、□一般、□较差) ,团队分工及协作(□很好、□较好、□一般、□较差)。签字课程负责人签字 答辩日期: 年月 日哈尔滨工业大学课程设计任务书
姓 名:
院 (系):专 业: 班 号: 任务起至日期: 20年月日 至 20年月 日
课程设计题目: 项目:
工作量:
工作计划安排:
同组设计者及分工:
第1部分 项目开发计划第部分 系统
1 需求分析:
设计一个哈夫曼编码压缩与解压缩程序。对一个ASCII编码
1.2.1压缩程序:
(1)从文件中读入任意;
统计不同字符在文章中出现的频率ASCII码中包含的字符如标点符号等。根据字符频率构造哈夫曼树.1 哈夫曼树的建立
哈夫曼树的创建是程序的根本,程序需要利用哈夫曼树来确定字符的编码建立密码表,同时也据此压缩文件。
哈夫曼树的抽象创建过程如下:
一、构成初始集合
对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F={T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。
二、选取左右子树
在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。
三、删除左右子树
从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。
四、重复二和三两步,
重复二和三两步,直到集合F中只有一棵二叉树为止。.2 产生代码
如图2-1,哈夫曼树的每一个叶子都代表着一个字符,我们可以规定从根节点向叶节点经历,经历左儿子,编码添0,若是右儿子编码添1,这样每一个叶子节点便会有一个确定的哈夫曼编码了。同时这种编码不会有读取不唯一的情况出现,因为每一个字符对应的叶子节点下方没有儿子,故不会有重合代码。
图-1 哈夫曼树与编码演示图
3.3 将编码后的文件按bit存储与解压
最容易实现的文件输出方式是将原文件中的每一个字符用相应的字符编码按0,1字符串形式输出为txt文件,解压缩时,也按char类型读取,使用getc()函数读取每一位0,1,然后每读到对应编码就输出字符,此种方法十分简单易行。但是问题在于原字符按1个char大小存储,而编码后肯定不止1个char的大小,故压缩后反而变大,这肯定达不到需要的效果。所以必须将文件中的0,1按