生活中无时不刻都在发生着随机事件,我们并不能改变它的随机性,但是我们可以尝试利用它的概率去做更多有意义的事情。比如有一个高 10 米的蓄水池,我们需要对随机一个 1 米的水层进行抽样,这时候很多人都会想到直接生成一个 (0, 10] 的随机数就可以解决,那么要是把高 10 米的条件去掉呢?这显然就不是一个随机数就能解决的了,这时候就得轮到今天的主角——蓄水池抽样算法登场了。
蓄水池抽样算法是一种不用知道蓄水池深度就可以达到抽样效果的算法,他的核心在于按每一层循序依次进行抽样,不同层的抽样计算如下:
- 如果池子 1 米,那么第一层一定被选中,概率为 1
- 如果池子 2 米,那么第二层被选中的概率为 1 / 2,第一层被选中的概率就是第二层不被选中的概率乘上上一层被选中的概率 ,就为 (1 - 1 / 2) * 1 = 1 / 2

本文介绍了蓄水池抽样算法,一种在不确定数据量的情况下实现均匀抽样的方法。通过逐层抽样的概率计算,确保每层被选中的概率相同。蓄水池抽样可用于文件、链表等的随机访问。文章鼓励读者通过实践,如LeetCode的链表随机节点问题,来加深理解。
最低0.47元/天 解锁文章
2280

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



