课程设计报告.docx
- 文档编号:17982046
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:12
- 大小:62.36KB
课程设计报告.docx
《课程设计报告.docx》由会员分享,可在线阅读,更多相关《课程设计报告.docx(12页珍藏版)》请在冰点文库上搜索。
课程设计报告
数据结构课程设计报告
题目:
压缩器/解压器
院(系):
计算机工程学院
专业:
计算机科学与技术
班级:
嵌入式1091
学生:
吴亮
指导教师:
寇海洲孙成富
邱军林殷路
2010年12月
目录
第一章需求分析····································3
第二章概要设计····································4
第三章详细设计····································5-8
第四章运行结果及其分析····························8-9
第五章运行说明····································9
第六章课程设计总结································9
参考文献
压缩器/解压器
【摘要】:
在现代信息社会发展到今天这种程度的时候,网络的出现带给人们生活中极大的方便,但随之而来的是信息量的增大,这就要对之进行处理,使之能够便于存储,这就要压缩器和解压器的帮忙了,用压缩器奖大的文件压缩为较小的文件后,存储起来,要用的时候,用解压器将之还原,就可以使用了。
这就是压缩器和解压器的作用了。
【题目】
为了节省存储空间,常常需要把文本文件采用压缩编码方式存储。
例如:
一个包含1000个X的字符串和2000个Y的字符串的文本文件在不压缩时占用的空间为3002字节(每个X或每个Y占用一个字节,两个字节代表文件用来表示字符串的结尾).同样是这个文件,采用游程长度编码,可以存储为字符串1000X2000Y,仅为10个字符.占用12个字节,若采用2进制表示,则更加节省空间,上例中的字符串用8个字节来存储,当要读取编码文件时,需要对其解码,由压缩器对其编码,解压器对其解码.
要求:
用游程-长度编码
第一章需求分析
1、本演示程序中,文本集合元素限定为{a,b,c,……,z,0,1,2,…9}时,用实例检测压缩器和解压器的运作,输入的为本文文件(.txt),输出的为一种自定义的文件(.nz),测试压缩器解压器会不会出现抖动,如果出现,需选取合适的集合来适应一般的情况。
2、演示程序以用户和计算机对话得以实现,即在计算机终端显示“提示信息”后,新建个相应要压缩的.TXT文件,输入该文件的文件名,程序就会将改文件压缩为.nz的文件,后解压为.txt文件。
3、测试数据
测试数据为文本字符集合{a,b,c,……,z,0,1,2,…9},来测试压缩器和解压器
。
第二章概要设计
要实现上述功能,了解游程长度编码和LZW编码的基本原理及基本算法。
游程长度编码
游程长度编码是栅格数据压缩的重要编码方法,它的基本思路是:
对于一幅栅格图像,常常有行(或列)方向上相邻的若干点具有相同的属性代码,因而可采取某种方法压缩那些重复的记录内容。
其编码方案是,只在各行(或列)数据的代码发生变化时依次记录该代码以及相同代码重复的个数,从而实现数据的压缩。
例如对图1所示的栅格数据,可沿行方向进行如下游程长度编码:
(9,4),(0,4),(9,3),(0,5),(0,1)(9,2),(0,1),(7,2),(0,2),(0,4),(7,2),(0,2),(0,4),(7,4),(0,4),(7,4),(0,4),(7,4),(0,4),(7,4)
游程长度编码对图3-6(a)只用了40个整数就可以表示,而如果用前述的直接编码却需要64个整数表示,可见游程长度编码压缩数据是十分有效又简便的。
事实上,压缩比的大小是与图的复杂程度成反比的,在变化多的部分,游程数就多,变化少的部分游程数就少,图件越简单,压缩效率就越高。
游程长度编码在栅格加密时,数据量没有明显增加,压缩效率较高,且易于检索,叠加合并等操作,运算简单,适用于机器存贮容量小,数据需大量压缩,而又要避免复杂的编码解码运算增加处理和操作时间的情况。
[fontid="zoom"class="zoom"]游程长度RL(Run—Length),简称游程或游长,指的是由字符(或信号取样值)构成的数据流中各个字符重复出现而形成的字符的长度.如果给出了形成申的字符,申的长度及申的位置,就能恢复出原来的数据流,游程长度编码(RLC)就是用二进制码字给出这些信息的一类方法。
游程长度编码的主要思想是将一个相同值的连续申用其值和申长(重复的个数)的数对二元组来替代.例如,在图像编码中,可以定义沿特定方向上具有相同灰度值的相邻像素为一轮,其延续的长度称之为延续的行程,即游程.游程终点位置由前一游程终点的相对距离确定,这样就可以由灰度游程串来表示图像数据.例如,若沿水平方向有一申M个像素具有相同的灰度N,则按游程长度编码后,只传递两个值(N,M)就可以代替这M个像素的M个灰度值N。
简单来说,游程长度编码的主要任务是统计连续相同字符的个数,解码时要根据字符及连续相同字符的个数,恢复原来的数据.在多媒体信息量激增、网络特性和速度都飞速提高的今天,游程长度编码是一种十分简单的压缩方法,编码/解码的速度也非常快,可广泛应用于多媒体信息的存储,传输。
图1
第三章详细设计
游程长度编码
(一)、压缩程序
数据结构如下:
intcount,i;
charcom,cum;
charstrs[100],str[10];
FILE*fp,*fp1;
代码如下:
#include
#include
main()
{
intcount,i;
charcom,cum;
charstrs[100],str[10];
FILE*fp,*fp1;
printf("请输入源数据文件地址(如:
D:
\\wmx.txt):
");
scanf("%s",strs);
fp=fopen(strs,"r");
printf("请输入压缩数据文件名(如:
D:
\\wmx.txt):
");
scanf("%s",strs);
fp1=fopen(strs,"w");
printf("\n压缩中");
printf("\n");
com='\?
';
cum='\\';
while(!
feof(fp))
{
strs[0]=fgetc(fp);
count=1;
while
(1)
{
strs[1]=fgetc(fp);
if(strs[1]==strs[0])
{
count++;
}
else
{
if(count>3)
{
fputc(com,fp1);
fputc(cum,fp1);
fputc(strs[0],fp1);
itoa(count,str,10);
fwrite(str,sizeof(str-1),1,fp1);
}
else
{
for(i=0;i { fputc(strs[0],fp1); } fputc(strs[1],fp1); } } if((feof(fp))||(strs[1]! =strs[0])) { break; } } } fclose(fp); fclose(fp1); printf("\n压缩完成\n"); return0; } (二)、解压部分 数据结构: intcount,i,j;/*计数器*/ FILE*fp,*fp1; charch; charstrs[M],str[M]; 具体代码如下: #include #include #include #include #defineM100 main() { intcount,i,j;/*计数器*/ FILE*fp,*fp1; charch; charstrs[M],str[M]; printf("请输入源数据文件地址(如: D: \\wmx.r): "); scanf("%s",strs); fp=fopen(strs,"r"); printf("请输入解压压数据文件名(如: D: \\wmx.txt): "); scanf("%s",strs); fp1=fopen(strs,"w"); printf("\n解压中"); printf("\n"); while(! feof(fp)) { strs[0]=0; strs[1]=0; strs[0]=fgetc(fp); if(strs[0]=='\? ') { strs[1]=fgetc(fp); if(strs[1]=='\\') { strs[2]=fgetc(fp); i=0; ch=fgetc(fp); while(ch! ='\0') { str[i]=ch; ch=fgetc(fp); i++; } str[i]='\0'; j=strlen(str); count=0; for(i=0;i { count+=((str[i]-'0')*pow(10,j-i-1)); } for(i=0;i { fputc(strs[2],fp1); } } else { fputc(strs[0],fp1); fputc(strs[1],fp1); } } else { fputc(strs[0],fp1); } } fclose(fp); fclose(fp1); printf("\n解压完成! "); return0; } 第四章运行结果及其分析 (1).游程长度编码 一.压缩器结果(截图) 运行结果: 输入的为 压缩后为 二.解压器结果如下: 运行结果: 输入为 解压为: 三、运行情况分析 1、总体压缩效率还可以,当字符重复较少的时候压缩率较低,甚至,会不降反升,出现抖动。 2、运行环境: vc++ 3、有一定数量的BUG,比如有时候会出现压缩文件为空的情况。 4、属于无损压缩,比较简单,当然适应性不太行。 不能适应绝大多数情况。 第五章使用说明 只要用户新建个待压缩或者已压缩需解压的文件,然后运行程序,输入待压缩或待解压的文件名,即可完成压缩或解压。 第六章课程设计总结 1.通过课程设计,了解了压缩和解压的基本的几个算法及其实现,游程长度编码。 2.通过课程设计,了解基本的报告的写法,为毕业论文设计提供了良好的基础。 同时也提高了自己的编程能力。 【参考文献】 1.数据结构: 面向对象方法与C++语言描述殷人昆主编 2.C语言程序设计清华大学出版社 3.C++程序设计(第2版)李龙澍编著 4.算法导论,机械工业出版社出版潘金贵、顾铁龙、李成法和叶懋
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)