重温一下 毕业后写的第一个算法 LZW

本文介绍了LZW压缩算法的基本原理及其实现过程。通过提取文本文件中的不同字符并创建编译表,使用字符索引替代原文,从而达到压缩数据的目的。文章提供了Python实现示例,并邀请读者尝试编写解压算法。
LZW压缩算法的基本原理:提取原始文本文件数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小
第一次实现的时候是用C# 和js用于数据压缩 ,当时刚毕业,是根据伪码写的,当时挺痛苦的,后来想想还是挺有意思的:)



#encoding = utf-8
import string

def lzw_compress(s="ababcbababaaaaaaa"):
"""
进行lzw 压缩
"""
dic = {}
for i in string.ascii_letters:
dic[i]=i

result = ''
key = s[0]
#进行向后编码的起始值
dic_index = 129
for i in range(1,len(s)):
v = s[i]
key += v
if dic.has_key(key):
continue
else:
print key,
dic[key] = unichr(dic_index)
dic_index+=1
result += dic.get(key[0:-1])
#print key[0:-1],result.encode("utf-8")
key = v
return result

r = lzw_compress()
print "result is:" ,r.encode("utf-8")

ab ba abc cb bab baba aa aaa aaaa result is: ab*c**a**


感兴趣的同学,可以写个解压的算法,有点像破译密码,挺有意思的。注意基于编码表
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值