在编程中突发奇想,不知道把两个随机数嵌套起来会如何,于是做了个试验:
所谓两个随机数嵌套,就是说,我们定一个值为100,
那么如果我们在100这个范围里取一个随机整数,应该是均匀分布的。
一般的随机到这里就结束了,
接下来我要干的事就是把刚才得到的100之内的随机整数,作为一个范围,在这个整数所给出的范围内,再取一个随机整数。
这个整数就是最后我要的。
那么,这个整数,到底是在100以内均匀分布,还是如何分布的呢?
如果我取一百万个这样的数,他们的平均值是多少呢?
首先我们要搞明白刚才那个过程是如何运作的。
举一个数字小一点的例子,在10内取一个随机数,
随机的过程是均匀的,也就是说,1-10,每个数都有1/10的机会。
形象一些的描述就是这样(这对理解下面的过程有帮助):
我们可以把1-10想想成一个竖条:
1
2
3
4
5
6
7
8
9
10
随机就像一根指针,说停的时候就停在哪里。
停在那里的数,就是我们得到的范围。
而在范围里面随机的话,所有的可能又是均匀分布的,
例如,我随机出4的话,那么1,2,3,4都有1/4的机会。
我们来看下图:
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
最左边我还是保留不动,右边加出了他们的可能性。实质上,这幅图由一个一维模型变成了一个二维模型。虽然不能按照这个模型的比例去思考整个问题,但还是告诉我们一些信息。你可以发现10只出现了一次,而真正操作过程当中也是这样,可能性非常小,必须是范围中包括10,随机又随机出了10。
这样发展下去,我们就不难想象,如果我三重随机的话,模型就将发展成为一个三维的模型。
好了,基本的操作过程清楚了,我们就来看看到底怎么回事。
为了给大家一个直观的理解,我先取了30个单次随机、双重随机、三重随机在0-500的样本,曲线图如下:
蓝色是单次随机,点都比较散。
绿色是双重随机,已经不是均匀分布了,250以上就很少了。
黄色是三重随机,大部分的点都在125一下。
我们再看,下面的准确数字:
考虑到计算的准确性以及电脑的运行能力,
我取0-1000的随机数,单次随机、双重随机、三重随机各十万个样本。
结果如下:
单次随机,十万个样本平均值499.89037,近似于500(1000的一半),误差在+-1.5,还是很均匀的。标准差287.987524,在平均值一个标准差之内的样本占57.84%,平均值两个标准差之内的是100%(标准差都超过最大值的1/4了还有什么好说的。。)
双重随机,平均值250.79212,近似于250(1000的四分之一),误差还是有+-1,这些误差其实不重要了,因为本来我取的就是随机整数。标准差220.227576。在平均值一个标准差之内的样本占69.035%,平均值两个标准差之内的是94.652%
三重随机,平均值125.38799,近似于125(1000的八分之一),误差小于+-1,标准差146.643149(小了好多),在平均值一个标准差之内的样本占85.653%(与我们所观察到的一致),平均值两个标准差之内的是94.115%。
这个结果,我们可以有两个猜测:
猜测一,n重随机,得到的平均值是最大值的1/2^n。
猜测二,双重随机是呈近似正态分布的。
正态分布要求平均值一个标准差内占68%,两个标准差内占95%,
而根据我得到的结果,双重随机一个标准差内占69%,两个标准差内占94.6%
非常接近。我们也可以在随机结果前加个正负的随机,这样就有了水平线上下的波动。
关于正态分布有什么用,
用处就太多了,
比方说,我现在要预测你下次考试分数是多少的话,我不能直接在0-100之间随便取个随机数,这样预测的十分不准确,20分和80分有着同样的几率,而现实生活中的中往往是这样,有很大的几率是在一个小范围内的波动,有的时候会有什么特殊的情况,突然有个高点或者低点。
又比如说,我们要预测世界人口的走势,总的来说,人口是以某个函数上升的,但是在上升的过程中,还是有随机的因素,很多时候可能只是地区闹闹饥荒、感染病之类,波动都很小,但说不定哪天挑起个第三次世界大战,来了个陡降,战后和平又来个猛升,都是有可能的。正态分布就是符合自然发展规律的分布了。
好了,就写那么多了。
签名里面,一分钟杀死十万人,其实是我刚才在调试那个预测未来单眼皮多还是双眼皮多的模型,结果出生死亡率没搞好,过了30年,总人口样本就从十万变成了两千….==!我运行了五六次,两次南京大屠杀了吧!呵呵….
做好了就让大家来看!