054 - 问,压缩算法有哪些?
http://www.cnblogs.com/jackdong/admin/EditPosts.aspx?opt=1
最近项目中要用到内存数据压缩(客户端将数据在内存中压缩后,传输到服务器,服务器解压,反序列化,存入数据库)。
自然想到了zlib和lzma sdk。
简介
在计算机科学和信息论中,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据位元(或者其它信息相关的单位)表示信息的过程。
数据压缩能够实现是因为多数现实世界的数据都有统计冗余。
压缩算法分类
http://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%8E%8B%E7%BC%A9
有损压缩
http://zh.wikipedia.org/wiki/Category:%E6%9C%89%E6%8D%9F%E5%8E%8B%E7%BC%A9%E7%AE%97%E6%B3%95
无损压缩
http://zh.wikipedia.org/wiki/Category:%E6%97%A0%E6%8D%9F%E5%8E%8B%E7%BC%A9%E7%AE%97%E6%B3%95
常见压缩算法\程序
RLE
http://zh.wikipedia.org/wiki/%E8%A1%8C%E7%A8%8B%E9%95%BF%E5%BA%A6%E7%BC%96%E7%A0%81
哈夫曼编码
http://zh.wikipedia.org/wiki/%E5%93%88%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81
ZIP
http://zh.wikipedia.org/wiki/ZIP_(%E7%AE%97%E6%B3%95)
LZMA
http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Markov_chain_algorithm
DEFLATE
http://zh.wikipedia.org/zh-cn/DEFLATE
现实例子
lzma sdk与zlib编程
这两个SDK都提供了一些简单的内存数据压缩方法。
zlib
zlib使用DEFLATE算法 。
这网站还在墙外。
编译:nmake -f win32\makefile.msc
默认是编译采用MD选项。要是需要MT,修改makefile文件中的CFLAGS就行了。
简单的代码
lzma sdk
lzma算法。
就用c接口。
简单的代码
zlib与lzma的简单比较
可见lzma压缩更耗时一些,压缩后的数据比zlib压缩的数据更小,但解压速度与zlib一样很快。
测试工程下载
http://www.cppblog.com/Files/everett/compress_test.7z