水塘抽样

算法描述

  水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本(从s[n]中选取样本s(k)),其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况。

解决方案:

1、从S[n]中抽取首k项放入「水塘」中对于每一个S[j]项(j ≥ k):
for(int i=0;i<k;i++){
  R[i] = S[i];
}
2、从0到j的随机产生整数r,若 r < k 则把水塘中的第r项换成S[j]项:
for(int j = k+1;j < n;j++){
  r = random(1,j);
   if(r<k){
    R[r] = S[j];
   }
}
原文地址:https://www.cnblogs.com/xubiao/p/5151978.html