简单的真随机数发生器

时间:2013-02-25 17:25:40

标签: random von-neumann

有很多关于产生“真正”随机数的研究。

很久以前就发明了一种非常简单的方法。 该方法归功于冯·诺伊曼[1]

在最简单的形式中,它可以被认为是从0或1的偏置源生成随机位。假设序列01的概率与10相同,则可以使用01 - 表示真正的随机“0”,将10表示为真正的随机“1”位(简单地丢弃00和11组合)。

非常简单。任何人都可以指出为什么这样的方法不会生成随机序列(从而解决在计算机上生成随机数的问题)?

1 个答案:

答案 0 :(得分:1)

让我解释一下“随机”和“真正随机”的含义。 “随机”仅表示数字相同地分布,并且独立于其他所有元素 进行选择(即数字为i.i.d.)。而“真正随机”仅表示i.i.d。和制服(另请参见Frauchiger等,2013。)

如果输入位的来源是i.i.d.但存在偏差,则冯·诺依曼(von Neumann)方法将消除此偏差-数字保持i.i.d。但现在是无偏的,即每个数字将以相等的概率为0或1。通常,如果源编号不是i.i.d。 (更具体地说,是 exchangeable [Peres 1992]),冯·诺依曼(von Neumann)方法不会使这些数字“真正随机”。甚至冯·诺依曼(von Neumann(1951))都假定“硬币连续抛弃的独立性”。冯·诺依曼方法是可用的众多随机抽取器之一(我讨论了some of them),该讨论与冯·诺依曼方法一样适用于其他抽取器。

在任何情况下,“伪随机”和“真正随机”数字之间的区别都不是应用程序关心的(您也没有真正指定要考虑的应用程序类型)。相反,通常:

  • 安全应用程序在乎这些数字是否难以猜测。在这种情况下,只有加密的RNG才能达到这一要求(即使是依赖于伪随机数生成器的RNG)。 Python示例是secrets模块或random.SystemRandom
  • 科学模拟会关心数字是否表现得像独立的统一随机数,并且经常会关心数字在以后的时间是否可重现。 Python示例是numpy.random.Generator

参考:

  • Frauchiger,D.,Renner,R.,Troyer,M.,“来自现实量子设备的真正随机性”,2013年。
  • von Neumann,J.,“与随机数字有关的各种技术”,1951年。
  • Peres,Y。,“ Iterating von Neumann's procedure for extracting random bits”,《统计年鉴》 1992,20,1,p。 590-597。