JAVA学习-蓄水池抽样算法

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

生活中无时不刻都在发生着随机事件,我们并不能改变它的随机性,但是我们可以尝试利用它的概率去做更多有意义的事情。比如有一个高 10 米的蓄水池,我们需要对随机一个 1 米的水层进行抽样,这时候很多人都会想到直接生成一个 (0, 10] 的随机数就可以解决,那么要是把高 10 米的条件去掉呢?这显然就不是一个随机数就能解决的了,这时候就得轮到今天的主角——蓄水池抽样算法登场了。

蓄水池抽样算法是一种不用知道蓄水池深度就可以达到抽样效果的算法,他的核心在于按每一层循序依次进行抽样,不同层的抽样计算如下:

  • 如果池子 1 米,那么第一层一定被选中,概率为 1
  • 如果池子 2 米,那么第二层被选中的概率为 1 / 2,第一层被选中的概率就是第二层不被选中的概率乘上上一层被选中的概率 ,就为 (1 - 1 / 2) * 1 = 1 / 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值