LZW算法
LZW压缩算法
LZW算法流程图
LZW算法[3]基于转换串表(字典)T,将输入字符串映射成定长(通常为12位)的码字。在12位4096种可能的代码中,256个代表单字符,剩下3840给出现的字符串。
LZW字典中的字符串具有前缀性,即 ωK∈T=>;ω∈T。
LZW算法流程:
1)初始化:将所有的单字符串放入串表
2)读第一个输入字符给前缀串ω
3)Step: 读下一个输入字符K;
if 没有这样的K(输入已穷尽):
码字(ω) 输出;结束。
If ωK 已存在于串表中:
ω:=ωK;repeat Step;
else ωK不在于串表中:
码字(ω) 输出;
ωK加进串表;
ω:=K;repeat Step.
例子:ababcbababaaaaaaa
LZW编码:a,b,c,ab,ba,abc,cb,bab,baba,aa,aaa,aaaa
LZW解压算法
具体解压步骤如下:
① 读取第一个字符,输出它,并且把它赋给prefix_character
② 读取下一个字符,是否文件已经结束,没有结束,就把该字符赋给current_character,该字符是否大于N(基本字符element的个数)?
③ 大于N,是否在code_table当中?
④ 没在code_table当中,将prefix_character+prefix_character的第1个字符输出,并且赋给string 存储当code_table当中去,同时把该string赋给prefix_character,转向②执行。
⑤ 在code_table当中,遍历current_character的所有字符,并且输出它,把current_character赋给prefix_character,转向②执行。
⑥ 小于N,输出current_character,并且把cureent_character赋给prefix_character,转向②执行。
编辑本段
LZW压缩的特点
LZW码能有效利用字符出现频率冗余度进行压缩,且字典是自适应生成的,但通常不能有效地利用位置冗余度。
具体特点如下:
l)LZW压缩技术对于可预测性不大的数据具有较好的处理效果,常用于TIF格式的图像压缩,其平均压缩比在2:1以上,最高压缩比可达到3:1。
2)对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。
3)除了用于图像数据处理以外,LZW压缩技术还被用于文本程序等数据压缩领域。
4)LZW压缩技术有很多变体,例如常见的ARC、RKARC、PKZIP高效压缩程序。
5)对于任意宽度和像素位长度的图像,都具有稳定的压缩过程。压缩和解压缩速度较快。
6)对机器硬件条件要求不高,在 Intel 80386的计算机上即可进行压缩和解压缩。
、、、源文件中出现了lzw,不知道是不是用的lzw算法