改进LZW压缩算法的一个想法

LZW压缩算法是由LZ78压缩算法改进而来,具有压缩速度快和动态还原码表的特点。然而,LZW压缩算法有着压缩比小,码表容易快速膨胀,压缩比容易随着码表的膨胀而减小的问题。我对于改进LZW压缩算法有一个想法:

码字动态分配:

仔细研究过LZW压缩算法的朋友们都知道,LZW压缩算法输出的单个码字就是前缀的码表索引值,而且索引值必然需要8位以上来储存(原生码表中有压缩价值的元素的索引值都大于256),使得资源浪费极其严重。我将加入码表的元素(pc的值)放为第一项(使用的是列表对象),同时将刚刚输出的P的元素项的索引值定为第二项。这样就可提升压缩效果(对比实验中,改进后的LZW压缩算法压缩效果提升了0~20%,理论可以无限提升)。这样既保护了动态还原码表的特点,又提升了效果。

改进后的代码(python):

def codeing(string):
    list = [chr(i)for i in range(256)]
    p = ""
    out = []

    for c in string:
        pc = p + c
        if pc in list:
            p = pc
        else:
            out.append(list.index(p))
            list.insert(0,pc)
            del list[list.index(p)]
            list.insert(1,p)
            p = c
    if p != '':
        out.append(list.index(p))

    sw = len(str(out))/len(string)*100,"%"
    outb = str(out)
    return outb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值