蓄水池算法

 1 // WaterPool.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 #include <stdlib.h>
 6 #include <vector>
 7 #include <iterator>
 8 #include <iostream>
 9 using namespace std;
10 
11 
12 int GetRand(int i)
13 {
14     return ((int)rand()/(int)RAND_MAX)*i + 1;
15 }
16 
17 int _tmain(int argc, _TCHAR* argv[])
18 {//数据流为1~1000,池子大小100,等概率地从中任意选出100个数存入池子中
19     int index = 0;
20     int maxFlow = 1000;//连续的流,最大值已知
21     int poolSize = 100;
22     vector<int> pool;
23 
24 
25     for(;index < poolSize;index++)
26         pool.push_back(index+1);
27 //1.1~100依次取进来
28     for(index = poolSize;index < maxFlow;index++)
29     {
30         if(GetRand(index) <= poolSize)
31             pool[GetRand(poolSize) - 1] = index;
32     }
33 //2.100以后的 根据索引产生一个随机数,随机数在0~100之间就放入池子中,
34 //然后随机从池中替换掉一个。最终每个数进池的概率都为poolSize/maxFlow
35     vector<int>::iterator ite =  pool.begin();
36     for(;ite != pool.end();ite++)
37         cout<<*ite<<" ";
38     cout<<endl;
39     system("pause");
40     return 0;
41 }
View Code

 

posted @ 2016-08-14 15:10  lp3318  阅读(127)  评论(0编辑  收藏  举报