- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LZW算法分析及C++模拟实现
【摘要】LZW算法是一种无损数据压缩算法。本文通过介绍LZW压缩算法基本概念及示例的压缩编码过程分析和用C++语言进行了编码算法的模拟实现,阐述了LZW算法原理和压缩算法流程。
【关键词】压缩技术 LZW算法 编码 解码
【中图分类号】G64 【文献标识码】A 【文章编号】1009-9646(2008)10(a)-0216-02
LZW压缩算法是一种无损数据压缩算法。在众多的压缩技术中,LZW算法是一种通用的、性能优良并得到广泛应用的压缩算法,它是一种完全可靠的算法,与其他算法相比,往往具有更高的压缩效率,因此被广泛应用于多种流行的压缩软件中。它采用了一种先进的串表压缩法,将每个第一次出现的串放在一个串表中,用一个字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。
1 LZW压缩算法的基本概念:
LZW压缩有三个重要的对象:数据流(CharStream)、编码流(CodeStream)和编译表(String?Table)。在编码时,数据流是输入对象(图象的光栅数据序列),编码流就是输出对象(经过压缩运算的编码数据);在解码时,编码流则是输入对象,数据流是输出对象;而编译表是在编码和解码时都须要用借助的对象。
.字符:最基础的数据元素,在文本文件中就是一个字节,在光栅数据中就是一个像素的颜色在指定的颜色列表中的索引值;
.字符串:由几个连续的字符组成;
.前缀:也是一个字符串,不过通常用在另一个字符的前面,而且它的长度可以为0;
.根:单个长度的字符串;
.编码:一个数字,按照固定长度(编码长度)从编码流中取出,编译表的映射值;
.图案:一个字符串,按不定长度从数据流中读出,映射到编译表条目。
2 基本原理
LZW压缩的原理:提取原始图象数据中的不同图案,基于这些图案创建一个编译表,然后用编译表中的图案索引来替代原始光栅数据中的相应图案,减少原始数据大小。看起来和调色板图象的实现原理差不多,但是应该注意到的是,我们这里的编译表不是事先创建好的,而是根据原始图象数据动态创建的,解码时还要从已编码的数据中还原出原来的编译表(GIF文件中是不携带编译表信息的)。
一个具体的例子,不是完全实现LZW算法,只是从最直观的角度看lzw算法的思想。 对原始数据ABCCAABCDDAACCDB进行LZW压缩。
原始数据中,只包括4个字符(Chara cter),A,B,C,D,四个字符可以用一个2bit的数表示,0-A,1-B,2-C,3-D,从最直观的角度看,原始字符串存在重复字符:ABCCAABCDDAACCDB,用4代表AB,5代表CC,上面的字符串可以替代表示为:45A4CDDAA5DB,这样是不是就比原数据短了一些呢!从这个原理可以看出LZW算法的适用范围是原始数据串最好是有大量的子串多次重复出现,重复的越多,压缩效果越好。
2.1 LZW编码算法
步骤1:将词典初始化为包含所有可能的单字符,当前前缀P初始化为空。
步骤2:当前字符C:=字符流中的下一个字符。
步骤3:判断P+C是否在词典中(1)如果是,则用C扩展P,即让P:=P+C,返回到步骤2。(2)如果否,则输出与当前前缀P相对应的码字W;将P+C添加到词典中;令P:=C,并返回到步骤2。
步骤4:判断字符流中是否还有字符,如果“是”,就返回步骤2,如果否,把代表当前前缀P的码字输出到码字流。
词典初始化完成后,在接下去要固定创建的两项是一个清除码(clear code)和一个结束码(end code),在词典将满时,压缩程序要输出一个清除码,同时把词典和前缀码和当前串都再次初始化,再按压缩过程继续压缩数据。清除码的作用是告诉解压缩程序再次初始化词典。结束码告诉解压缩程序图象已经结束,解压缩过程已经完成。
2.2 LZW解码算法
数据的解码,其实就是数据编码的逆向过程,要从已经编译的数据(编码流)中找出编译表,然后对照编译表还原数据。
* 词典中包含所有的前缀根(即每个字符组成词典)
* 译码时先记住先前码字(pW)
* 从码字流中读出当前的码字(cW)
* 输出当前的码字(cW)对应的单词,string(cW)
* string(pW)与string(cW)的第一个字符合在一起,放入词典中。
3 LZW编码过程的一个简单示例分析及c++语言的模拟实现
3.1 简单示例分析
原输入数据为:
您可能关注的文档
- IN―Cosmetics 2015亮点特写.doc
- Inwicast活动模块在Moodle网络课程中的应用.doc
- IP21实时数据库统一接口设计与实现.doc
- iPad2问世与营销策略启示.doc
- IPO老股转让问题探讨.doc
- IPO定价方式的市场化改革及相关建议.doc
- IPTV在远程教育应用中的方案分析.doc
- IP演播室基础结构.doc
- IRC语言的特点及其对语言发展的影响.doc
- ITMA MILANO 2015集结纺织机械的最新技术.doc
- 2026-2031疼痛管理发展趋势研究.docx
- 2025年智能手环心率监测及健康预警调研汇报.pptx
- 旅游管理专业中的跨文化沟通能力培养与模拟教学课题报告教学研究课题报告.docx
- 初中英语俚语使用与跨文化交际中的语言态度研究课题报告教学研究课题报告.docx
- AI结合的初中体育运动表现数据分析课题报告教学研究课题报告.docx
- 高中生运用生物发光设计校园海洋馆生物光照明系统课题报告教学研究课题报告.docx
- 高中体育教学中可穿戴设备与运动表现分析的应用研究课题报告教学研究课题报告.docx
- 临床决策与循证医学.ppt
- 小学数学教学中游戏化学习与智能反馈系统的构建课题报告教学研究课题报告.docx
- 初中英语写作中转折逻辑连接词的语境适配性研究课题报告教学研究课题报告.docx
原创力文档


文档评论(0)