几种压缩算法原理介绍 http://www.cppblog.com/windcsn/archive/2006/01/06/2476.aspx
数字压缩编码技术 http://cs.nju.edu.cn/yangxc/dcc2003.files/jszc-sub/jszc-043.html
无损压缩比较常见和有效的是:LZW,霍夫曼和算术编码
LZW算法:
参考文章
LZW数据压缩算法的原理分析 http://www.cnblogs.com/jillzhang/archive/2006/11/06/551298.html
LZW算法 http://baike.baidu.com/view/401141.htm
Lempel–Ziv–Welch http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch
LZW算法 http://blog.sina.com.cn/s/blog_6ddaacb30100rcuk.html 讲了编码和解码
http://www.dspguide.com/ch27/5.htm
各种语言的实现源码 http://rosettacode.org/wiki/LZW_compression#C
两个靠谱的C和C++源码实现 http://www.zabkat.com/blog/24Jan10-lzw-compression-code.htm http://michael.dipperstein.com/lzw/
基本思想——建立一个字符串表,把每一个第一次出现的字符串放入串表中,并用一个数字来表示,这个数字与此字符串在串表中的位置有关,并将这个数字存入压缩文件中,如果这个字符串再次出现时,即可用表示它的数字来代替,并将这个数字存入文件中。
算法简单,而且传输的时候不用传输串表,可以根据压缩数据重新生成串表,这样就减少了很多带宽,不像霍夫曼算法需要传递一个对应表。
对于LZW算法,重复越多压缩比越大,但文件也不能过长,否则会适得其反,一般1M以内。
对于解码过程,和编码过程相反,有一点要注意如果当前C表示的字符数多于一个,我们用C1表示C的第一个,那么为P+C1建立对应关系,而不是P+C;如
P C out data code
20 T 27 TO T TT 35
27 TO 29 BE TO TOB 36