《Huffman编码的应用数据结构》课程设计报告.docx
- 文档编号:849105
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:31
- 大小:423.21KB
《Huffman编码的应用数据结构》课程设计报告.docx
《《Huffman编码的应用数据结构》课程设计报告.docx》由会员分享,可在线阅读,更多相关《《Huffman编码的应用数据结构》课程设计报告.docx(31页珍藏版)》请在冰豆网上搜索。
《Huffman编码的应用数据结构》课程设计报告
重庆科技学院
《数据结构》课程设计
报告
学院:
_电气与信息工程学院_专业班级:
计科2010-01
学生姓名:
XXX学号:
201044****
设计地点(单位)___计算机基础自主学习中心____
设计题目:
_______Huffman编码的应用
完成日期:
2012年1月13日
指导教师评语:
____________________________________
_______________________________________________________________________________________________________________________________________
成绩(五级记分制):
________________
指导教师(签字):
________________
课程设计任务书
设计题目:
Huffman编码的应用
学生姓名
XXX
课程名称
数据结构课程设计
专业班级
计科2010-01
地点
计算机基础自主学习中心
起止时间
2011.12.31-2012.1.13
设计内容及要求
利用赫夫曼编码的实现原理码对数据进行无损压缩,设计一个实现Huffman压缩的编码和解码的程序。
具体要求如下:
1)读入待压缩的文本文件;
2)统计分析文本文件中各字符的出现频度,以频度作为构造Huffman树的权值。
3)根据各字符出现的不同频度构造Huffman树,然后规定每种字符的Huffman编码。
4)再次读入待压缩的文本文件,然后根据各字符的Huffman编码逐一替代,将得到的编码流写入到新的文件中,并且计算压缩率。
5)解码过程:
先读入上一步骤得到的新文件,将其看作比特流,根据Huffman树,对比特流逐位译码,将解码结果又写入一个新的文件中。
设计
参数
测试数据要求:
自行设计一个能说明压缩效果和过程的实例,待压缩的文本文件字符不能少于1000个。
进度
要求
2011.12.31完成任务的讲解、并接受课程设计任务,选定课程设计的题目
2012.01.04了解任务的算法、并画出算法的程序流程图,对任务的关键技术进行验证、并确定解决办法
2012.01.05-2012.01.06编制程序
2012.01.09对程序进行调试,设计测试用例进行测试
2012.01.10整理课程设计的过程、并进行总结,完善程序功能
2012.01.11编写课程设计报告初稿
2012.01.12完善课程设计报告、并准备答辨
2012.01.13提交课程设计报告和程序,进行答辨
参考资料
1.严蔚敏吴伟民,数据结构,清华大学出版社,2007.3
2.李春葆,数据结构教程,清华大学出版社,2005.1
3.(美)StephenPrata,CPrimerPlus中文版(第五版),人民邮电出版社,2005.2
其它
说明
1.本表应在每次实施前一周由负责教师填写二份,学院审批后交学院教务办备案,一份由负责教师留用。
2.若填写内容较多可另纸附后。
3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
系主任:
雷亮指导教师:
向毅/彭军/王双明/龙冯文/黄永文
2011年12月26日
摘要
随着多媒体技术的迅猛发展,压缩技术也快速发展起来。
Huffman高效率压缩编码,其压缩程度很高,目前在很多领域已经开始广泛应用,具有良好的市场前景。
这次课程设计运用的huffmam高效率编码,对编码译码,对文件进行逐位读,写。
实现压缩文件,再对文件进行解压。
实现了对数据的压缩及解压,并且可以运用在软件上面。
效果高效很实用。
关键字:
软件高效模块
1设计内容与要求
1.1设计内容
通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。
电报通信是传递文字的二进制码形式的字符串。
但在信息传递时,总希望总长度尽可能最短,即采用最短码。
作为信息管理专业的学生,我们应该很好的掌握这门技术。
在课堂上,我们能过学到许多的理论知识,但我们很少有过自己动手实践的机会!
课程设计就是为解决这个问题提供了一个平台。
1.2设计要求
读入待压缩的文本文件;统计分析文本文件中各字符的出现频度,以频度作为构造Huffman树的权值。
根据各字符出现的不同频度构造Huffman树,然后规定每种字符的Huffman编码。
再次读入待压缩的文本文件,然后根据各字符的Huffman编码逐一替代,将得到的编码流写入到新的文件中,并且计算压缩率。
解码过程:
先读入上一步骤得到的新文件,将其看作比特流,根据Huffman树,对比特流逐位译码,将解码结果又写入一个新的文件中。
2需求分析
2.1系统实现的目标
在当今信息爆炸时代,如何采用有效的数据压缩技术来节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视。
哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。
2.2系统实现方案
哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。
树中从根到每个叶子都有一条路径,对路径上的各分支约定:
指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个对应的字符的编码,这就是哈夫曼编码。
3系统设计
3.1总体功能的实现
本程序设计包括两个模块:
主程序模块和子程序模块。
在主页面可以清楚了解系统的功能实现,在控制台菜单页面,根据需要,可以根据提示进行选择,选择后可以进行相应的操作。
compress()和decompress()1通过菜单选择,调用子函数,从而实现对功能的要求,如图3.1总体功能图。
图3.1主页面图
3.2总体流程图
根据对huffman功能分析,设计得到该系统的总体功能图如图3.2。
图3.3总体功能图
4系统实现
4.1构造哈夫曼树
图4.1
4.2哈夫曼编码
图4.2
5系统实现
5.1主要代码实现
5.11主掉函数
intinitial_files(char*source_filename,FILE**inp,char*obj_filename,FILE**outp);
char*create_filename(char*source_filename,char*obj_filename);
intcompress(char*source_filename,char*obj_filename);
longfrequency_data(FILE*in,longfre[]);
intsearch_set(htnpht,intn,int*s1,int*s2);
intcreate_hftree(longw[],intn,htnodeht[]);
intencode_hftree(htnphtp,intn,hufcodehc[]);
unsignedcharchars_to_bits(constunsignedcharchars[8]);
intwrite_compress_file(FILE*in,FILE*out,htnpht,hufcodehc[],char*source_filename,longsource_filesize);
intdecompress(char*source_filename,char*obj_filename);
voidget_mini_huffmantree(FILE*in,shortmini_ht[][2]);
intwrite_decompress_file(FILE*in,FILE*out,shortmini_ht[][2],longbits_pos,longobj_filesize);
intd_initial_files(char*source_filename,FILE**inp,char*obj_filename,FILE**outp);
5.12压缩文件时的代码
intcompress(char*source_filename,char*obj_filename)
{
FILE*in,*out;
charch;
interror_code,i,j;
floatcompress_rate;
hufcodehc[256];
htnodeht[256*2-1];
longfrequency[256],source_filesize,obj_filesize=0;
error_code=initial_files(source_filename,&in,obj_filename,&out);
if(error_code!
=0)
{
puts("文件打开失败!
请重新输入文件路径:
");
returnerror_code;
}
source_filesize=frequency_data(in,frequency);
printf("文件大小%ld字节\n",source_filesize);
error_code=create_hftree(frequency,256,ht);
if(error_code!
=0)
{
puts("建立哈夫曼树失败!
");
returnerror_code;
}
error_code=encode_hftree(ht,256,hc);
if(error_code!
=0)
{
puts("建立哈夫曼编码失败!
");
returnerror_code;
}
for(i=0;i<256;i++)
obj_filesize+=frequency[i]*hc[i].len;
obj_filesize=obj_filesize%8==0?
obj_filesize/8:
obj_filesize/8+1;
for(i=0;i<256-1;i++)
obj_filesize+=2*sizeof(short);
obj_filesize+=strlen(source_filename)+1;
obj_filesize+=sizeof(long);
obj_filesize+=sizeof(unsignedint);
compress_rate=(float)obj_filesize/source_filesize;
printf("压缩文件大小:
%ld字节,压缩比例:
%.2lf%%\n",obj_filesize,compress_rate*100);
error_code=write_compress_file(in,out,ht,hc,source_filename,source_filesize);
if(error_code!
=0)
{
puts("写入文件失败!
");
returnerror_code;
}
puts("压缩完成!
");
puts("");
puts("是否打印该文件中字符对应的huffman树及编码?
");
puts("PleaseinputYORN");
do{
scanf("%s",&ch);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Huffman编码的应用数据结构 Huffman 编码 应用 数据结构 课程设计 报告