面试被问到的一个问题:从N个样本中随机抽取m个样本,要求每个样本被抽取的概率一致。升级1:要求精准抽到m个;升级2:对每个样本添加权重,要求抽取概率按照权重分配。
基础问题
问题描述:从N个样本中随机抽取m个样本,要求每个样本被抽取的概率一致,求怎么样抽取?数据量为百万级。
看到这个问题,最先想到的方法是,依次遍历每个样本,以
的概率抽中当前样本作为最后
中的一个,具体操作可以是:
1、每遍历一个样本,生成一个
之间的随机数
,对比
和
的大小;
2、若
大于
,说明属于
概率内,不抽;若
小于等于
,说明属于
概率内,抽它;
3、直到所有样本遍历结束。
还可以从另一个角度证明这个算法的公平性,对每个抽中的样本来说,它应该是被抽中的第

本文介绍了如何使用Java解决从N个样本中随机抽取m个样本的问题,保证每个样本被抽取的概率一致。首先,讨论了基础问题的解决方案,通过遍历并比较随机数来实现等概率抽取。接着,提出了蓄水池算法确保抽取m个样本。最后,引入了样本权重,通过调整概率实现按权重抽取,并探讨了权重概率计算的疑问。
最低0.47元/天 解锁文章
1475

被折叠的 条评论
为什么被折叠?



