LZW压缩算法编解码示例
来源:互联网 发布:俄罗斯经济数据网站 编辑:程序博客网 时间:2024/06/15 21:56
LZW压缩算法是Lempel-Ziv-Welch 3个人共同发明的,简称 LZW 的压缩算法,可以用任何一种语言来实现它.
LZW是GIF图片文件的压缩算法,而且zip压缩的思想也是基于LZW实现的,所以LZW对文本文件具有很好的压缩性能。
LZW压缩算法的基本原理:提取原始文本文件数据中的不同字符,基于这些字符创建一个编码表,然后用编码表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。看起来和调色板图象的实现原理差不多,但是应该注意到的是,我们这里的编码表不是事先创建好的,而是根据原始文件数据动态创建的,解码时还要从已编码的数据中还原出原来的编码表.
LZW是GIF图片文件的压缩算法,而且zip压缩的思想也是基于LZW实现的,所以LZW对文本文件具有很好的压缩性能。
LZW压缩算法的基本原理:提取原始文本文件数据中的不同字符,基于这些字符创建一个编码表,然后用编码表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。看起来和调色板图象的实现原理差不多,但是应该注意到的是,我们这里的编码表不是事先创建好的,而是根据原始文件数据动态创建的,解码时还要从已编码的数据中还原出原来的编码表.
编码表中每一项的大小一般为12位,用来代表一个字符串。这样编码表有2**12=4096项,编码值是0~4095。通常情况下0~255是固定的,用来代表单个字符0~255。而值256通常用来表示开始新的编码表,因为如果编码表的4096项都用完了,而待压缩文件还没有处理完,那么就需要生成新的编码表继续压缩;257表示压缩结束,用来写到压缩文件尾。从258开始,每个值都代表一个字符串(至少2个字符)。
--------********************----------
LZW算法流程:
1)初始化:将所有的单字符串放入串表
2)读第一个输入字符给前缀串ω
3)Step: 读下一个输入字符K;
if 没有这样的K(输入已穷尽):
码字(ω)输出;结束。
If ωK已存在于串表中:
ωK:=ω;repeat Step;
else ωK不在于串表中:
码字(ω)输出;
ωK加进串表;
K:= ω;repeat Step.
4) 判断码字流中是否还有码字要译
(1) 如果“是”,就返回到步骤2;
(2) 如果“否”
① 把代表当前前缀P的码字输出到码字流;
② 结束。
--------********************----------
示例:ababcbababaaaaaaa
编码过程:
串表
a
b
c
ab
ba
abc
cb
bab
baba
aa
aaa
aaaa
LZW
a
b
ab
c
ba
bab
a
aa
aaa
a
解码过程:
串表
a
b
c
ab
ba
abc
cb
bab
baba
aa
aaa
aaaa
结果
a
b
ab
c
ba
bab
a
aa
aaa
a
0 0
- LZW压缩算法编解码示例
- LZW编解码算法(C实现)
- LZW编解码
- LZW编解码算法实现与分析_C语言实现
- LZW压缩算法
- lzw压缩算法
- lzw 压缩算法源代码
- LZW压缩算法源代码
- lzw图像压缩算法
- LZW 压缩算法
- 压缩算法-LZW
- LZW压缩算法
- LZW压缩算法
- LZW压缩算法
- LZW压缩算法
- LZW压缩算法
- LZW压缩算法
- LZW算法压缩和解压缩
- 如何选择前端核心库
- C/C++软件工程师就业求职手册学习笔记---第九章
- python 文件操作
- Lua模式匹配
- boost准模板库 timer.hpp使用
- LZW压缩算法编解码示例
- Optiwave.OptiBPM.v9.0 1CD(波导光学模拟软件)
- QT 知识点总结
- Android中的TextView实现多行显示省略号
- ios6设备旋转 以及获取设备方向
- CentOS 6.4 下安装mysql tomcat jdk
- Lua string
- 1.
- 系统严重错误