




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华 中 科 技 大 学 计 算 机 科 学 与 技 术 学 院 课 程 设 计 报 告课 程 设 计 报 告题目: 简单压缩软件 课程名称: 并行与串行数据结构与算法 专业班级: ACM1301 学 号: U201315049 姓 名: 孙启 指导教师: 陆枫 报告日期: 2015年9月27日 计算机科学与技术学院I任务书p 设计内容本实验要求实现一个简单的压缩软件。压缩软件由两部分编码器和译码器组成。编码器位于发送端,可以将文件进行压缩,体积减小;译码器位于接收端,可以将文件进行解压,恢复原文件。p 设计要求(1) 压缩解压过程保证无损(2) 实现两种压缩策略,第一种压缩文件后缀名记为.CS
2、,要求在保证一定的压缩率的情况下体现压缩速率;第二种压缩文件后缀名记为.SCS,强调压缩率,但时间也需要比较合理(3) 压缩文件中保存了需要解压的全部信息(4) 具有图形化进度条显示压缩过程和解压过程的进度和显示估计剩余时间的功能(5) 具有图形化选项选择将编码信息输出到指定磁盘目录的功能(6) 实验所使用的算法不限,实验报告中需要详细描述使用的算法策略。(7) 软件的衡量标准对比标准的压缩软件,实验检查时需要准备一定的统计对比信息加以佐证,实验报告中也需要对压缩软件的优劣进行详细的建模分析。p 参考文献1 LZW for GIF 算法原理实现,2 Qt参考文档,3 几种压缩算法, 目录任务书
3、I1引言31.1课题背景与意义31.1.1数据压缩标准41.1.2数据压缩评价51.2国内外研究现状51.3课程设计的主要研究工作62系统需求分析与总体设计72.1系统需求分析72.2系统总体设计73系统详细设计83.1有关数据结构的定义83.2主要算法设计94系统实现与测试114.1系统实现114.2系统测试115总结与展望135.1全文总结135.2工作展望136体会14附录15II1引言1.1课题背景与意义信息如何被高效存储和传递的问题一直是计算机研究的一个重要课题, 而解决这一问题的最常用的就是数据压缩技术。计算机为什么需要数据压缩技术呢? 一是因为容量的限制, 促使各程序员开始开发各
4、种压缩软件对软件进行压缩。二是信息通讯量的限制, 人们希望在网上下载的软件越小越好。随着数码技术的发展,压缩技术也在不断发展, 因为硬盘和光盘的空间毕竟是有限的, 而游戏、音频、视频、图片在计算机中应用中越来越普遍, 但它们又非常占据空间, 所以压缩技术前景非常广阔并且不断在发展。与压缩相关的有两个步骤: 第一个步骤是压缩, 第二个步骤则是解压缩。在计算机中所有信息都是以二进制代码形式存在的, 这些信息具体形式可以是声音、图像、软件, 因此我们把只用二进制编码的像片、音频等可以称为数码像片或数码音频。以数码图片为例, 压缩就是要把的图像的二进制代码中冗长的、重复的代码遵循一定的算法用简短的代码
5、来代替。如果把软件中的冗长的、重复的代码如果都按一定的算法用简短的代码来替换的话, 最后重新生成的软件一定会小得多。这个过程, 就叫做压缩。一般而言, 被压缩的文件是不能直接运行的, 那是因为它的代码都被简化了。被压缩了的文件只是变小了空间而已, 是不能直接使用的。要想再使用这些压缩过的文件, 就必须解压缩。解压缩文件要用到对应的压缩软件。解压缩的过程正好和压缩的过程相反, 即通过算法将简短的压缩代码还原为程序的真正代码。在多媒体应用中,数字化信息的数据量相当庞大,对存储器的存储器的存储容量、网络带宽以及计算机的处理速度都有较高的要求,完全通过增加硬件设施来满足现实需求是不可能的,必须采用有效
6、的压缩技术。多媒体数据之所以能够进行压缩时因为原始数据存在以下三种形式的冗余:(1)编码冗余。如频率相差很大的像素用相同长度的代码进行编码;(2)像素间冗余。如相邻像素间具有时域或空域相关性;(3)视觉信息冗余。即人的视觉图像边缘急剧变化不敏感,对色彩的分辨能力弱,只对图像的亮度敏感,对经压缩和解压缩后的图像失真难以察觉或影响甚微。这些数据本身的冗余和人的感官特性构成了多媒体数据压缩的基础,同时也确定了数据压缩的研究方向。1.1.1数据压缩标准 从20世纪80年代开始,世界上已有几十家公司纷纷投入到多媒体计算机系统的研制和开发工作。20世纪90年代已有不少精彩的多媒体产品问世,诸如荷兰菲利浦和
7、日本索尼联合推出的CD-I,苹果公司Macintosh为基础的多媒体功能的计算机系统,Intel和IBM公司联合推出的DVI。此外,还有Microsoft公司的MPC及苹果的Quick Time等,这些多媒体计算机系统各具特色,丰富多彩,竞争异常激烈。具有人机交互特色的多媒体技术,使计算机进入普通家庭,进入人们的生活、学习、娱乐及人们的精神生活领域。人们像使用家用电器一样地使用计算机。计算机能听懂人的话语;计算机成为能讲话的实用型产品进入市场,也为时不远了。Internet技术的迅猛发展与普及,推动了世界范围的信息传输和信息交流。在色彩缤纷、变幻无穷的多媒体世界中,用户如何选择产品,如何自由地
8、组合、装配来自不同厂家的产品部件,构成自己满意的系统,这就涉及一个不同厂家产品的兼容性问题,因此需要一个全球性的统一的国际技术标准。国际标准化协会(International Standardization Organization,ISO)、国际电子学委员会(International Electronics Committee,IEC)、国际电信协会(International Telecommunication Union,ITU)等国际组织及CCITT,于20世纪90年代领导制定了多个重要的多媒体国际标准。如H.261、H.263、JPEG和MPEG等标准。H.261是被可视电话、电视
9、会议中采用的视频、图像压缩编码标准,由CCITT制定,1990年12月正式批准通过;JPEG是由ISO与CCITT成立的“联合图片专家组(Joint Photographic Experts Group,JPEG)”制定的,用于灰度图、彩色图的连续变化的静止图像编码标准,于1992年正式通过;MPEG是以H.261标准为基础发展而来的。它是由IEC和ISO成立的“运动图像专家组(Moving Picture Experts Group,MPEG)”制定的,于1992年通过了MPEG-1,并在后来的几年中,陆续推出了MPEG-2、MPEG-4、MPEG-7等标准。1.1.2数据压缩评价(1)压缩
10、比,即压缩前后的数据量之比,一般来说,压缩比要在一定的质量主观满意度基础上尽可能的大。(2)算法的复杂性和运算速度,实现压缩的算法要简单,以便在有限的硬件资源上加快压缩解压缩的速度,尽可能地实时压缩解压缩。(3)失真度,即解压后数据的恢复质量要好,尽可能地完全再现原始数据。1.2国内外研究现状从国际数据压缩技术的发展尤其是MPEG的发展可以看出,基于内容的图像压缩编码方法是未来编码的发展趋势。它不仅能满足进一步获得更大的图像数据压缩比的要求,而且能够实现人机对话的功能。另外,任意形状物体的模型建立的关键问题还没有解决,这严重影响其应用的广泛性。因此,视频编码将朝着多模式和跨模式的方向发展。通过
11、元数据进行编码也是今后编码的发展方向。元数据是指详细的描述音/视频信息的基本元素,利用元数据来描述音视频对象的同时也就完成了编码,因为此时编码的对象是图像的一种描述而不再是图像本身。从另一个角度来说,进一步提高压缩比,提高码流的附属功能(码流内容的可访问性、抗误码能力、可伸缩性等)也将是未来的编码的两个发展方向。当前,压缩域处理技术作为新兴的技术还远未成熟,许多问题有待解决,其中缺乏统一的理论支持是主要问题。未来的研究工作主要集中在四个方面:设计新的压缩算法,支持对压缩域数据直接操作;研究用小波、矢量量化、分形等压缩算法的多媒体数据的压缩处理算法;设计专用的压缩域数据处理芯片;如何将用于多媒体
12、内容的传输和使用的各种标准结合起来,形成一个用于多媒体的统一的体系结构。未来多媒体数据压缩技术的发展趋势将是基于内容的压缩。另外,图像压缩技术、视频技术与网络技术相结合的应用前景十分可观,如远程图像传输系统、动态视频传输(可视电话)、电视会议系统等已经开始商品化,MPEG标准与视频技术相结合的产物家用数字视盘机、VideoCD系统等已进入市场。可以预计,这些技术和产品的发展将对21世纪的社会进步产生中大影响。1.3课程设计的主要研究工作本次课程设计主要研究如何在无损的前提下实现数据的压缩,并用不同的压缩策略分别对数据进行压缩时间优先和压缩率优先两种压缩。具体实现中,我使用了LZW算法和Huff
13、man编码算法对数据进行压缩,对于较小的文件,LZW算法压缩时间短,Huffman编码算法压缩率低,而对于较大的文件,前者压缩率低,后者压缩时间短。-2系统需求分析与总体设计2.1系统需求分析本课程设计编写的压缩软件要求压缩解压过程保证无损,并实现两种压缩策略,第一种压缩文件后缀名记为.CS,要求在保证一定的压缩率的情况下体现压缩速率;第二种压缩文件后缀名记为.SCS,强调压缩率,但时间也需要比较合理。同时压缩文件中保存了需要解压的全部信息。另外,软件要具有图形化进度条显示压缩过程和解压过程的进度和显示估计剩余时间的功能,还要具有图形化选项选择将编码信息输出到指定磁盘目录的功能2.2系统总体设
14、计本软件使用Huffman编算法和LZW算法,基于Qt图形用户界面,总体结构如下流程图所示:3系统详细设计3.1有关数据结构的定义1. Huffman树节点:huffman_node_tag,huffman_node结构成员数据类型成员定义isLeafunsigned char标记该节点是否为叶子节点countunsigned long记录哈夫曼树节点总个数parenthuffman_node_tag*记录该节点的父节点zerounionhuffman_node_tag*记录该节点的左孩子onehuffman_node_tag*记录该节点的右孩子symbolunsigned char该节点对应
15、的字符2. Huffman编码:new_code_tag,new_code结构成员数据类型成员定义numbitsunsigned long编码位数bitsunsigned char *编码3. 栈节点:node结构成员数据类型成员定义cchar栈节点储存的字符nextnode *指向下一结点4. 栈:stack结构成员数据类型成员定义lengthint栈内数据个数SPnode *指向栈顶3.2主要算法设计(1)Huffman编码算法:(2)LZW算法:4系统实现与测试4.1系统实现本次课程设计压缩软件的编写基于Qt环境,采用C+语言。具体实现见附录。4.2系统测试对本软件的测试,主要将文件分为
16、不同大小和格式来进行测试。下标为具体测试数据:测试文件文件格式文件大小/KB压缩算法压缩文件大小/ KB压缩率压缩时间/s测试文件1txt22Huffman编码1359%<1LZW941%1.4标准压缩软件522.7<1测试文件2txt10524Huffman编码812877.2%12LZW806376.6%3标准压缩软件491246.7%2测试文件3pdf1914Huffman编码191399.9%4LZW2710141.6%<1标准压缩软件179693.8<1测试文件4MP4350081Huffman编码-LZW508005145.1%88标准压缩软件3488849
17、9.7%25测试文件5jpg597Huffman编码857143.6%2LZW597100%<1标准压缩软件597100%<1(说明:表中对测试文件4运用huffman算法进行压缩时,由于软件占用空间太大且压缩时间过长而舍弃)由以上测试数据可得以下结论:(1) 对于较小的文本文档,Huffman编码压缩速度较快,但压缩率较高;(2) 对于较大的文本文档,LZW压缩速率较快,且二者压缩率相近;(3) 对于文本文档的压缩,相较于标准压缩软件,这两种算法在压缩率和压缩时间上都有缺陷;(4) 对于jpg、pdf、mp4这些文件本身冗余信息较少的格式,无论何种压缩算法都不能实现较低的压缩率,
18、甚至会越压越大。算法时间渐进复杂度分析:(1) Huffman编码算法,压缩:T(n) = 2cn + c = O(n)(2) Huffman编码算法,解压:T(n) = c + cnlog256 = O(n)(3) LZW算法,压缩:T(n) = cn = O(n)(4) LZW算法,解压: T(n) = O(n)5总结与展望5.1全文总结在本次课程设计中,我主要完成了以下工作:(1)实现了运用Huffman编码算法和LZW算法对文件进行压缩;(2)了解了数据压缩算法的一般思想;(3)进一步熟悉了运用Qt进行简单的图形用户界面编写;(4)学会了如何在Qt中开多线程以防止GUI假死。5.2工作
19、展望在今后的研究中,围绕着如下几个方面开展工作以改进算法的性能:(1)在LZW中使用二分查找树储存字典,这样虽然压缩过程中对编码的查找复杂度由O(1)变为O(log4096),但解压过程中对编码的查找却由O(40962)变为O(4096log4096),整体速率上升;(2)尝试更多不同的压缩算法,总结分析各种算法的特点,对现有算法进行改进; 6体 会最初看到这个课设题目的时候,其实觉得会很难,因为心中没有任何压缩数据的概念,但是在查阅了部分资料之后,心中有了大概的方向,于是觉得这个题目很简单。然而,就是由于这种轻敌心理,导致我分配给这次课设的时间过少,以至于软件编写时间紧张。可是,正是由于时间
20、紧张,我的压力才能够转化为足够的动力,成功地在规定时间内完成了任务,编程的过程中遇到的很多困难也得以一一解决。其中,我认为解决问题的能力非常重要,因为为了解决某一个bug,我会查阅非常多的资料,从中学到更多的知识。因此有时候解决问题的过程甚至比编写程序的过程更有意义。再者,我认识到,做一个产品时不仅要做得好,还要能将产品最成功、最精彩的一面展示给用户,这样的产品才能称为“成功的产品”。因此,个人的归纳总结以及表达能力也是至关重要的。今后我会努力弥补这方面的不足。附录头文件mainwindow.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include &
21、lt;QMainWindow>#include <QString>#include <QFileDialog>#include <QMessageBox>#include <huffman.h>#include <QTime>#include <QThread>#include <lzw.h>extern int *f;extern char *openfileName;extern char *savefileName;extern unsigned int filesize;extern int pr
22、ogress;extern int channal;namespace Ui class MainWindow;class Thread : public QThread Q_OBJECTprotected: void run();public: Thread(QObject *parent = 0); Thread();signals: void UpdateSignal(int progress); void error(QString);public: unsigned long numbytes_from_numbits(unsigned long numbits); unsigned
23、 char get_bit(unsigned char* bits, unsigned long i); void reverse_bits(unsigned char* bits, unsigned long numbits); huffman_code* new_code(const huffman_node* leaf); huffman_node* new_leaf_node(unsigned char symbol); huffman_node* new_nonleaf_node(unsigned long count, huffman_node *zero, huffman_nod
24、e *one); void free_huffman_tree(huffman_node *subtree); void free_code(huffman_code* p); void free_encoder(SymbolEncoder *pSE); void init_frequencies(SymbolFrequencies *pSF); unsigned int get_symbol_frequencies(SymbolFrequencies *pSF, FILE *in); static int SFComp(const void *p1, const void *p2); voi
25、d build_symbol_encoder(huffman_node *subtree, SymbolEncoder *pSF); SymbolEncoder* calculate_huffman_codes(SymbolFrequencies * pSF); int write_code_table(FILE* out, SymbolEncoder *se, uint32_t symbol_count); huffman_node* read_code_table(FILE* in, unsigned int *pDataBytes); int do_file_encode(FILE* i
26、n, FILE* out, SymbolEncoder *se); int huffman_encode_file(FILE *in, FILE *out); int huffman_decode_file(FILE *in, FILE *out); int lzw_encode_file(FILE *in, FILE *out); int lzw_decode_file(FILE *in, FILE *out); int lzw(FILE *in, FILE *out); int find(unsigned short dic4096256, int s, int cur_mark, sta
27、ck *S); void reset(stack *); void push(char var, stack *stk); char pop(stack *stk); int empty(stack *stk); int huffman(FILE *in, FILE *out);class MainWindow : public QMainWindow Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); MainWindow(); QTime time; float rest_time;public slots: void OpenFile_triggered(); void Save
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询返佣协议合同模板
- 超声根管治疗讲义
- 针灸治疗注意事项
- 低钙血症治疗
- 二零二五租房转租协议书合同范例
- 最高额反担保合同意思二零二五年
- 从案例看区块链在版权保护中的运用
- 区块链技术在商业领域的品牌传播创新
- 二手房集资买卖合同1500字
- 加油站租赁合同书协议书范例
- DB11T 065-2022 电气防火检测技术规范
- NYT-1121.12-2006-土壤-总铬-方法验证
- 《护理心理学》期末考试复习题库(含答案)
- 辽宁省2024年中考英语真题【附真题答案】
- 吉林省长春市绿园区2023-2024学年七年级下学期期末语文试题(原卷版)
- 解析:2024年湖北省武汉市中考数学试题(原卷版)
- 注射相关感染预防与控制(全文)
- 【标准】电力人工智能训练数据集归集标准
- AQ 1044-2007 矿井密闭防灭火技术规范(正式版)
- 足太阳膀胱经(经络腧穴课件)
- 感悟考古智慧树知到期末考试答案章节答案2024年北京大学
评论
0/150
提交评论