类似:数据流,选K个数,怎么保证每个数抽取概率一样?
int random_pick(int m) {
int ret = rand() % (m + 1);
return ret;
}
void reservoir_sample(int* input, int * result, int k,int n ) {
srand(time(NULL));
for (int i = 0; i < k; i++) {
result[i] = input[i];
}
for (int j = k; j < n; j++) {
int pos = random_pick(j);
if (pos < k)
result[pos] = input[j];
}
}
int main(){
int *input = new int[100 * sizeof(int)];
int *result = new int[10 * sizeof(int)];
reservoir_sample(input, result, 10,100);
for (int i = 0; i < 10; i++) cout << input[i] << " ";
}