【问题标题】:Generate k unique random numbers in the interval [0,n-1]?在区间 [0,n-1] 内生成 k 个唯一的随机数?
【发布时间】:2015-04-08 03:01:54
【问题描述】:

如何在区间 [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/

【问题讨论】:

标签: c++ performance random random-sample


【解决方案1】:

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

对于较大的值,您可以使用Linear Congruential Generator

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

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

当然,k 应该比n 小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2014-05-15
    • 2011-05-16
    • 1970-01-01
    • 2013-07-20
    • 2011-01-23
    相关资源
    最近更新 更多