当前位置:  开发笔记 > 运维 > 正文

伪随机数发生器

如何解决《伪随机数发生器》经验,为你挑选了4个好方法。

创建最佳伪随机数生成器的最佳方法是什么?(任何语言都有效)



1> coobird..:

创建一个的最好方法是不要.

伪随机数生成器是一个非常复杂的主题,因此最好使用人们对该主题有很好理解的实现.


我贬低是因为"不要重新发明轮子"是一个可怕的答案,更糟糕的是因为它不断由不熟练的程序员传播.绝不应该告诉你不要做某事.
我同意@Krythic的评论。您永远不要劝阻一个人或初学者说这​​太复杂了。这将停止学习过程,这是错误的。-1

2> Thomas..:

这一切都取决于应用程序.例如,创建"最随机"数字的生成器可能不是最快或最具内存效率的数字.

在梅森难题算法是一种流行的,较快的伪随机数发生器,可产生相当不错的成绩.它有一个非常大的时期,但也是一个相对巨大的状态(2.5 kB).但是,它对于加密应用程序来说并不合适.

更新:自从这个答案被编写以来,PCG系列算法的出版似乎在大多数方面(速度,内存,随机性和周期)都优于现有的非加密算法,使其成为除加密之外的任何其他选择的绝佳选择.

如果你正在加密,我的答案仍然是:不要自己动手.


"捕获适当的加密RNG的输出序列不会提供有关其未来输出的信息." 那是错的,信息就在那里.未来的产出只需要难以计算.

3> cdonner..:

德国杂志C't在2/2009期刊中测试了许多软件和硬件生成器,并通过各种统计测试来运行结果.

我在这里扫描了结果.

我不打算写我自己的.文章提到甚至唐纳德克努特也没有使用他的"超级随机数发生器",这毕竟不是随机的.获得一个通过所有测试的结果(所有列中的结果> 0).他们还测试了采用VIA EPIA M10000主板的设置,该主板具有硬件RNG.我喜欢这种商业或半商业设置的选项,需要具有高吞吐量的强大的随机数服务器.

当然,除非你只是在玩耍,在这种情况下,这可能已经足够了.



4> Wedge..:

PRNG算法很复杂,正如获取正确的熵源以使它们运行良好一样.这不是你想要自己做的事情.每种现代语言都有一个PRNG库,几乎可以肯定适合您的使用.

xkcd随机数

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有