gpt4 book ai didi

c++ - 生成[0,n-1]区间内的k个唯一随机数?

转载 作者:行者123 更新时间:2023-11-30 05:48:02 25 4
gpt4 key购买 nike

如何生成[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 值,您的方法非常适合。当然,您可以手动混合数组的元素,但这不太可能更快。

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

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

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

当然,k 应该小于 n

关于c++ - 生成[0,n-1]区间内的k个唯一随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28391707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com