非递归随机数生成器

Non-recursive random number generator

我已经搜索了伪 RNG 算法,但我能找到的所有算法似乎都是通过使用先前的结果作为种子来生成下一个数字。有没有办法非递归地生成它们?

我需要这个的场景是在OpenCL并发编程的时候,每个thread/pixel需要一个独立的RNG。我尝试使用 BIG_NUMBER + work_id 为它们播种,但结果中有强烈的视觉模式。我尝试了几种不同的 RNG 算法,都遇到了这个问题。显然,如果你递归生成,他们只保证数字是独立的,但当你使用顺序数字作为种子时则不然。

所以我的问题是:我可以从一个序列号数组中生成一个随机数数组,每个数字的时间独立且恒定吗?或者在数学上是不可能的?

作为我的 openCL 问题的解决方案,我可以先递归地预先生成一个巨大的随机数数组并存储在 GPU 内存中,然后使用它们作为索引使用它们。但是我对上面的问题很好奇,因为根据我对混沌理论的非常简单的理解,仅仅做一堆溢出和截断似乎是很有可能的。

Can I generate an array of random numbers, from an array of sequential numbers, independently and constant time for each number? Or is it mathematically impossible?

当然可以 - 在计数模式下使用分组密码。通常被称为Counter based RNG, first widely used one was Fortuna RNG