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

TG.*_*TG. 6 c++ random algorithm open-source

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

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

Ada*_*vis 5

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

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

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

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

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

-亚当


Dar*_*enW 5

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

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

Jam*_*ran 5

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

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

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