算法描述:
水塘抽样是一系列的随机算法,其目的在于从包含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];
}
}
时间: 2024-10-19 05:53:41