如何创建最好的伪随机数生成器?(任何语言都可以)
如何创建最好的伪随机数生成器?(任何语言都可以)
避免创建伪随机数生成器是最好的方法。
伪随机数生成器 是一个非常复杂的主题,因此最好使用由深入了解该主题的人们制作的实现。
一切都取决于应用程序。例如,生成“最随机”数字的发生器可能不是最快或最节省内存的。
Mersenne Twister算法是一种流行的、相当快速的伪随机数生成器,产生相当好的结果。它有一个极其庞大的周期,但也有一个相对庞大的状态(2.5 kB)。然而,它被认为不足以用于加密应用。
更新: 自本回答撰写以来,PCG算法族已发布,似乎在大多数方面(速度、内存、随机性和周期)优于现有的非加密算法,使其成为除了密码学之外的绝佳选择。
如果您正在进行加密处理,我的回答仍然是:不要自己动手。
PRNG算法很复杂,获取正确的熵源使其良好运作也是如此。这不是你想自己做的事情。每种现代语言都有一个几乎肯定适合你使用的PRNG库。
http://www.iro.umontreal.ca/~simardr/testu01/tu01.html
在这篇论文中,作者展示了对多种现有随机数生成器的测试结果,但好像没有包括 .NET System.Random。不过他确实测试了 VB6 的生成器。抄袭Knuth seminumeric的一个算法。 高质量且易于实现。 它使用一对数组、加法和几个条件语句。 便宜、有效,并且长周期美好,如果我没记错的话是2^55。
https://github.com/fsssosei/Pure_PRNG Python库,用于生成经过统计测试的伪随机数