一. lzw编解码原理概述
1. lzw简介
一. lzw编解码原理概述
1. lzw简介
LZW压缩算法由Lemple-Ziv-Welch 三人共同创造,用他们的名字命名。它采用了一种先进的串表压缩,将每个第一次出现的串放在一个串表中,用一个数字来表示串,压缩文件只存贮数字,则不存贮串,从而使图象文件的压缩效率得到较大的提高。奇妙的是,不管是在压缩还是在解压缩的过程中都能正确的建立这个串表,压缩或解压缩完成后,这个串表又被丢弃。
LZW算法中,首先建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。压缩完成后将串表丢弃。如"print" 字符串,如果在压缩时用266表示,只要再次出现,均用266表示,并将"print"字符串存入串表中,在图象解码时遇到数字266,即可从串表中查出266所代表的字符串"print",在解压缩时,串表可以根据压缩数据重新生成。
2. lzw编解码举例:
2.1 编码
输入流:a a b b b a a b b .....
初始标号集:
0 |
1 |
2 |
3 |
a |
b |
第几步 |
前缀 |
后缀 |
Entry |
认识(Y/N) |
输出 |
标号 |
1 |
a |
(,a) |
||||
2 |
a |
a |
(a,a) |
N |
0 |
4 |
3 |
a |
b |
(a,b) |
N |
0 |
5 |
4 |
b |
b |
(b,b) |
N |
1 |
6 |
5 |
b |
b |
(b,b) |
Y |
||
6 |
6 |
a |
(6,a) |
N |
6 |
7 |
7 |
a |
a |
(a,a) |
Y |
||
8 |
4 |
b |
(4,b) |
N |
4 |
8 |
9 |
b |
b |
(b,b) |
Y |
||
10 |
6 |
(6,) |