超级简单的数据压缩算法—LZW算法( 二 )


超级简单的数据压缩算法—LZW算法

文章插图
下一个数据为81,对应字符串AB;
前一个字符D与这个字符串的首字符A结合成DA,给它一个值:87,加到压缩表中:
超级简单的数据压缩算法—LZW算法

文章插图
下一个数据为83,对应字符串RA;
前一个字符串AB与这个字符串的首字符R结合成ABR,给它一个值:88,加到压缩表中:
超级简单的数据压缩算法—LZW算法

文章插图
如此类推,一直读到80:
超级简单的数据压缩算法—LZW算法

文章插图
下一个数据为80,这是压缩的终止值,说明解压完成了,此时,把压缩表丢掉 。
解压后得到原数据S:ABRACADABRABRABRA;
由于我们的压缩表都是动态生成的,我们省了保存它的时间和空间 。
解压和压缩都介绍完了,这个算法也就结束了,超级简单!
有时候解压时,会遇到些有趣的情形,如下图:
原数据压缩:
超级简单的数据压缩算法—LZW算法

文章插图
解压时:
超级简单的数据压缩算法—LZW算法

文章插图
下一个数据为81,对应字符串AB;
前一个字符B与这个字符串的首字符A结合成BA,给它一个值:82,加到压缩表中:
超级简单的数据压缩算法—LZW算法

文章插图
下一个数据为83,嗯?83?83不在压缩表里啊,去哪找83?
容我们冷静分析一波:
首先,压缩表去到了82,下一个数据就是83 。因为是83,所以肯定是个字符串 。(81以上都是我们自己加的字符串!)
假设83对应的字符串为X:
超级简单的数据压缩算法—LZW算法

文章插图
前一个字符串AB与这个字符串的首字符X 1 (假设X是由X 1 X 2 X 3 ...X N 组成)结合成ABX 1,给它一个值:83,加到压缩表中:
超级简单的数据压缩算法—LZW算法

文章插图
即X=ABX 1 , X 1 是X的首字符(ABX 1 的首字符),即X 1 =A;
故得知X=ABA:
超级简单的数据压缩算法—LZW算法

文章插图
下一个数据是80,解压完成 。解压后的原数据为ABABABA;
至此,LZW算法介绍完毕 。
实现代码:
超级简单的数据压缩算法—LZW算法

文章插图

【超级简单的数据压缩算法—LZW算法】


推荐阅读