压缩算法——lzw算法实现
字典压缩的基本原理
以色列人Lempel与Ziv发现在正文流中词汇和短语很可能会重复出现。当出现一个重复时,重复的序列可以用一个短的编码来代替。
压缩程序重复扫描这样的重复,同时生成编码来代替重复序列。随着时间过去,编码可以用来捕获新的序列。算法必须设计成压缩程序能够在编码和原始数据序列推导出当前的映射。
说实话直接用文字来描述其实听起来很迷,直接看图:
然后我们以字符串abcbcabcabcd为例,来模拟这个过程
首先我们先建立初始码表a= 1,b=2,c=3,d=4
step | P | C | is PC in dic | output P | dictionary | description |
---|---|---|---|---|---|---|
1 | NULL | a | 初始化,不处理 | |||
2 | a | b | no | 1 | ab:5 | ab不存在dictionary中,扩充 |
3 | b | c | no | 2 | bc:6 | |
4 | c | b | no | 3< |