这不是很容易地可能以这种方式构建PRNG吗?为什么不这样做?
据我所知,我们可以简单地拥有一个以种子n为参数的伪随机数生成器。每当您请求一个随机位时,它将取计算能力正常数的二进制展开中的第n个数字,并递增n。
我的第一反应是可能我们没有找到可计算的普通数,但是我们已经找到了。剩下的想法是,可能有充分的理由不这样做——要么是我不熟悉的PRNG的某种属性,这种方法没有,要么是出于某种原因不切实际,或者被其他方法超越了。
这不是很容易地可能以这种方式构建PRNG吗?为什么不这样做?
据我所知,我们可以简单地拥有一个以种子n为参数的伪随机数生成器。每当您请求一个随机位时,它将取计算能力正常数的二进制展开中的第n个数字,并递增n。
我的第一反应是可能我们没有找到可计算的普通数,但是我们已经找到了。剩下的想法是,可能有充分的理由不这样做——要么是我不熟悉的PRNG的某种属性,这种方法没有,要么是出于某种原因不切实际,或者被其他方法超越了。
那将使预测输出变得非常简单。
举例说,你产生一个整数0x54a30b7f。如果你有4GiB的圆周率(或随机噪声或真实的普通数字),那么那个特定的整数可能只有一个(或者可能只有几个)出现的机会,我就可以合理地预测所有未来的数字。这在密码学强PRNGs的情况下是一个严重的问题。如果你不使用简单的顺序扫描,而是使用一些函数,我只需要跟随这个函数,如果跟随起来足够困难,它就变成了自己的PRNG。
如果您不关心生成器的加密强度,那么有更紧凑的方式生成随机数。例如,梅森旋转算法拥有更大的周期而无需4GiB查找表。