改进LZW压缩算法

声明:以下方法由本人与whycadi提出,由本人整理发表,未经作者允许禁止使用或实现。

LZW压缩算法是由LZ78压缩算法改进而来,具有压缩速度快和动态还原码表的特点。然而,LZW压缩算法有着压缩率低,码表易快速膨胀,重复字符利用率低的问题。我对于改进LZW压缩算法有几个想法:

1,动态分配码字(针对字典管理)

仔细研究过LZW压缩算法的朋友们都知道,LZW压缩算法输出的码字就是码表索引值,而索引值必然需要8位以上来储存(码表中有压缩价值的元素的索引值都大于256),使得资源浪费极其严重。我们可以在解压和压缩时都将字典作为一个列表使用,一旦某个元素被输出,就将该元素插入到列表首项。在解压时,只需按相同方法对列表进行管理,即可正确还原数据。

示例:

143,123,1,0,453,2,2……

143被使用后索引值变为了0;

123被使用后索引值变为0,143的索引值变成1;

1再次被使用后索引值变为0,123索引值变为1;

0第三次被使用后索引值变为0,其他元素的索引值不变;

453被使用后索引值变为0,0变为1,1变为2;

2再次被使用后索引值变为0,0变为1,1变为2;

2第四次被使用,2变为0,0变为1,1变为2;

……

2,特殊标识码(针对输出优化)

我们只需仔细观察原版LZW压缩算法输出的列表,就会发现输出的元素都是整数类型,且一个码字可能会被输出多次。我们其实也可以利用到这个特点,对算法进行改进。在LZ系列压缩算法里,我们可以尝试参照一下LZ77算法的输出。

在输出码字前,判断该码字是否已经输出过一次:

(是):输出一个字符串类型的特殊标识码,这个特殊标识码是码字在输出列表里的索引值

(否):直接输出一个整数类型的码字。

示例一下,以免你们看不懂&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值