给一个无限长链表,怎么随机抽K个数,保证每个数抽到概率一致——蓄水池抽样

本文介绍了一种从大量数据中随机抽取固定数量样本的算法——蓄水池抽样,确保每个元素被选中的概率相等。通过《编程珠玑》中的案例,详细解析了算法实现原理及代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类似:数据流,选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] << " ";
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值