您可以实现的随机二进制数据的最佳文件压缩是什么?

时间:2011-01-17 17:45:40

标签: random compression binary-data

具体来说,那里有哪些程序以及压缩率最高的程序?我试过谷歌搜索它,但似乎经验会超过搜索结果,所以我问。

3 个答案:

答案 0 :(得分:56)

如果文件大小可以精确地指定给该位,对于任何文件大小N,恰好有2 ^(N + 1)-1个可能的N位或更小的文件。为了将大小为X的文件映射到某个较小的大小Y,必须将一些大小为Y或更小的文件映射到大小为X或更大的文件。无损压缩可以起作用的唯一方法是,可以识别某些可能的文件比其他文件更可能;在这种情况下,可能的文件将缩小,不太可能的文件将会增长。

作为一个简单的例子,假设一个人希望无损地存储一个位是随机且独立的文件,但是不是50%的位被设置,只有33%是。如果两个位都清零,则可以通过取每对位来写压缩这样的文件,如果第一位被设置则为“10”而第二位不是,如果第二位被设置则为“110”,第一次没有,如果两个位都已设置,则为“111”。结果是每对比特将在44%的时间内成为一位,在22%的时间内成为两位,在33%的时间内成为三位。虽然一些数据串会增长,但其他数据会缩小;收缩的对 - 如果概率分布如预期的那样 - 超过那些增长的那些(4/9文件会缩小一点,2/9会保持不变,3/9会增长,所以对将会增加平均缩小1/9位,文件平均缩小1/18 [因为1/9数字是每对位数]。

请注意,如果这些位实际上具有50%的分布,那么只有25%的对将成为一位,25%将保留两位,50%将成为三位。因此,25%的比特将缩小,50%将增长,因此平均成对率将增长25%,文件将增长12.5%。盈亏平衡点将是约38.2%的位设置(两个减去黄金均值),这将使38.2%的位对收缩并且增长百分比相同。

答案 1 :(得分:9)

没有一种通用的最佳压缩算法。已经发明了不同的算法来处理不同的数据。

例如,JPEG压缩允许您压缩图像非常多,因为如果图像中的红色为0xFF或0xFE(通常),则无关紧要。但是,如果您尝试压缩文本文档,则此类更改将是灾难性的。

此外,即使在两种旨在使用相同类型数据的压缩算法之间,您的结果也会因您的数据而异。

示例:有时使用gzip tarball较小,有时使用bzip tarball较小。

最后,对于足够长度的真正随机数据,您的数据可能与原始数据的大小几乎相同(甚至更大)。

答案 2 :(得分:2)

文件存档器7z使用LZMA(Lempel Ziv Markow算法),这是一种年轻的压缩算法,目前具有最佳的压缩率之一(参见页面Linux Compression Comparison)。

除了高压缩率之外的另一个优点:

  • 快速减压,比压缩快10到20倍
  • 解压缩文件时内存占用空间小