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
此数字对应于写入压缩文件header的hundred_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}} => x3A
,1000k
= ';'
=> x3B
,1100k
= '<'
=&gt; {{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在压缩比和速度方面都非常具有竞争力。