蓄水池算法在抽奖中的应用

Posted garychen97

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓄水池算法在抽奖中的应用相关的知识,希望对你有一定的参考价值。

蓄水池算法

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

应用场合

考虑参加抽奖的用户基数很大且未知,也可以说是这个基数可能会动态地增加,那么在这种情况下,固定选取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

以上是关于蓄水池算法在抽奖中的应用的主要内容,如果未能解决你的问题,请参考以下文章

蓄水池算法

generator在抽奖中的应用

责任链模式在王者荣耀中的应用,妙啊。

水库抽样Reservoir Sampling(蓄水池问题)

蓄水池问题

大数据量样本随机采样-蓄水池算法