一粒沙里看世界

To see a world in a grain of sand,
从一粒沙子看到一个世界,

And a heaven in a wild flower,
从一朵野花看到一个天堂,

Hold infinty in the palm of your hand,
把无限放在你的手掌上,

And eternity in an hour.
把永恒在一刹那收藏。

——William Blake/威廉·布莱克

  有些诗词之所以经久不衰,往往不仅是因为其优美,更是因为其揭示了某个真理而深深触动了每个人,上面这首诗歌用在本文中我个人感觉是相当点题的。

  且说当我们确定了样本容量之后,数据在我们通过大量繁复艰辛的劳作中被测试出来,面对这些枯燥乏味的貌似没有任何规律可言的数字,我们该如何去分析呢?这真的是个难点,以至于初我拿到这些数据的时候束手无策。有一个馊主意,是把这堆测试数据直接推送给用户,告诉用户“我已经详细测试过了,规律是显然的,你也该能看出来”(你也一定不会在意用户脑门上暴起的青筋J)。

  好吧,咱们来谈一谈如何在这堆数据里面扒拉出有用的东西。这真的有点像是一个沙堆,每个沙粒都带了微不足道的一点信息,少了一粒沙子,这个沙堆的外观对我们来说不会有任何改观,多了一粒沙子,对我们来说沙堆的外观也不会有任何变化。如果我们真的较真起来,非要从沙堆里一粒一粒的数走沙子,那么具体到了哪粒沙子取走的时候,这堆沙堆的外观才会发生本质改变呢?太玄乎了,我隐约闻到了“禅”的味道,思绪赶紧此打住。

  初中几何告诉我们,点可以构成线,线可以构成面,面可以构成空间,好,我们先从点开始。为了更好的说明我下面的禅道,首先我准备了这样的一个测试(写了个简单的C程序,用于测试磁盘读写速度)。

  例子:在一台Linux系统的测试机上,测试写入大小为256M文件的所需时间,重复进行2000次。

  我们获得了2000个数据,以毫秒为单位。这么一堆子数据要都列在下面,真的是很痛苦,可以庆幸的是,如果拿这篇文章去投稿,这么多的数字可以为我赚取不少稿费。为了避免痛苦以及赚稿费的嫌疑,我先对这2000个数据简单的排序归类。可以得到这2000个数据的中位数(中位数是把样本总体中的各单位标志值按大小顺序排列后处于数列中点位置的标志值)为463676.5(单位:毫秒,以下略),均值为471381.6。这里可以看出中位数是小于均值的。为什么要这两个值?容后说明。现在我们把2000个数据分成从小值到大值等间距的100个小区间。大值为893491,小值为416412,区间间隔为(893491-416412)/100=4770.79,此时得到下表(区间由小到大排列):

  不难发现区间1-20之间有显著的规律性。这20个区间一共包含了1934个样本,占样本总数的96.7%,将这些样本按其区间间隔再次分为100个区间,则可以得到下表: