当前位置:  开发笔记 > 编程语言 > 正文

C++中的开源随机数生成算法?

如何解决《C++中的开源随机数生成算法?》经验,为你挑选了3个好方法。

我需要连续生成1到10000范围内的随机数,而不需要复制.有什么建议?

描述:我们正在为我们的应用程序构建一个新版本,它在Sqlite DB中维护记录.在我们的应用程序的最后一个版本中,我们没有为每条记录提供唯一的密钥.但是现在有了新的升级版本,我们需要支持上一版本DB的导入工具.所以我们要做的是,我们从旧数据库中读取每条记录,并为唯一键生成一个随机数,并将其存储在新数据库中.在这里,我们需要连续导入多达10000条记录.



1> Adam Davis..:

好吧,最终你要么必须停止生成它们,要么就是要复制它们.

在计算机上,您的选项非常局限于伪随机数生成器(PRNG),并且根据您的约束,它们永远不会重复,那么PRNG是您的最佳选择 - 真正的随机数据偶尔会复制一个数字.

在你的情况下,我会考虑使用一个大的PRNG(32位或更大)来洗牌你的10,000个数字,然后以洗牌的顺序发送数字.

一旦它们用完就可以再次洗牌 - 因为PRNG太大了,你可以在复制序列之前多次通过10k数字.

向我们提供有关您的工作的更多信息,我们可以提供更好的答案.

-亚当



2> DarenW..:

Mersenne Twister是目前最好的(虽然我可能比任何真正的新发现落后几周).几乎所有语言的源都可以在那里找到,而MT也在这里提供


它只是某些应用程序的"最佳",即一切都不加密(如OP的用例或模拟).

3> James Curran..:

如果它确实必须在1到10,0000的范围内而没有重复,但是非顺序,那么最好先创建一个10000个元素的顺序数组,然后将它们混洗.

但是,我必须同意对原始问题的评论.我认为使它们不顺序是没有价值的.

或者,在独特和非顺序中很重要,那么1到10,000范围就变得有问题了.最好只使用GUID.

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