各种压缩软件程序的有趣行为

Interesting behavior of various compression software programs

我正在尝试压缩一个 64 兆字节的文本文件,其中仅包含 7 个不同的字母,随机分布并且出现频率大致相似。

我注意到 7Zip 和 WinRar 等各种压缩软件程序的一个有趣行为。 两个应用程序都达到了大约 35% 的压缩率。

当文件包含8个不同的字母,也是随机分布,出现频率大致相近时,压缩率小于0.3%!

谁能解释一下?

谢谢。

这只能解释为你用“8个不同的字母”构建文件的方式有误。您用七个不同字母构建的文件看起来是正确的,因为压缩比应该是 log2(7)/8,即 0.351。同样是八个字母,压缩比为log2(8)/8,即0.375.

也许您的文件在八个字母中有重复模式。

更新:

您正在使用 rand() 生成您的“随机”分布。不幸的是,rand() 的经典实现在低位具有 非常 很差的随机性,具有重复模式。您的 % 7 使用了 rand() 中的所有位,但 % 8 仅使用了低三位。 % 8 等同于 & 7.

改用 random(),它会生成低位以及任何位都具有良好随机行为的随机数。