左神算法 蓄水池算法

蓄水池算法
【问题描述】有i个球,k个桶,实现一个算法,使得每个球进桶的概率相等。如果i个数增加,概率也还是相等。相当于前面的球的入桶概率随着总的球数动态变化。假设i慢慢增加,加到N为止。
【解答】
总球数变化,前面的球的入桶概率也要动态变化,这时候要使得桶中的球有一定概率出桶被淘汰。
具体算法进行如下步骤:
一、i<=k时,前k个球全部入桶。
二、i>k后,第i个球以k/i的概率入桶,随机从k个桶中选一个出桶,放入第i个球。

【证明】
一、对于i<=k的球
运算到第k+1个球时,前k个球有k/k+1 * 1/k = 1/k+1的概率出桶,所以留下来的概率时k/k+1
运算到第k+2个球时,k/k+2 * 1/k = 1/k+2出桶 入桶概率k+1/k+2
累乘k/N
二、对于i>k的球
对于第k+1的球,入桶概率k/k+1,之后有可能被淘汰出桶概率为k/k+2 * 1/k = 1/k+2,留桶的概率为k+1/k+2,到k+2的球时留桶概率时k/k+2,最后的留桶概率是k/N
对于k+2的球,同理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值