一:编解码原理

1.编码原理
LZW的编码思想是不断地从字符流中提取新的字符串,通俗地理解为新“词条”,然后用“代号”也就是码字表示这个“词条”。这样一来,对字符流的编码就变成了用码字去替换字符流,生成码字流,从而达到压缩数据的目的。LZW编码是围绕称为词典的转换表来完成的。LZW编码器通过管理这个词典完成输入与输出之间的转换。LZW编码器的输入是字符流,字符流可以是用8位ASCII字符组成的字符串,而输出是用n位(例如12位)表示的码字流。LZW编码算法的步骤如下:
步骤1:将词典初始化为包含所有可能的单字符,当前前缀P初始化为空。
步骤2:当前字符C=字符流中的下一个字符。
步骤3:判断P+C是否在词典中
(1)如果“是”,则用C扩展P,即让P=P+C,返回到步骤2。
(2)如果“否”,则
输出与当前前缀P相对应的码字W;
将P+C添加到词典中;
令P=C,并返回到步骤2

2.解码原理
LZW解码算法开始时,译码词典和编码词典相同,包含所有可能的前缀根。具体解码算法如下:
步骤1:在开始译码时词典包含所有可能的前缀根。
步骤2:令CW:=码字流中的第一个码字。
步骤3:输出当前缀-符串string.CW到码字流。
步骤4:先前码字PW:=当前码字CW。
步骤5:当前码字CW:=码字流的下一个码字。
步骤6:判断当前缀-符串string.CW 是否在词典中。
(1)如果”是”,则把当前缀-符串string.CW输出到字符流。
当前前缀P:=先前缀-符串string.PW。
当前字符C:=当前前缀-符串string.CW的第一个字符。
把缀-符串P+C添加到词典。
(2)如果”否”,则当前前缀P:=先前缀-符串string.PW。
当前字符C:=当前缀-符串string.CW的第一个字符。
输出缀-符串P+C到字符流,然后把它添加到词典中。
步骤7:判断码字流中是否还有码字要译。
(1)如果”是”,就返回步骤4。
(2)如果”否”,结束。

二:运行结果

对十种不同格式的文件分别进行编解码
原始文件:
LZW编解码算法实现与分析实验报告编码后生成文件
LZW编解码算法实现与分析实验报告

解码后生成文件
LZW编解码算法实现与分析实验报告

原始文件格式 原始文件大小 编码后文件大小 压缩比
doc 316KB 319KB 0.9906
qcif 891KB 553KB 1.6112
yuv 732KB 96KB 7.625
jpg 463KB 518KB 0.8938
txt 100KB 60KB 1.6667
tga 1201KB 1387KB 0.8659
pdf 2785KB 3288KB 0.8470
xls 140KB 89KB 1.5730
pptx 208KB 267KB 0.7790
png 129KB 174KB 0.7414

相关文章:

  • 2021-10-10
  • 2021-10-19
  • 2022-12-23
  • 2022-12-23
  • 2021-10-30
猜你喜欢
  • 2021-11-27
  • 2021-12-23
  • 2021-12-23
  • 2022-01-06
  • 2021-12-13
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案