了解“随机性”

我无法理解这一点,这更随机?

rand()

要么

rand() * rand()

我发现它是一个真正的脑力激荡,你能帮我吗?

编辑:

直觉上我知道数学答案是他们同样是随机的,但我不禁想到,如果你将两个数字相乘时你“运行随机数算法”两次,你会创建一个更随机的东西,而不仅仅是做它曾经。


只是澄清

虽然以前的答案是正确的,只要您尝试发现伪随机变量或其乘法的随机性,您应该意识到虽然Random()通常是均匀分布的,但Random()* Random()不是。

这是一个通过伪随机变量模拟的均匀随机分布样本:

随机直方图()

        BarChart[BinCounts[RandomReal[{0, 1}, 50000], 0.01]]

虽然这是将两个随机变量相乘后得到的分布:

随机()*随机()的直方图

        BarChart[BinCounts[Table[RandomReal[{0, 1}, 50000] * 
                                 RandomReal[{0, 1}, 50000], {50000}], 0.01]]

所以,两者都是“随机的”,但它们的分布是非常不同的。

另一个例子

虽然2 * Random()是均匀分布的:

2 *随机()的直方图

        BarChart[BinCounts[2 * RandomReal[{0, 1}, 50000], 0.01]]

随机()+随机()不是!

随机()+随机()的直方图

        BarChart[BinCounts[Table[RandomReal[{0, 1}, 50000] + 
                                 RandomReal[{0, 1}, 50000], {50000}], 0.01]]

中心极限定理

中心极限定理表明随着项的增加,Random()的和趋于正态分布。

仅用四个词就可以得到:

随机()+随机()+随机()+随机()的直方图

BarChart[BinCounts[Table[RandomReal[{0, 1}, 50000] + RandomReal[{0, 1}, 50000] +
                   Table[RandomReal[{0, 1}, 50000] + RandomReal[{0, 1}, 50000],
                   {50000}],
         0.01]]  

在这里,您可以通过加上1,2,4,6,10和20个均匀分布的随机变量来看到从均匀分布到正态分布的道路:

添加了不同数量的随机变量的直方图

编辑

几个学分

感谢Thomas Ahle在评论中指出,最后两张图片中显示的概率分布被称为Irwin-Hall分布

感谢Heike为她的奇妙的[]功能


我猜这两种方法都是随机的,尽管我的直觉会说rand() * rand()的随机性较小,因为它会使更多的零点播种。 一旦rand()0 ,总数就变为0


也不是“更随机”。

rand()根据伪随机种子生成一组可预测的数字(通常基于当前时间,该时间总是在变化)。 乘以序列中的两个连续数字会生成一个不同的,但同样可预测的数字序列。

解决这是否会减少碰撞,答案是否定的。 由于0 < n < 1两个数字相乘的效果,它实际上会增加碰撞。 结果将是一个较小的部分,导致结果偏向于频谱的较低端。

一些进一步的解释。 在下文中,“不可预知”和“随机”是指某人根据以前的数字猜测下一个数字的能力,即。 一个神谕。

给定种子x ,它会生成以下值列表:

0.3, 0.6, 0.2, 0.4, 0.8, 0.1, 0.7, 0.3, ...

rand()将生成上面的列表,并且rand() * rand()将生成:

0.18, 0.08, 0.08, 0.21, ...

两种方法都会为相同的种子生成相同的数字列表,因此可以通过预言来预测。 但是如果你看看两个调用相乘的结果,你会发现它们都在0.3尽管在原始序列中分布不错。 由于乘以两个分数的影响,这些数字是有偏差的。 由此产生的数字总是较小,因此尽管仍然不可预测,但更有可能是碰撞。

链接地址: http://www.djcxy.com/p/43205.html

上一篇: Understanding "randomness"

下一篇: What is indexed monad?