LZW解码的原理及cpp实现

本文详细介绍了LZW压缩算法的原理,包括编码和解码过程。编码步骤包括初始化词典、读取字符并检查词典等;解码则涉及重建词典、读取码字并输出字符等操作。文章还提到了解码代码的实现,展示了压缩前后的文本效果。
摘要由CSDN通过智能技术生成

原理

LZW的思想通过一系列编号来代替短语,再次遇到此短语是用编号来替代,以此来达到压缩的目的。由于词典的构建过程固定故不需要传词典,解决了码表传输的问题。解码时在解码端重建词典即可进行解码。

编码

LZW编码算法的步骤如下:
步骤1:将词典初始化为包含所有可能的单字符,当前前缀P初始化为空。
步骤2:当前字符C=字符流中的下一个字符。
步骤3:判断P+C是否在词典中
(1)如果“是”,则用C扩展P,即让P=P+C,返回到步骤2。
(2)如果“否”,则

  1. 输出与当前前缀P相对应的码字W;
  2. 将P+C添加到词典中;
  3. 令P=C,并返回到步骤2

由于个人水平问题,这次编码的代码使用的是老师已经给出的,包括位输入输出工具及各子函数,不做展示,每个函数的作用及返回值会在解码的代码里中标注

解码

解码的步骤如下:

  1. 在开始译码时词典包含所有可能的前缀根;

  2. 步骤2:令CW:=码字流中的第一个码字;

  3. 步骤3:输出当前缀-符串string.CW到码字流;

  4. 步骤4:先前码字PW:=当前码字CW;

  5. 步骤5:当前码字CW:=码字流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值