G-Spider 发表于 2011-2-23 21:55:14

数据压缩:完全参考


http://www.davidsalomon.name/DC4advertis/DComp4Ad.html
http://download.csdn.net/source/2082674

wayne 发表于 2011-2-26 10:47:15

1# G-Spider

在http://library.nu 里搜到了该书的链接,不用注册即可下载:

http://ifile.it/ihk7pbj/_eIhbVGtED68.7z

G-Spider 发表于 2011-2-26 11:22:25

上书也提到了一点关于LZMA,(Lempel-Ziv-Markov chain-Algorithm的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法,开发者是Igor Pavlov
可以到http://www.7-zip.org/ 下载到SDK。
可以在LzmaLib.h找到压缩LzmaCompress与解压缩LzmaUncompress的接口说明。
LZMA格式的解压,依赖Alloc.c   , LzmaDec.c,LzmaLib.c, LzmaLib.h ,Types.h ,LzmaDec.h ,Alloc.h这7个文件再加上自己写的main函数就可以集成解压。/*
LzmaCompress
------------

outPropsSize -
   In:the pointer to the size of outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.
   Out: the pointer to the size of written properties in outProps buffer; *outPropsSize = LZMA_PROPS_SIZE = 5.

LZMA Encoder will use defult values for any parameter, if it is
-1for any from: level, loc, lp, pb, fb, numThreads
   0for dictSize

level - compression level: 0 <= level <= 9;

level dictSize algofb
    0:    16 KB   0    32
    1:    64 KB   0    32
    2:   256 KB   0    32
    3:   1 MB   0    32
    4:   4 MB   0    32
    5:    16 MB   1    32
    6:    32 MB   1    32
    7+:   64 MB   1    64

The default value for "level" is 5.

algo = 0 means fast method
algo = 1 means normal method

dictSize - The dictionary size in bytes. The maximum value is
      128 MB = (1 << 27) bytes for 32-bit version
          1 GB = (1 << 30) bytes for 64-bit version
   The default value is 16 MB = (1 << 24) bytes.
   It's recommended to use the dictionary that is larger than 4 KB and
   that can be calculated as (1 << N) or (3 << N) sizes.

lc - The number of literal context bits (high bits of previous literal).
   It can be in the range from 0 to 8. The default value is 3.
   Sometimes lc=4 gives the gain for big files.

lp - The number of literal pos bits (low bits of current position for literals).
   It can be in the range from 0 to 4. The default value is 0.
   The lp switch is intended for periodical data when the period is equal to 2^lp.
   For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's
   better to set lc=0, if you change lp switch.

pb - The number of pos bits (low bits of current position).
   It can be in the range from 0 to 4. The default value is 2.
   The pb switch is intended for periodical data when the period is equal 2^pb.

fb - Word size (the number of fast bytes).
   It can be in the range from 5 to 273. The default value is 32.
   Usually, a big number gives a little bit better compression ratio and
   slower compression process.

numThreads - The number of thereads. 1 or 2. The default value is 2.
   Fast mode (algo = 0) can use only 1 thread.

Out:
destLen- processed output size
Returns:
SZ_OK               - OK
SZ_ERROR_MEM      - Memory allocation error
SZ_ERROR_PARAM      - Incorrect paramater
SZ_ERROR_OUTPUT_EOF - output buffer overflow
SZ_ERROR_THREAD   - errors in multithreading functions (only for Mt version)
*/

MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen,
unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */
int level,      /* 0 <= level <= 9, default = 5 */
unsigned dictSize,/* default = (1 << 24) */
int lc,      /* 0 <= lc <= 8, default = 3*/
int lp,      /* 0 <= lp <= 4, default = 0*/
int pb,      /* 0 <= pb <= 4, default = 2*/
int fb,      /* 5 <= fb <= 273, default = 32 */
int numThreads /* 1 or 2, default = 2 */
);

/*
LzmaUncompress
--------------
In:
dest   - output data
destLen- output data size
src      - input data
srcLen   - input data size
Out:
destLen- processed output size
srcLen   - processed input size
Returns:
SZ_OK                - OK
SZ_ERROR_DATA      - Data error
SZ_ERROR_MEM         - Memory allocation arror
SZ_ERROR_UNSUPPORTED - Unsupported properties
SZ_ERROR_INPUT_EOF   - it needs more bytes in input buffer (src)
*/

MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen,
const unsigned char *props, size_t propsSize);上面两个函数的src串的长度是确定的,而dest串的长度是通过返回得到的。


qianyb 发表于 2011-2-26 11:35:05

本帖最后由 qianyb 于 2011-2-26 11:57 编辑

2#的需要解压密码,请问解压密码是多少?

默认都是library.nu 的

不是啊

wayne 发表于 2011-2-26 11:36:45

3# G-Spider
我只知道rle 压缩

wayne 发表于 2011-2-26 11:37:18

4# qianyb
默认都是library.nu 的

仙剑魔 发表于 2011-3-14 09:58:29

除了PAQ,现在别的我都不感兴趣了...

G-Spider 发表于 2011-3-14 12:51:52

7# 仙剑魔
我想PAQ“高压缩”背后的时间代价是最大的隐痛,以前我试过很多PAQ系列,深有体会。当前,从资源角度,相对的高压缩率和用时极少才是热捧的对象。
当然,如果LS的能够解决时间效率问题,你会出名的。

wayne 发表于 2011-3-15 08:03:07

4# qianyb

无意间发现你这个帖子更新了。
才意识到我没有回复你,莫怪啊
现给出一个无需密码的链接
http://ifile.it/jsn5bh/ebooksclub.org__Data_Compression__The_Complete_Reference__Fourth_Edition.pdf

qianyb 发表于 2011-3-15 08:50:08

没注意到正常的,谢谢你了
页: [1]
查看完整版本: 数据压缩:完全参考