六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 89|回复: 0

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

[复制链接]

升级  69.33%

42

主题

42

主题

42

主题

秀才

Rank: 2

积分
154
 楼主| 发表于 2013-1-19 04:10:45 | 显示全部楼层 |阅读模式
LZW压缩算法的基本原理:提取原始文本文件数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小
第一次实现的时候是用C# 和js用于数据压缩 ,当时刚毕业,是根据伪码写的,当时挺痛苦的,后来想想还是挺有意思的:)

#encoding = utf-8import stringdef 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 resultr = lzw_compress()print "result is:" ,r.encode("utf-8")
ab ba abc cb bab baba aa aaa aaaa result is: ab*c*‚…*a**‡ˆ

感兴趣的同学,可以写个解压的算法,有点像破译密码,挺有意思的。注意基于编码表
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表