蓄水池算法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }