4

我真的需要知道每个 lzma 参数 (mf, fb, lp, ...) 的含义。我在互联网上找不到任何好的文档。我需要这个算法的细节。最详细的是: http ://www.bugaco.com/7zip/MANUAL/switches/method.htm 我将不胜感激。

最好的祝愿,沙迪。

4

1 回答 1

19

根据维基百科 no complete natural language specification of the compressed format seems to exist。但是指定了配置设置。

在我的工作中,LZMA SDK我发现了以下压缩设置CLzmaEncPropsCLzma2EncProps结构类型:

LZMA 选项:

等级

  • 描述:压缩级别。
  • 范围:[0;9]。
  • 默认值:5。

字典大小

  • 说明:字典大小。
  • 范围:[1<<12;1<<27] 表示32-bit版本或 [1<<12;1<<30] 表示64-bit版本。
  • 默认值:1<<24。

液晶显示器

  • 描述:前一个字节的高位数,用作文字编码的上下文。
  • 范围 [0;8]。
  • 默认值:3
  • 有时 lc = 4 会为大文件带来收益。

LP

  • 说明:要包含在literal_pos_state 中的字典位置的低位数。
  • 范围:[0;4]。
  • 默认值:0。
  • 当周期等于 2^value(其中 lp=value)时,它适用于周期性数据。例如,对于 32 位(4 字节)定期数据,您可以使用 lp=2。如果更改 lp 开关,通常最好设置 lc=0。

  • 说明:pb 是要包含在 pos_state 中的字典位置的低位数。
  • 范围:[0;4]。
  • 默认值:2。
  • 当周期等于 2^value(其中 lp=value)时,它适用于周期性数据。

算法

  • 说明:设置压缩模式。
  • 选项:0 = 快速,1 = 正常。
  • 默认值:1。

脸书

  • 说明:设置 Deflate/Deflate64 编码器的快速字节数。
  • 范围:[5;255]。
  • 默认值:128。
  • 通常,较大的数字会提供更好的压缩比和较慢的压缩过程。较大的快速字节参数可以显着提高包含长相同字节序列的文件的压缩率。

蓝牙模式

  • 描述:为 LZMA 设置匹配查找器。
  • 选项:0 = hashChain 模式,1 = binTree 模式。
  • 默认值:1。
  • 默认方法是 bt4。来自 hc* 组的算法不能提供良好的压缩比,但它们通常与快速模式结合使用非常快。

numHashBytes

  • 描述:哈希字节数。有关详细信息,请参阅此处mf={MF_ID}的部分。
  • 选项:2、3 或 4。
  • 默认值:4。

麦克

  • 说明:设置匹配查找器的循环(通过)数。
  • 范围:[1;1<<30]。
  • 默认值:32。
  • 如果您指定 mc = 0,LZMA 将使用默认值。通常,较大的数字会提供更好的压缩比和较慢的压缩过程。例如,mf=HC4 和 mc=10000 可以提供与 mf=BT4 几乎相同的压缩比。

写结束标记

  • 说明:写入或不写入结束标记的选项。
  • 选项:0 - 不写入 EOPM,1 - 写入 EOPM。
  • 默认值:0。

线程数

  • 说明:线程数。
  • 选项:1 或 2
  • 默认值:2

LZMA2 选项:

LZMA2是修改版LZMA。它提供了以下优点LZMA

  1. 比无法压缩的数据更好的压缩率。LZMA2 可以以未压缩的形式存储此类数据块。它还可以更快地解压缩此类数据。
  2. 更好的多线程支持。如果您压缩大文件,LZMA2可以将该文件拆分为块并在多个线程中压缩这些块。

注意: LZMA2也支持所有LZMA参数,但lp + lc不能大于4.

块大小

  • 描述:设置块大小。
  • 默认值:dictSize * 4。

numBlockThreads

  • 说明:设置每个块(块)的线程数。

numTotalThreads

  • LZMA2说明:可以使用的最大线程数。

注意: 使用:和模式LZMA2中的每个块有 1 个线程;和模式中的每个块有 2 个线程。如果设置为仅使用一个块所需的线程数,它不会将流拆分为块。因此,您可以针对不同数量的线程获得不同的压缩比。x1x3x5x7x9LZMA2

我认为为了获得关于这个主题的更多信息,你必须以更深入的方式学习LZMA. 互联网上关于它的例子很少,文档也很不完整。

更多信息在这里:

http://sevenzip.sourceforge.jp/chm/cmdline/switches/method.htm

http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Markov_chain_algorithm

http://linux.die.net/man/1/lzma

于 2014-01-27T15:29:24.210 回答