我创建了一个包含4,000,000个“double”值的二进制文件(总共32MB)。 然后,我将其压缩,令我惊讶的是,该文件仅缩小到46KB。
这几乎是100%的惊吓!这是真的吗?或者我在这里遗漏了什么?
答案 0 :(得分:8)
压缩率取决于算法和数据。例如,32MB的零压缩很好。
我的计算机科学基础非常生疏,但我可以从我记忆中推测出来。双精度可以使用8个字节(64位)。 -1000到1000之间的范围就像2 ^ 11个连续的整数。因此,期望所有数字可能共享64-11 = 53位,并且大部分压缩空间将用于剩余的11位。这已经节省了53/64 = 82.2%。
现在,数据可能并非完全随机。任何体面的压缩器都应该能够检测到重复的串并获得进一步的增益。一个简化的例子:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbb ==> 30a10b