【发布时间】:2013-02-25 17:25:39
【问题描述】:
关于生成“真正的”随机数的研究正在进行中。
有一个很简单的方法,很久以前就发明了。 该方法归功于冯诺依曼[1]。
在最简单的形式中,它可以被认为是从 0 或 1 的偏置源中生成随机位。鉴于序列 01 的概率与 10 相同,可以使用 01 - 将真正随机的“0”和 10 表示为真正随机的“1”位(简单地丢弃 00 和 11 的组合)。
非常简单。谁能指出为什么这种方法不会生成随机序列(从而解决了在计算机上生成随机数的问题)?
【问题讨论】:
-
除了它不比被转换的比特流更随机的事实之外?如果我输入它“0110011001100110 ....”得到“010101 ....”,它不比原始序列更多(或更少)随机......该算法是关于从随机序列中消除偏差,而不是生成本身就是一个随机序列...
-
从随机序列中去除偏差不等于生成随机序列吗? IE。如果每个位都是随机的,那么序列不也是随机的吗?
-
没有。假设您的 RNG 在
[0, 1]中生成统一的随机数。如果它一直返回 0.5,它就没有偏差,但仍然不是很随机。 更好 PRNG 将为您提供无偏的、看似随机的序列,但是当您对随机数序列应用适当的变换(例如在 2D 平面中绘制成对的连续数字)时,会出现不同的模式。最后一个问题是,最终每个 PRNG 都会在一段(可能非常长的)周期后开始重复。 -
@MichaelWild 您提供的 0.5 示例无效,因为它是完全确定性的,即在某个位置会有一点“1”或“0”的概率为 1。我说的是有偏差的源,即位“a0”的概率略高于位“not a0”的概率。由于随机性并不能保证您的位 a0 始终位于奇数位置(即 11.11.11.01.11.11.11),因此仅产生“真正随机”零序列(0000 ...),因此您在结束。
-
@MichaelWild 我认为一段时间后重复序列的问题不是问题。例如,给定域输出 1..N,在每个 N 大小的序列中,每个数字都只重复一次(符合真正随机的条件)。 N之后!即使在真正随机的场景中,您也会重复自己的序列。否则你是有先验偏见的(例如,如果在 N 个数字的序列中某个数字出现两次)!
标签: random von-neumann