LeetCode382. Linked List Random Node

从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)

所以每个数字被选中的概率一样

おすすめ

転載: blog.csdn.net/Dale_zero/article/details/118947863