10

如果我跑

dd if=/dev/zero bs=8192 count=1000000 | gzip --best >test.gz

我得到一个 7950131 字节的输出文件。所以压缩比约为 1/1000。但是我希望 gzip 使用运行长度编码 + 霍夫曼代码,因此至少可以达到 1/100000。为什么它不能更好地压缩全零文件?

4

1 回答 1

15

deflate 格式的最大压缩比为 1032:1。这是因为可以编码的最长运行是 258 字节。每次这样的运行至少需要两位(一位用于长度代码,一位用于距离代码),因此每个压缩字节可以编码 4*258 = 1032 个未压缩字节。

您可以通过 gzip 压缩 gzip 的结果来获得更多压缩。通常这不会改善压缩,但对于很长的运行它可以。

顺便说一句,deflate 使用的 LZ77 方法比游程编码更通用。不仅使用长度,还使用长度/距离对。这允许从一段距离向后复制一个字符串,或者复制一个距离为一的运行长度的字节,或者复制距离为三的字节的三倍,等等。

于 2013-05-28T14:43:44.460 回答