2

我正在阅读随机模块的文档并注意到它说伪随机并且认为不伪意味着 False 所以我想知道它说的是什么意思

例如:

import random

print random.randint(1,2)
print random.randint(1,3)

这是否仍然意味着第一个打印语句有 50% 的机会打印 1 和 50% 的机会打印 2

第二个打印语句有 33% 的机会打印一个和 33% 的机会打印 2 等等。

如果不是,那么如何生成伪随机数?

4

1 回答 1

8

要产生真正的随机性,需要专门的硬件来测量随机事件,例如放射性衰变(随机)或布朗运动(本质上也是随机的)。大多数计算机显然没有这些,因此您必须使用一种非常复杂、均匀分布、难以预测的“伪随机”算法,该算法以例如由当前时间戳确定的数字开头。这些算法对于需要“随机性”的标准用例来说已经足够好了,只要你小心不要为两个具有相同时间戳的随机数生成器提供种子(例如,在不同的线程上同时启动它们),这将使他们做同样的事情。这种随机数生成器的一个常见示例是 Mersenne Twister:http ://en.wikipedia.org/wiki/Mersenne_twister

一个提供真正随机值的网站,解释了很多关于随机性和伪随机性,并有一些关于其随机性的美味统计数据:http ://www.random.org/ (参见了解更多和统计信息)(实际上它似乎依赖于测量混沌系统中的微小波动,例如大气噪声,但统计数据表明它非常像真正的随机性,你无法将其区分开!)

于 2013-05-30T06:19:23.853 回答