相关疑难解决方法(0)

C++随机抽取范围0:n-1(n> k)中的k个数字,无需替换

我正在努力将MATLAB仿真移植到C++中.为此,我试图复制MATLAB的randsample()函数.我还没有想出一个有效的方法来做到这一点.

所以我问你们所有人,如何在0 + n-1(n> k)范围内随机抽样k数而不用C++替换?

我考虑过以下伪代码(受到cppreference.com上的第三个例子的启发),但我觉得它有点像hacky:

initialize vect<int> v of size n
for i = 0 to n-1
    v[i] = i
shuffle v
return v[0 to k-1]
Run Code Online (Sandbox Code Playgroud)

这里的缺点也是首先要构建一个大规模阵列的要求.这似乎是缓慢/笨重的矫枉过正.

如果你能提供帮助,我会喜欢这里的方向.我对理论不太感兴趣(算法很有趣,但现在与我的需求无关),而不是在C++中实现它的最佳方法.

提前致谢!

c++ random

6
推荐指数
2
解决办法
1834
查看次数

标签 统计

c++ ×1

random ×1