zoukankan      html  css  js  c++  java
  • 【游戏算法】蓄水池算法在抽奖中的应用

    蓄水池算法

    分析一下蓄水池算法在抽奖中的应用。

    应用场合

    考虑参加抽奖的用户基数很大且未知,也可以说是这个基数可能会动态地增加,那么在这种情况下,固定选取k个人中奖,如何保证实时参加抽奖的n个用户中每个人中奖的概率为k/n呢?(为何不在最终结果n出来时再来随机抽取k个样本,保证概率为k/n呢?其实这种想法有些时候是不可行的,数据是动态增长的,可能缓存系统存储不了所有的样本信息,但却足够存储k个样本的信息,即空间复杂度可以从O(n)降到O(k),k相对n来说是非常小的。所以储水池算法还是很有应用价值的)

    具体步骤

    1.先把前k个数放入蓄水池

    2.对第i(i>k)个样本,以k/i概率决定换入蓄水池,换入时又随机选取池里的一个样本作为替换项

    3.一直做下去,对于任意的样本空间n,对单个样本的选取概率为k/n

    复杂度

    时间复杂度O(n)

    空间复杂度O(1

    )

    参考文章

    https://kknews.cc/tech/om2jgrq.html

  • 相关阅读:
    小孩抓周
    psychology
    绝恋诗词
    一万小时定律
    王国维的人生三重境界
    2017年日历
    018 cisco 3560 MAC地址绑定
    017 SSH
    016 ppp authentication
    unity Tilemap
  • 原文地址:https://www.cnblogs.com/garychen97/p/13795389.html
Copyright © 2011-2022 走看看