【网学提醒】:本文主要为网上学习者提供改进的字典压缩LZW编码,希望对需要改进的字典压缩LZW编码网友有所帮助,学习一下吧!
资料包括: 论文(14页4199字) 源码
说明:摘要:本文用 Object Pascal 语言实现了 LZW 压缩方法,并用面向对象方法进行封装,还在其编码算法上做了改进,实现了零
搜索,大大加快了编码速度。
关键词:面向对象,字典压缩
一.字典压缩方法简述
目前广泛采用的字典压缩方法包括两种类型:一种是在数据压缩过程中,寻找当前等待进行压缩处理的数据串中是否在已经处理过的数据串中出现过,如果确实曾经出现过,则利用指向该已经进行处理数据串的指针代替当前等待进行压缩的数据串。此时,字典是隐式的,它用曾经处理过的数据描述。这类字典压缩算法都是基于Abraham与Jakob Ziv于1977年提出并发表的LZ77算法,该算法提出后,Storer与Szymanski于1982年对其进行了改进,并提出相应的LZSS算法,成为现在实践中广泛使用的该类算法的基础。如流行的压缩
程序:WINZIP,PKZIP等就是基于这种算法的。另外一种字典压缩算法是为输入数据创建一个短语字典,如果在当前等待进行压缩的数据流中发现字典中已经存在相应的短语,则利用该短语在字典中的相应索引值取代原始数据,这种类型的算法基于Lampel与Ziv在1978年提出并发表的LZ78算法。后来该压缩算法由Sperry公司的研究员Welch于1984年在硬件设计过程中,改进并用于高性能磁盘控制器的设计,同时,由Lempel和Ziv在实际工作中实现,LZW编码也由此而得名。这种编码不仅可以用于文字数据的压缩,而且也可以成功地用于某些图像数据的压缩处理,如GIF和TIFF等图像格式。本文正是基于这种LZW编码的。
二.算法改进
有关LZW原理和传统编码过程这里就不再赘述。下面提出的是该算法的几个改进方面。
(1)面向对象
使用面向对象设计方法对于用户来说是有利的。如用户在用该算法进行数据压缩时,只需创建一个编码对象,使用对象的三个方法:GetBegin,Execute,GetEnd即可轻松实现。在对算法功能进行改进或添加时,只需继承该类和重载方法。
本文使用的开发工具是Delphi5.0,封装过程定义了ExportData和Execute这两个虚方法,重设这两个方法可以修改或扩充算法执行过程和数据输出过程。
其中编码和解码类都使用Execute方法作为核心过程,Execute方法的说明如下:
procedure Execute(Data: array of Byte; DataSize: Integer); virtual;
Data是一个指针,指向待处理数据的首地址;DataSize是待处理数据的大小;处理完毕后的数据保存在对象内部,使用GetExportPointer方法可得到该地址指针,然后调用GetExportSize方法返回输出数据的大小。
目录:一.字典压缩方法简述
二.算法改进
三.数据结构
四.编码过程
五.解码过程
六.总结
参考文献:【1】陈晓明等,多格式
程序设计入门,人民邮电出版社,1995
【2】晶辰工作室,最流行图像格式实用参考手册,电子工a