我正在努力将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++中实现它的最佳方法.
提前致谢!