为什么bzip2的最大块大小为900k?

时间:2018-02-08 07:02:33

标签: compression bzip2 burrows-wheeler-transform

bzip2(即Julian Seward的this program)列出了100k到900k之间的块大小:

 $ bzip2 --help
 bzip2, a block-sorting file compressor.  Version 1.0.6, 6-Sept-2010.

 usage: bzip2 [flags and input files in any order]

   -1 .. -9            set block size to 100k .. 900k

此数字对应于写入压缩文件headerhundred_k_blocksize值。

documentation开始,内存要求如下:

Compression:   400k + ( 8 x block size )

Decompression: 100k + ( 4 x block size ), or
               100k + ( 2.5 x block size )

在编写原始程序时(1996年),我想7.6M(400k + 8 * 900k)可能是计算机上的大量内存,但对于今天的机器来说,它什么都没有。

我的问题是两部分:

1)使用更大的块尺寸可以实现更好的压缩吗? (天真地我假设是)。有没有理由不使用更大的块?压缩的cpu时间如何随块的大小而缩放?

2)实际上,是否存在允许更大块大小的bzip2代码(或替代实现)的任何分支?这需要对源代码进行重大修改吗?

文件格式似乎足够灵活,可以处理这个问题。例如......由于hundred_k_blocksize包含指示块大小的8位字符,因此可以向下延伸ASCII table以指示更大的块大小(例如':' = {{ 1}} =&gt; x3A1000k = ';' =&gt; x3B1100k = '<' =&gt; {{1} },...)。

1 个答案:

答案 0 :(得分:2)

Matt Mahoney从他的大文本压缩基准程序编译程序支持你的直觉,即更大的块大小应该导致更高的压缩率。例如,开源BWT程序BBB(http://mattmahoney.net/dc/text.html#1640)的压缩比从10 ^ 6到10 ^ 9的块大小提高了约40%。在这两个值之间,压缩时间加倍。现在,使用最初由7zip作者Igor Pavlov描述的LZ变体(称为LZMA2)的“xz”程序开始超越bzip2作为压缩源代码的默认策略,值得研究增加bzip2的可能性。阻止大小以查看它是否可行。此外,由于专利限制,bzip2避免了算术编码,这已经过期。结合Jarek Duda开发的使用快速非对称数字系统进行熵编码的可能性,现代化的bzip2在压缩比和速度方面都非常具有竞争力。