LZW编码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7
BAB
8
BC
9
A
B
AB BA
输出码流:1245 2
6
LZW编码
输入码流:ABABBABCABABBA
7、再读取下一个字符A,[.c.]+A=CA。在编译表中找
不到。添加[.c.] =CA到编译表,同时输出第六个字符
C(3),修改[.c.]=A。
1
A
2
B
3
C
4
5
6
ABB
7
BAB
8
BC
9
CA
A
B
C
AB BA
输出码流:124523
7
LZW编码
输入码流:ABABBABCABABBA
8、再读取下一个字符B,[.c.]+B=AB。在编译表能找到
AB=4,修改[.c.]=AB,那么再读取下一个字符A,
[.c.]+A=ABA,在编译表中不能找到。添加[.c.] =ABA到
编译表,同时输出第七个字符AB(4),修改[.c.]=A。
2、在编译表中不能找到,那么添加
AB到编译表,同时输出第一个字符A(1),
修改[.c.]=B 。
1 A 2 B 3 4 C AB 5 6 7 8 9 A B
输出码流:1
2
LZW编码
输入码流:ABABBABCABABBA
3、再读取下一个字符A,[.c.]+A=BA。 在编译表中不能找到,那么添加BA到编译表, 同时输出第二个字符B(2),修改[.c.]=A。
C A
AB
A AB ABB A
A
B B A EOF
4
10
ABA
6 1
11
ABBA
总结:
最后的输出编码是124523461。相对于原来的14个字符,经过 压缩编码后只需要9个字符就可以存储原来的信息,压缩率是14/9=1.56。
12
1 A 2 B 3 C 4 5 AB BA 6
ABB
7
8
9
A
B
Байду номын сангаас
输出码流:12 4
4
LZW编码
输入码流:ABABBABCABABBA
5、再读取下一个字符A,[.c.]+A=BA。在编译表能找 到BA=5,修改[.c.]=BA,那么再读取下一个字符B, [.c.]+B=BAB,在编译表中不能找到。添加[.c.] =BAB到 编译表,同时输出第四个字符BA(5),修改[.c.]=B。
1 A 2 B 3 C 4 5 6
ABB
7
BAB
8
9
A
B
AB BA
输出码流:1245
5
LZW编码
输入码流:ABABBABCABABBA
6、再读取下一个字符C,[.c.]+C=BC。在编译表中找
不到。添加[.c.] =BC到编译表,同时输出第五个字符B
(2),修改[.c.]=C。
1
A
2
B
3
C
4
5
6
ABB
LZW编码
输入码流:ABABBABCABABBA 1、初始化:#1=A,#2=B,#3=C。现在开始读取
第一个字符A,[.c.] +A=A,可以在编译表中找到。不
做任何事继续读取第二个字符B,[.c.]+B=AB。
1 A
2 B
3 C
4
5
6
7
8
9
A
B
1
LZW编码
输入码流:ABABBABCABABBA
11
编码举例:
编码符号表:
A
[.C.]
输入
输出
1 2
编码
A B C AB BA
字典
A B A B B A B C A B 5 2 3 4 1 2
3 4 5
编码
字符
B A AB B BA B
1
2 3
A
B C
6
ABB
7 8 9
BAB BC CA
假设输入字符串为 ABABBABCABABBA,
则LZW压缩算法按右 表所示方式进行工作:
码流 。
1 A
2 B
3 C
4
5
6
ABB
7
BAB
8
BC
9
CA
A
ABA
B
ABBA
AB BA
输出码流:12452346 1
10
LZW编码
LZW编码算法步骤:
BEGIN s = 下一个要输入字符; while not EOF { c = 下一个要输入字符; If s + c 存在于字典中; s = s + c; Else { 输出对于s的编码; 添加字符串s + c到字典中,并用新的编码符号标记; s = c; } } 输出对于s的编码; END
[.c.]+A=ABBA,在编译表中不能找到。添加[.c.] =ABBA到编译表,
同时输出第八个字符ABB(6),修改[.c.]=A。
1
A
2
B
3
C
4
5
6
ABB
7
BAB
8
BC
9
CA
A
ABA
B
ABBA
AB BA
输出码流:1245234 6
9
LZW编码
输入码流:ABABBABCABABBA
10、好了,现在没有数据了,输出[.c.]的值A(1)到编
1
A
2
B
3
C
4
5
6
ABB
7
BAB
8
BC
9
CA
A
ABA
B
C
AB BA
输出码流:124523 4
8
LZW编码
输入码流:ABABBABCABABBA
9、再读取下一个字符B,[.c.]+B=AB。在编译表能找到AB=4, 修改[.c.]=AB,那么再读取下一个字符B,[.c.]+B=ABB,在编译 表中能找到ABB=6,修改[.c.]=ABB,那么再读取下一个字符A,
1 A 2 B 3 C 4 5 6 AB BA 7 8 9 A
B
输出码流:1 2
3
LZW编码
输入码流:ABABBABCABABBA
4、再读取下一个字符B,[.c.]+B=AB。在编译表能找到 AB=4,修改[.c.]=AB,那么再读取下一个字符B, [.c.]+B=ABB,在编译表中不能找到。添加[.c.] =ABB到 编译表,同时输出第三个字符AB(4),修改[.c.]=B。