LZW和Huffman编码都是无损压缩算法,不同的是前者是基于字符串替换,而后者是基于概
率的。
LZW是一种比较复杂的压缩算法,其压缩效率也比较高。我们在这里只介绍一下它的基本
原理:LZW把每一个第一次出现的字符串用一个数值来编码,在还原程序中再将这个数值还
原成原来的字符串。例如:用数值0x100代替字符串“abccddeee”,每当出现该字符串时,
都用0x100代替,这样就起到了压缩的作用。至于0x100与字符串的对应关系则是在压缩过程
中动态生成的,而且这种对应关系隐含在压缩数据中,随着解压缩的进行这张编码表会从压
缩数据中逐步得到恢复,后面的压缩数据再根据前面数据产生的对应关系产生更多的对应关
系,直到压缩文件结束为止。LZW是无损的。GIF文件采用了这种压缩算法。
要注意的是,LZW 算法由Unisys公司在美国申请了专利,要使用它首先要获得该公司的认
可。
D.A.Huffman 于 1952 年第一次发表了他的论文“最小冗余度代码的构造方法”(A Method
for the Construction of Minimum Redundancy Codes)。从此,数据压缩开始在商业程序
中实现并被应用在许多技术领域。UNIX 系统上一个不太为现代人熟知的压缩程序 COMPACT
就是 Huffman 0 阶自适应编码的具体实现。
关于Huffman编码的详细原理,请看: http://artpro.533.net/compress/Chapter3.htm