在区间[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
。为了最大化生成序列的长度,在选择值a
和c
时应该遵循一些规则(有关详细信息,请参阅上面的链接)。
当然,k
应该比n
小。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 整数不会重复超过随机数
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 通过组合不同的类型来创建唯一的id
- if数组上的随机数
- 具有随机数的唯一向量
- 使用具有唯一随机数的结构数组创建多个对象
- 在C++中生成唯一的随机数
- 在向量中插入唯一的随机数
- 在多维数组中生成唯一的随机数C++
- 生成唯一的多个随机数
- 从一个特定的范围中生成一定数量的唯一随机数
- 在区间[0,n-1]中生成k个唯一随机数
- 输出 4 组 7 个升序有序和唯一随机数
- 在数组C++中生成唯一随机数
- 试图在每次迭代中产生一个唯一的随机数序列
- 使用线程生成唯一的随机数