深入解析数据压缩算法
前序
开始本文之前,先回顾一下上篇。上篇讲解了几种数据压缩算法中的两种:Huffman压缩算法和RLE压缩算法。
详解数据压缩算法(上):http://blog.csdn.net/fengchaokobe/article/details/7934865
正文
本文将详解数据压缩算法的后两种算法:Rice压缩算法、LZW压缩算法。
第一节 LZW压缩算法
LZW压缩算法:Lempel-Ziv-Welch Encoding。算法的命名简单直接,故而LZW压缩算法也跟随了算法命名的特性:简单易懂!---有点扯皮了,开始干正事!
LZW压缩算法的实现就是通过在编码的过程中建立一个字符串表,并用某个数字来表示这个串,压缩文件只存储那个数字。这些数字就是压缩后的数据。
LZW算法的实现原理:由于源数据字符串中一定会出现重复的字符串,于是我们就利用这点,将第一次出现的串组合用某一数字表示,然后将这个数字保存起来。那么当再次遇见这个串时就可直接用这个数字来表示,以此来达到压缩的目的。所以说,能正确的得到这个数字表是压缩成功的关键。
从原理中我们可得知:在源数据中,如果重复的字串越多,那么压缩的效果就越好。
好了,理论说的再多也是空谈,既然了解了,那我们就上例子来说明。
现有如下的源数据串,我们现用LZW压缩算法来操作实现压缩:
战前准备:
1.原理中提到我们用某一数字来表示压缩的结果,那么这些数字的起始怎么选择呢?这时我们就要根据LZW压缩算法的应用来说了。LZW主要应用在图像的处理上,如果图像的色彩数为256,那我们就要从258开始(其中256表示清除码,257表示图像结束码)。
2.编码过程中一些声明:
源数据:压缩的目标数据;