繁体   English   中英

在间隔[0,n-1]中生成k个唯一随机数?

[英]Generate k unique random numbers in the interval [0,n-1]?

如何在间隔[0,n-1]中生成k个唯一的随机数?

我使用以下代码:

for( int i = 0 ; i < n ; ++i ){
   a[i]=i;
}

std::random_shuffle( a, a+n ) ;
for(int i=0;i<k;++i){
  ra[i]=a[i];
}

它需要前k个元素。

谁能推荐我一种更快的方法?

std :: random_shuffle: http ://www.cplusplus.com/reference/algorithm/random_shuffle/

对于较小的n值,您的方法非常适合。 当然,您可以手动混合数组的元素,但这不可能快得多。

对于较大的值,可以使用线性同余生成器

r[n + 1] = (a * r[n] + c) % m;

其中m (模数)等于n 为了最大化所生成序列的长度,在选择值ac时,应遵循一些规则(有关详细信息,请参见上面的链接)。

当然, k应该小于n

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM