随机算法之—结果集中随机取出N个结果

来源:互联网 发布:linux boot 编辑:程序博客网 时间:2024/06/06 00:49

随机算法在互联网产品中随处可见,验证码就是其中一种,还有很多随机出结果的场景,数据挖掘的随机抽样等等

而其中非常常见的一种就是在一个大的结果集中随机高效抽取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;    }}


0 0