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