一、常见的随机数生成算法
线性同余生成器:
线性同余生成器(linear congruential generator LOG)可以便捷地生成伪随机数序列,但是生成的伪随机序列质量不高。
梅森旋转算法:
梅森旋转(Mersenne Twister MT)伪随机生成器算法是特别为改进LOG的众多问题而设计的。
MT有庞大的周期:2^19937 - 1(实际上大部分应用需要更长的周期)
MT有非常高的均匀分布维度。(即序列关联性微不足道)
MT通过了多个统计随机性的测试,包括严格的Diehard测试。
MT很快。
推荐一个采用SIMD矢量指令作进一步优化的MT实现:SFMT(SIMD-oriented fast mersenne twister)。下载地址:http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
所有之母/Xcorshift
所有伪随机数生成器之母(mother of all pseudo-random number generator)是开发Diehard随机性测试组闻名的计算机科学家George Marsaglia于1994年发表的。所有之母和MT相比更易实现而且运算得更快,不重复周期2^250。此算法通过所有Diehard测试并且仍是当今为高速应用设计的最佳伪随机数生成器之一。后来Marsaglia发布了另一个生成器Xorshift,其随机性介于MT个所有之母之间,但运算速度稍快于所有之母。