从n个数中取k个数,保证每个数拿到的概率相同
蓄水池模型
1.先取前k个到缓冲区(蓄水池)中
2从第k+1个开始,每一个数字(记为第i个数字)都有机会被选中顶替现有池子中的一个数,概率为k/i
3如果被选中,池子中每个数字被替换的概率为1/k(问题规模缩小为k=1)
设当前正在遍历i+1个数,该数被选中的概率为k/(i+1)
在此前i个数中每个数被选中的概率为k/i,本轮被淘汰的概率为k/(i+1) * 1/k.则本轮不被淘汰的概率就是1 - k/(i+1) * 1/k = i/(i+1),则总体被选中的概率就是 k/i * i/(i+1) = k/(i+1)
所以每个数字被选中的概率一样