【发布时间】:2011-03-06 18:59:33
【问题描述】:
可能的重复:
Unique (non-repeating) random numbers in O(1)?
How do you efficiently generate a list of K non-repeating integers between 0 and an upper bound N
我想在某个音调中生成随机数,我必须确定,每个新数字都不是前者的重复。一种解决方案是将以前生成的号码存储在容器中,并且每个新号码都会检查容器。如果容器中有这样的数字,那么我们生成 agin,否则我们使用并将其添加到容器中。但是随着每个新的数字,这个操作变得越来越慢。有没有更好的方法,或者任何 rand 函数可以更快地工作并确保生成的唯一性?
编辑:是的,有一个限制(例如从 0 到 1.000.000.000)。但我想生成 100.000 个唯一数字! (如果解决方案是使用 Qt 功能,那就太好了。)
【问题讨论】:
-
如果每个数字都生成了,你打算怎么做?或者您生成的数字是否固定?
-
我认为应该重新提出这个问题。 1.000.000.000 是一个相当大的数字。通常的生成列表和随机播放方法是不可行的。到目前为止,我还没有在其他适当处理如此庞大数字的线程中看到答案。
-
简单地按顺序返回完整的数字范围(例如 0-1,000,000,000)。由于这些数字的任何(均匀)随机排列具有相同的发生可能性,因此该顺序与任何其他顺序一样可能。从技术上讲,你无法证明它不是随机的 =p