能否预测数字生成器中的下一个数字?

7

在编程中,永远没有所谓的“随机”。即使随机生成器也使用算法来预测随机数。但是,如果知道生成方法,是否可能预测将生成的接下来的5个数字呢?


你可以再次运行数字生成器,这将给出下一个数字。 - Mysticial
那么,如果我尝试在相同的数字范围内使用相同的生成器,我总是会得到相同的结果吗?这与制作一个静态数字数组有什么不同呢? - user2533070
是的,这取决于所使用的随机数生成算法,难度会有很大的差异。 - Kevin
@Scripty:这与拥有预定随机数的静态数组并没有什么不同,只是算法需要大约100个字节,而GCC中rand()的静态数组需要约16GB。 - Mooing Duck
@JBentley:嗯,是的。就是那个。 - Mooing Duck
显示剩余4条评论
3个回答

10

是的,有可能预测下一个随机数生成器会产生什么数字。我曾见过这个过程被称为“破解”、“攻击”或“突破”RNG。使用这些术语之一和“随机数生成器”进行搜索应该会得到很多结果。

阅读我们如何学会在线扑克作弊:软件安全研究,可以了解如何攻击随机数生成器的出色第一手资料。总结一下,作者们基于在线扑克网站采用的错误洗牌算法找出了使用的RNG。然后他们通过抽样已发放的牌来确定RNG种子。一旦他们获得算法和种子,他们就确切地知道稍后洗牌后牌组将如何安排。


我刚在Java中尝试了两次random.nextInt(10);,结果不同... - user2533070
9
@Scripty 请查看Random的文档。10是该语句中的范围,而不是种子。使用相同种子创建两个Random对象,它们将给出相同的随机数序列。 - Bill the Lizard

4

假设使用确定性算法。创建两个完全相同的随机数生成器。询问第一个生成器下一个将产生什么数字,重复5次。


1
绝大多数“随机数生成器”实际上是“伪随机数生成器”,这意味着在给定相同的起始点(种子)的情况下,它们将重现相同的序列。理论上,通过观察一段时间内的数字序列(并知道特定算法),可以预测下一个数字,就像“破解”加密一样。
当然,这需要不同的算法来投入时间和精力。具有“加密”功能的 RNG 将比普通的 RNG 更难以预测。但对于大多数随机数使用而言,这种可预测性不是问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接