从线性同余RNG生成随机向量

时间:2013-08-01 21:06:07

标签: algorithm random

如果我有一个线性同余生成器,这样每次给定一个特定的种子,我就可以确切地知道我们可以生成一个固定的伪随机数序列,已知它们在[1,K]之间均匀分布,应该如何我使用这样的RNG来生成均匀分布在[1,K ^ M]之间的M维随机向量?

2 个答案:

答案 0 :(得分:1)

如果您对除了M维情况之外的所有事情都感到满意,那么最基本的解决方案是为M个独立的发电机使用M个单独的种子。这至少可以确保给定向量的元素是独立的(对于种子算法的限制)。

然而,你可能真正想要的是一个状态至少为M*log_2(K)位的PRNG,这可以保证矢量的所有部分之间的混合。如果超过64位,那么使用LCG似乎需要付出很多努力才能实现比许多更简单的解决方案更弱的东西。

如果M是常数并且不是非常大,那么你可能会看xorshift,multiply-with-carry或WELL。否则,您可能会使用众所周知的大周期生成器或加密算法,并对理论限制视而不见。

答案 1 :(得分:0)

我不知道你打算使用什么编程语言或K和M的范围是什么,但如果K是2的幂,你可以简单地附加M个伪随机数的二进制表示来得到一个伪随机数均匀分布在[1,K ^ M]上。如果K不是2的幂,则可以使用某种分区函数或重新滚动某些值来构造[1,K ^ M]分布数的位。