为什么程序生成随机数很困难?

24

我的孩子问了我这个问题,可我无法给出简洁易懂的解释。

所以我希望在SO上能有人给出答案。


在SO上有许多关于随机数的问题,请看一下那些问题... - Mitch Wheat
我确实通过谷歌在stackoverflow上搜索过,但是我没有找到任何回答这个问题的问题。 - rbrayb
1
http://xkcd.com/221/ :) - Matt Hamilton
1
我仍然喜欢这个问题。 ;) - Stefan
1
非常感谢所有的回答。孩子们很开心地阅读了它们,并且获得了更好的理解。 - rbrayb
显示剩余4条评论
26个回答

0

区分一下难以预测的数字(计算机可以创建)与不确定性(对于计算机来说更加困难,理论上,任何物理实体如此)可能会有所帮助。


0

设计一个生成真正随机数的算法是很困难的,虽然可以轻松地想出一种生成在某种意义下看起来随机的意外数字的算法。

想象一下设计一个模拟掷骰子的算法。你可以轻松地制定一些程序,在每次迭代中生成不同的数字。但是你能否保证在长期(我指无限期)内,6出现的次数与其他任何数字相同?当设计一个好的随机数生成器时,这就是你必须承担的承诺。如果应用程序(例如彩票)需要,你必须提供关于随机性的强有力保证(即数学证明)。


0

值得注意的是人类在生成随机数方面表现非常差。计算机更糟糕,因为它们只遵循严格的命令集。人类只有在遵循算法,一组指令时才能生成好(伪)随机数。计算机也是如此。

尽管应该注意到,计算机可以从与其连接的“环境”中收集熵,例如键盘和鼠标操作,这有助于生成随机数(直接或通过种子PRNG)。


0
为了让计算机生成一个随机数,计算机必须有一个随机性的来源。它需要被提供一个种子,这个种子不能通过简单地观察或计算得到,如果种子来自时钟,那么通过知道时间可以预测或计算出种子;如果种子来自像拍摄熔岩灯并从图像流中获取数字,那么仅仅通过观察种子就很难知道下一个数字是什么。
计算机没有内置的熔岩灯来生成这种随机性,这就是困难所在,我们必须用计算机中存在的某些输入替代真正的随机性,也许通过记录传递的tcpip数据包或其他方式,但获取这种随机性源并不容易。

0

计算机硬件并不适合。普通计算机的硬件是为确定性而设计的。使用适当的硬件(如此处所述),随机数根本不是问题。


需要登录才能查看预发布产品和机密文档。 - mannaroth

-1

这不难,这里有几个免费的:12、1400、397.6


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接