我创建了一个文件,其中包含从集合{1,2,3,4,5,6,7,8}中统一绘制的100,000个数字(概率为1/8)。
当我在硬盘上查看此文件的大小时,它是293 KB(千字节),这是有道理的,因为需要3位才能识别" 1到8和3 * 100,000 = 300 KB之间的数字。
接下来,我使用Win-zip压缩文件,发现文件减少到只有57 KB!这怎么可能是因为我希望我用于绘制的随机数生成器 - 出于所有实际目的 - 是理想的。这意味着序列应该是真正随机的,因此文件的大小应该由其熵(300 KB)给出?
答案 0 :(得分:3)
我担心你对某些概念感到困惑。
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位,所以难怪整个文件被压缩好吧
在提出这个问题时,没有任何自然法则受到伤害。