随机函数如何真正随机?

时间:2011-04-17 16:08:14

标签: function language-agnostic random

简介

我知道我会在这个问题上失去很多声誉,而且我也知道它会被标记为不合适,但我真的很好奇,所以如果我有任何机会,我就不会放弃得到至少一个答案。

问题

今天我醒来时想:

  

Hei,如果随机函数是由算法创建的,它们怎么能真正随机?

想一想。你怎么能创建一个模拟随机性的函数,而不是已经内置的随机概念?我开始思考:

  

嘿,我会拿一个int数组,然后我会做[事物],然后[事物],而不是[事物],然后我只选择奇数...... ecc

但似乎更有可能使预测选择的内容更加混乱而不是真正的随机性。

是否可以创建随机性?如何创建返回随机整数的函数(例如PHP中的rand())?他们如何模拟随机性?

5 个答案:

答案 0 :(得分:4)

算法生成所谓随机数的函数是pseudorandom number generators。如果您知道用于生成序列的种子,则数字可预测。序列本身是统计随机分布,但不是真正随机的。

true 随机数生成器通常涉及一些从物理世界中采样随机性的硬件,例如放射性或声学噪声。一个简单的实现是采样硬盘访问和鼠标移动。有关真正的RNG,请参阅random.org

强制性xkcd strip

getRandomNumber()...

答案 1 :(得分:1)

他们被称为伪随机数字是有原因的;他们不是真正的随机。 From Wikipedia:

  

伪随机数生成器   (PRNG),也称为确定性   随机比特生成器(DRBG),[1]是一个   生成序列的算法   接近数字的数字   随机数的性质。该   序列并不是真正随机的   它完全取决于   相对较小的初始集   值,称为PRNG的状态。

答案 2 :(得分:1)

如果您想要数学背后,请阅读volume 2, chapter 3 of this seminal work。您可以buy it在书架上看起来令人印象深刻。 (请记住,大多数购买它的人最终从未真正阅读过它 - 这是有充分理由的。它非常密集而且阅读非常困难。)简短的答案不涉及大量难以处理的文本大小是“随机的” “纯粹在算法上生成的数字是pseudorandom,也就是说它们”足够随机“。

答案 3 :(得分:0)

您可能想查看维基百科关于PRNGS的文章 - 我们在PC上的所有随机数生成器(几乎都是)。

关于你可以随机获得的最接近的,我认为在某处做的,是使用CPU中的温度或其他传感器读数作为其中之一的种子。如果种子是随机的(温度不太可能完全相同),则序列尽可能接近随机。

答案 4 :(得分:0)

我通常“得到毫秒”并将其除以伪随机数。这使它更加随机和不可预测。