0

有很多关于生成“真正的”随机数的研究正在进行中。

有一种很简单的方法,很久以前就发明了。该方法归功于冯诺依曼[1]

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

很简单。谁能指出为什么这种方法不会生成随机序列(从而解决了在计算机上生成随机数的问题)?

4

1 回答 1

1

让我解释一下“随机”和“真正随机”的含义。“随机”仅仅意味着数字是相同分布的,并且独立于其他所有事物(即数字是独立同分布的)选择。而“真正随机”仅仅意味着 iid 和统一(另见 Frauchiger 等人 2013。)

如果输入位的来源是独立同分布但有偏差,那么冯诺依曼方法将消除这种偏差——数字保持独立同分布,但现在无偏差,即每个数字将以相等的概率为 0 或 1。一般来说,如果源数字不是 iid(更具体地说,是可交换的 [Peres 1992]),von Neumann 方法不会使这些数字“真正随机”;甚至 von Neumann (1951) 也假设“连续抛硬币是独立的”。von Neumann 方法是众多可用的随机提取器之一(我讨论了其中的一些),这个讨论与 von Neumann 方法一样适用于这些其他提取器。

无论如何,“伪随机”和“真正随机”数字之间的区别并不是应用程序所关心的(而且您并没有真正指定您所考虑的应用程序类型)。相反,一般来说:

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

参考:

  • Frauchiger, D.、Renner, R.、Troyer, M.,“真实量子设备的真实随机性”,2013 年。
  • von Neumann, J.,“与随机数字相关的各种技术”,1951 年。
  • Peres, Y.,“迭代 von Neumann 提取随机位的过程”,统计年鉴 1992,20,1, p。590-597。
于 2020-11-18T07:34:48.920 回答