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

wps_clip_image-18270

无损压缩

http://zh.wikipedia.org/wiki/Category:%E6%97%A0%E6%8D%9F%E5%8E%8B%E7%BC%A9%E7%AE%97%E6%B3%95

wps_clip_image-8565

常见压缩算法\程序

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

现实例子

wps_clip_image-1013

lzma sdk与zlib编程

这两个SDK都提供了一些简单的内存数据压缩方法。

zlib

zlib使用DEFLATE算法 。

http://zlib.net

这网站还在墙外。

wps_clip_image-13399

编译:nmake -f win32\makefile.msc

默认是编译采用MD选项。要是需要MT,修改makefile文件中的CFLAGS就行了。

简单的代码

wps_clip_image-23805

lzma sdk

lzma算法。

http://www.7-zip.org/sdk.html

wps_clip_image-12634

就用c接口。

简单的代码

wps_clip_image-5704

wps_clip_image-6815

zlib与lzma的简单比较

wps_clip_image-10402

可见lzma压缩更耗时一些,压缩后的数据比zlib压缩的数据更小,但解压速度与zlib一样很快。

测试工程下载

http://www.cppblog.com/Files/everett/compress_test.7z

参考资料

http://www.cppblog.com/windcsn/archive/2006/01/06/2476.aspx

http://bbs.chinaunix.net/thread-149731-1-1.html

你可能感兴趣的:(算法)