使用相同的种子生成两个不同的伪随机数

时间:2010-06-02 04:43:36

标签: random

是否可以在两个单独的程序运行中生成两个不同的伪随机数而不使用时间作为种子?即在两次运行中使用相同的种子,是否可以获得两个不同的数字?

2 个答案:

答案 0 :(得分:1)

通常,使用相同的种子不可能获得不同的伪随机数。

根据定义,伪随机数不是真正的随机数,因此不是由熵源组成。或者,如果数字确实包含一些熵输入,则输入不足以使序列符合统计上的“随机”条件。 (这种序列应具有的属性的示例是1位n位长度,概率为2 ^( - n),以及统计随机性的许多其他属性。统计随机性的定义变得更复杂(从某种意义上说,随着随机性的数学的提高,更“实际”或接近自然。这是另一种说法,在任何特定的时间,统计随机性的定义即将过时或过时。)

在任何情况下,绝大多数伪随机数生成器实际上都是完全确定的。

伪随机数发生器的规范 1 示例是线性反馈移位寄存器(LFSR)。 LFSR可以实现为包含寄存器的数字逻辑电路,该寄存器保持N位,一些门编号为M,远小于N(例如,M = 1,M = 2),通常这些是XOR门,其“反馈”在某些“抽头位”处进入寄存器的位。网上有很多这方面的内容。

给定相同的种子输入,LFSR将始终生成相同的序列。

有可能使用Walsh-Hadamard矩阵或称为“M矩阵”,另外称为“序列变换”,对LFSR的输出进行采样,并确定该序列实际上来自LFSR,也是其门和抽头的结构,以及当前的寄存器内容。根据该信息,所有序列值都是已知的,并且可以反转用作输入的可能种子值。由于这些原因,LFSR不适用于安全目的,例如用于身份验证的随机令牌。

  1. 通过规范,我指的是Don Knuth使用LFSR作为一个例子,以及随之而来的永恒传统。

答案 1 :(得分:0)

不确定是否从同一种子生成2个不同的随机数 - 或者避免它!但是,如果你确实想要它,那么类似于LFSR,LCG(线性同余生成器)通常用于生成确定性伪随机数。您可以“轻松”使用不同的常量创建2个简单的LCG,这将为同一种子生成2个不同的伪随机数。