• 蓄水池算法


    问题:

    如何从N个元素中等概率抽取K个元素(N > K)

     

    方法:

    首先构建一个可放k个元素的蓄水池,将序列的前k个元素放入蓄水池中,然后从第k+1个元素开始,以k/i (k<i<=n)的概率来决定该元素是否被替换到池子中,并且从池子中等概率淘汰一个球。

      1. 对于第i个数(i<k),在前k步被选中的概率是1, 从第k+1步开始,i不被选中的概率为k/k+1,那么读到第n个数时, 第i个数(i<k)被选中的概率 = 被选中的概率 * 以后每一步都不被换走的概率,即
        1 * k/k+1 * k+1/k+2 n-1/n = k/n

      2. 对于第j个数(j>=k)被选中的概率为: 在他出现时被选中的概率 * 在他出现以后不被换走的概率,即: 
        k/j * j /j+1 。。。n-1/n = k/n

      3. 综上得证。

    应用:

    玩家登陆的那一刻即可知道是否中奖,不用等到收集完所有上线玩家,且只需维护一个中奖池而不是一个玩家池。

  • 相关阅读:
    IE11浏览器:请不要再叫我IE,谢谢
    Hadoop HA高可用搭建流程
    YARN
    MapReduce
    HDFS
    shell
    shell总结
    linux总结
    maven+log4j
    Spring
  • 原文地址:https://www.cnblogs.com/encode/p/4928666.html
Copyright © 2020-2023  润新知