从n个数中选出m个数的随机抽样算法 c++实现
时间: 2023-10-26 16:04:43 浏览: 234
n皇后问题 随机算法实现 高效 c++实现
5星 · 资源好评率100%
可以使用C++标准库中的随机数生成器和算法来实现从n个数中选择m个数的随机抽样。
以下是一个可能的实现:
```
#include <iostream>
#include <algorithm>
#include <random>
#include <vector>
using namespace std;
vector<int> randomSample(int n, int m) {
vector<int> nums(n);
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
// 使用C++11标准库中的随机数生成器
random_device rd;
mt19937 g(rd());
// 使用C++11标准库中的随机洗牌算法
shuffle(nums.begin(), nums.end(), g);
// 返回前m个数
return vector<int>(nums.begin(), nums.begin() + m);
}
int main() {
int n, m;
cout << "请输入n和m:" << endl;
cin >> n >> m;
vector<int> sample = randomSample(n, m);
cout << "随机抽样结果为:" << endl;
for (auto num : sample) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
在这个实现中,我们首先创建了一个包含1到n的整数的数组,然后使用C++11标准库中的随机数生成器和洗牌算法来随机打乱数组。最后,我们返回前m个数作为随机抽样的结果。
请注意,这个实现中的随机数生成器和洗牌算法都是C++11标准库中的功能。如果您使用的是早期版本的C++,则必须使用其他方式来实现随机抽样。
阅读全文