真随机与伪随机

300 阅读2分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

真随机

真随机就是我们通常意义上的随机,每次产生的结果都是根据相关的随机概率独立的,就好像抛硬币,出现正反面的概率都是2分之一,每次抛的概率也是二分之一,每次抛的事件是相互独立的,上一次的结果和下一次的结果之间没有必然联系。

伪随机

伪随机,本质上不是随机,例如我们观察两个数字循环数列

image.png

第一个数列是123456,我们直观上肯定不会认为这是一个随机数列

第二个数列是421635,这个直观上我们可能会倾向于这是个随机数列

第二个数列就是个伪随机,4的后面肯定是2,5的后面肯定是4,前一个数字决定了后一个数字是谁

我们接触到的语言当中,其实全都是伪随机。

随机种子

设置随机种子就是在设置随机函数中记录的上一个随机值。例如,上面我们自己做出来的 6 个长度的伪随机序列,如果随机种子设置为值 1,我们得到的值依次是 635421,如果设置为值 3,那么我们将依次得到 542163。如果每次设置的随机种子都一样,那产生的随机数每次都是一样的。

python的随机函数

python中有一个可以产生随机函数的random库,根据官方文档该模块实现了各种分布的伪随机数生成器。 几乎所有该模块的函数都依赖于基本函数 random() ,它在半开放区间 [0.0,1.0) 内均匀生成随机浮点数。 Python 使用 Mersenne Twister 作为核心生成器。 它产生 53 位精度浮点数,周期为 2**19937-1 ,其在 C 中的底层实现既快又线程安全。 Mersenne Twister 是现存最广泛测试的随机数发生器之一。,如果感兴趣可以自行搜索。

实践

每次的随机种子都一样

image.png

每次的随机种子不一样

image.png