介绍
LZW算法是非常常见的一种压缩算法,他的压缩原理是对于多次重复出现的字符串,进行压缩,至于怎么压缩,在后文中会细细描述,LZW算法可以用在很多的场合,诸如图像压缩,文本压缩等等,而且算法简单易懂,并不是人们想象中的那么深奥。
算法原理
在介绍算法原理之前,得先明白几个概念:
1、Prefix,在这里代表前缀字符的意思。
2、Suffix,对应的意思是后缀字符的意思。
为什么提到这2个概念呢,是因为后面的字符的压缩的输入的过程就与这2者相关。这里假设压缩的是文本字符,字符内容如下:
ababbabab
测试的数据未必是必须多的,上面的字符中还是存在着一些重复的字符段的,可以满足题目的要求的。好,下面是压缩的流程:
1、从左往右逐一的读取源文件中的字符,构成前缀,后缀字符词组的方式。
2、如果构成的词组没有被编码过,则进行编码,并且输出此时的前缀字符,然后后缀字符替代前缀字符,后缀字符继续从文件中读入。
3、如果构成的词组被编码过,就是说这个词组之前出现过,是重复的,则不输出,将对应于此时词组的编码赋给词组的前缀,然后继续读入后缀字符。
第几步 |
前缀 |
后缀 |
词 |
存在对应码 |
输出 |
码 |
1 |
|
a |
(,a) |
|
|
|
2 |
a |
b |
(a,b) |