参考:(22条消息) LZW编解码详解_hanzhen7541的博客-CSDN博客_lzw编码
一.理论
把出现过的字符串映射到记号上,这样就可能用较短的编码来表示长的字符串,实现压缩。
给定一个初始字典,编码时生成补充后的字典,但不会保留,解码时再还原出编码时的字典。
二.编码算法
编码器从原字符串不断地读入新的字符,并试图将单个字符或字符串编码为记号 (Symbol)。这里我们维护两个变量,一个是P (Previous),表示手头已有的,还没有被编码的字符串,一个是C (current),表示当前新读进来的字符。
1. 初始状态,字典里只有所有的默认项,例如0->a,1->b,2->c。此时P和C都是空的。 2. 读入新的字符C,与P合并形成字符串P+C。 3. 在字典里查找P+C,如果: - P+C在字典里,P=P+C。 - P+C不在字典里,将P的记号输出;在字典中为P+C建立一个记号映射;更新P