【问题标题】:How can a file be compressed to less than its entropy?如何将文件压缩到小于其熵?
【发布时间】:2015-12-07 20:20:50
【问题描述】:

我创建了一个文件,其中包含 100,000 个从集合 {1,2,3,4,5,6,7,8} 中均匀抽取的数字(概率为 1/8)。

查看我硬盘上这个文件的大小时,它是 293 KB(千字节),这是有道理的,因为需要 3 位来“识别”介于 1 和 8 之间的数字以及 3*100,000 = 300知识库。

接下来我使用 Win-zip 压缩文件,发现文件压缩到只有 57 KB !这怎么可能,因为我希望我用于抽奖的随机数生成器 - 出于所有实际目的 - 是理想的。这意味着序列应该是真正随机的,因此文件的大小应该由它的熵(即 300 KB)给出?

【问题讨论】:

  • 我使用了 R 语言:y

标签: r compression entropy


【解决方案1】:

恐怕你对某些概念感到困惑。

3 位乘以 100,000 得到 300,000 ,一个字节有 8 位,大约相当于 37.5 KB。这与 300 KB 相差甚远。

(无论如何,如果您要创建“一个包含 100,000 个数字的文件”,那么您的硬盘上就没有魔法仙女,它会计算出您的数字的最小和最大范围并存储它们在文件中使用最少的位数来表示它们。)

因此,消除 300 KB 与 100,000 个单位数的熵绝对无关是非常重要的。

你完全没有告诉我们你是如何创建那个文件的,所以它的文件格式是个谜,但我们可以做一些简单的计算和猜测:293 KB 乘以 1024 是 300,000,所以你有一个 300,000 字节的文件。这意味着您要为每个数字写入 3 个字节。这意味着您已将这些数字写为文本,在文本文件中,每个数字后跟一个逗号,然后跟一个空格,或者每个数字后跟一个回车和换行,或类似的东西。

文本文件格式在存储空间方面非常浪费。

所以,是的,这是一个高度可压缩的文件,主要由相同的字节组成,即使是不相同的字节(数字)也都映射到每个只有 3 位,所以难怪整个文件都被压缩了那么好。

在提出这个问题的过程中没有损害任何自然规律。

【讨论】:

  • 感谢您为我解惑!有趣的是,当我运行不同时
  • 谢谢!你是完全正确的:将大小除以 8 已经非常接近观察到的大小!有趣的是,当我直接应用不同的压缩算法(从 R 内部而不显式保存文件)运行练习时,我发现最佳压缩器的每位数 0.38 字节非常接近 3/8=0.375 的理论值。 (:-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多