随机算法在互联网产品中随处可见,验证码就是其中一种,还有很多随机出结果的场景,数据挖掘的随机抽样等等
而其中非常常见的一种就是在一个大的结果集中随机高效抽取N个结果下面是自己实现的,在工程中使用的随机取N个结果的随机算法
#include<iostream>
#include<stdlib.h>
#include<vector>
using namespace std;
template<class T>
void rand_n(vector<T>& src, int rand_count, vector<T>& rand_n_vec)
{
size_t len = src.size();
if(rand_count >= len)
{
rand_n_vec = src;
return;
}
for(size_t i = 0; i < rand_count; i++)
{
size_t j = rand() % len;
T tmp = src[i];
src[i] = src[j];
src[j] = tmp;
}
rand_n_vec.clear();
rand_n_vec.reserve(rand_count);
for(size_t i = 0; i < rand_count; i++)
{
rand_n_vec.push_back(src[i]);
}
}
int main()
{
srand(time(NULL));
vector<int> a;
vector<int> b;
for(int i = 0;i < 10; i++)
a.push_back(i);
for(int i = 0; i < 10; i++)
{
rand_n(a, 2, b);
for(int j = 0; j < b.size(); j++)
cout<<b[j]<<' ';
cout<<endl;
}
}