创建最佳伪随机数生成器的最佳方法是什么?(任何语言都有效)
创建一个的最好方法是不要.
伪随机数生成器是一个非常复杂的主题,因此最好使用人们对该主题有很好理解的实现.
这一切都取决于应用程序.例如,创建"最随机"数字的生成器可能不是最快或最具内存效率的数字.
在梅森难题算法是一种流行的,较快的伪随机数发生器,可产生相当不错的成绩.它有一个非常大的时期,但也是一个相对巨大的状态(2.5 kB).但是,它对于加密应用程序来说并不合适.
更新:自从这个答案被编写以来,PCG系列算法的出版似乎在大多数方面(速度,内存,随机性和周期)都优于现有的非加密算法,使其成为除加密之外的任何其他选择的绝佳选择.
如果你正在加密,我的答案仍然是:不要自己动手.
德国杂志C't在2/2009期刊中测试了许多软件和硬件生成器,并通过各种统计测试来运行结果.
我在这里扫描了结果.
我不打算写我自己的.文章提到甚至唐纳德克努特也没有使用他的"超级随机数发生器",这毕竟不是随机的.获得一个通过所有测试的结果(所有列中的结果> 0).他们还测试了采用VIA EPIA M10000主板的设置,该主板具有硬件RNG.我喜欢这种商业或半商业设置的选项,需要具有高吞吐量的强大的随机数服务器.
当然,除非你只是在玩耍,在这种情况下,这可能已经足够了.
PRNG算法很复杂,正如获取正确的熵源以使它们运行良好一样.这不是你想要自己做的事情.每种现代语言都有一个PRNG库,几乎可以肯定适合您的使用.