我正在寻找最有效的算法,以随机选择一组n个不同的整数,其中所有整数均在[0..maxValue]范围内。
限制条件:
我最初的想法是构造一个整数[0..maxValue]的列表,然后随机提取n个元素而无需替换。但这似乎效率很低,尤其是在maxValue大的情况下。
有更好的解决方案吗?
对于较小的maxValue值,这样可以合理地在内存中生成所有整数的数组,则可以使用Fisher- Yates随机播放的变体,但仅执行n第一步即可。
n
如果n小于,maxValue并且您不希望生成整个数组,则可以使用以下算法:
maxValue
l
x
如果n非常接近,maxValue则可以随机选择结果 中未 包含的元素,然后找到该集合的补数。
这是另一个更简单的算法,但是执行时间可能不受限制:
s
实际上,如果n大小较小,maxValue则对于大多数目的来说已经足够了。