[数据压缩]实验三 LZW编码

LZW编码概述

  • LZW的编码思想是不断地从字符流中提取新的字符串,通俗地理解为新 “ 词条 ” ,然后用 “ 代号 ” 也就是码字表示这个 “ 词条 ” 。这样一来,对字符流的编码就变成了用码字去替 换字符流,生成码字流,从而达到压缩数据的目的。
  • LZW编码是围绕称为词典的转换表 来完成的, LZW 编码器通过管理这个词典完成输入与输出之间的转换。
  • LZW编码器的输 入是字符流,字符流可以是用 8 位 ASCII 字符组成的字符串,而输出是用 n 位 ( 例如 12 位 ) 表 示的码字流。
  • 相比于Huffman编码:1)LZW编码只需要一遍扫描,具有自适应的特点;2)采用数字查找树/键树的算法,较为简单,便于快速实现。

LZW编码原理

编码时,有一个前缀串变量P和一个单字符变量C,

  • 词典初始化未包含所有的单字符,当前前缀串为空

  • 将下一个字符读入C

  • 检查P+C是否在词典中。如果在,将C添加到P,然后回到2;如果不在,将输出与P对应的码字(短语索引),将P+C放到词典中,然后令P=C,也就是在P中只保留刚读入的单字符,回到第二步。

 解码步骤

1)在开始译码时词典包含所有可能的前缀根。
2)令 CW : = 码字流中的第一个码字。
3)输出当前缀 - 符串 string.CW 到码字流。
4)先前码字 PW : = 当前码字 CW 。
5)当前码字 CW : = 码字流的下一个码字。
6)判断当前缀 - 符串 string.CW是否在词典中。
        (a)如果 ” 是 ” ,则把当前缀 - 符串 string.CW 输出到字符流。
                        当前前缀P = 先前缀 - 符串 string.PW 。
                        当前字符C 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值