我需要连续生成1到10000范围内的随机数,而不需要复制.有什么建议?
描述:我们正在为我们的应用程序构建一个新版本,它在Sqlite DB中维护记录.在我们的应用程序的最后一个版本中,我们没有为每条记录提供唯一的密钥.但是现在有了新的升级版本,我们需要支持上一版本DB的导入工具.所以我们要做的是,我们从旧数据库中读取每条记录,并为唯一键生成一个随机数,并将其存储在新数据库中.在这里,我们需要连续导入多达10000条记录.
好吧,最终你要么必须停止生成它们,要么就是要复制它们.
在计算机上,您的选项非常局限于伪随机数生成器(PRNG),并且根据您的约束,它们永远不会重复,那么PRNG是您的最佳选择 - 真正的随机数据偶尔会复制一个数字.
在你的情况下,我会考虑使用一个大的PRNG(32位或更大)来洗牌你的10,000个数字,然后以洗牌的顺序发送数字.
一旦它们用完就可以再次洗牌 - 因为PRNG太大了,你可以在复制序列之前多次通过10k数字.
向我们提供有关您的工作的更多信息,我们可以提供更好的答案.
-亚当
Mersenne Twister是目前最好的(虽然我可能比任何真正的新发现落后几周).几乎所有语言的源都可以在那里找到,而MT也在这里提供
如果它确实必须在1到10,0000的范围内而没有重复,但是非顺序,那么最好先创建一个10000个元素的顺序数组,然后将它们混洗.
但是,我必须同意对原始问题的评论.我认为使它们不顺序是没有价值的.
或者,在独特和非顺序中很重要,那么1到10,000范围就变得有问题了.最好只使用GUID.