LZW算法的个人理解与简单Python实现

本文介绍了LZW算法的理解和Python实现。重点在于理解压缩和解压过程中字典的创建和还原,以及如何根据代码数字还原字典条目。通过示例代码展示了算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考http://bcb.lcsoft.net/document-2027.html

我是参照他括号里给出不同的实现,即“STRING  =  STRING  + CHARACTER" 和 “CHARACTER  =  first  character  in  STRING "

参考博文对LZW算法的解释比较详细。所以这里我只谈谈我个人是如何理解这个算法。表达不是很清晰,请原谅。

压缩过程不难理解。我主要说说解压过程。
无论是压缩还是解压,都是围绕字典展开的。所以要理解LZW算法,应该首先明白字典创建以及还原的原理。
所以,如何理解算法中的这句话“add  OLD_CODE  +  CHARACTER  to  the  translation  table ”是关键。我的理解是OLD_CODE是上一个数字代码对应的字符串(对应程序中变量oldCodeStr),CHARACTER是当前数字代码对应字符串的首个字符(对应程序中curCodeStr[0])。

我们知道,每个代码数字(设为x)被输出都是有原因的。原因就是遇到了字典中没有的字符串(设为字符串a)。为了可以还原字典,我们要得到a。而由压缩的原理可知,a = (x在字典中对应的字符串(设为b)) + (原字符流中b后面紧接着的字符(设为c))(对应语句3)。(因为在压缩时,遇到字典中没有的字符串时,是将这个字符串的前缀的代码数字输出的,反过来,代码数字对应的字符串也只是所遇到的字典中没有的字符串的前缀)。其中c也就是下一个数字代码所对应字符串的首个字符。


也就是说,每一个数字都代表着压缩时字典多了一个条目。而这个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值