蓄水池抽样算法

题目 :在一个源源不断的数据流中,会吐出带有编号的球,现在问你 在不知道具体有多少个球的情况下,如何等概率的抽出10个球?

例题:leetcode 382题

应用场景:比如在某个游戏的抽奖活动中,游戏官方并不知道有多少用户会参与抽奖活动,而抽奖活动又在晚上12点结束时,并同时发布所有的中奖用户(也就是没时间去一个个计算用户数量并抽奖),请设计一个合理的算法实现这个场景。

算法实现:假设要等概率抽10个球,那么 1~10号球,百分之百能被选中,假设现在 来到了 第 i号球(i>10),那么第i号球被选中的概率就是 10 / i,而对于 已经被选择的10个球中,每一个球都有1 / 10的概率被 第i号球替换掉,所以已经被选中的10个球,在第i号球到来的时候,都有 1 / i 的概率被替换掉,那么也就是有 10 / i 的概率存活下来。如下图:

相关推荐
星释5 小时前
Rust 练习册 :Pythagorean Triplet与数学算法
开发语言·算法·rust
星释5 小时前
Rust 练习册 :Nth Prime与素数算法
开发语言·算法·rust
多喝开水少熬夜6 小时前
Trie树相关算法题java实现
java·开发语言·算法
WBluuue6 小时前
数据结构与算法:树上倍增与LCA
数据结构·c++·算法
bruk_spp6 小时前
牛客网华为在线编程题
算法
黑屋里的马8 小时前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式
sin_hielo8 小时前
leetcode 1611
算法·leetcode
李小白杂货铺9 小时前
识别和破除信息茧房
算法·信息茧房·识别信息茧房·破除信息茧房·算法推荐型茧房·观点过滤型茧房·茧房
来荔枝一大筐9 小时前
C++ LeetCode 力扣刷题 541. 反转字符串 II
c++·算法·leetcode
暴风鱼划水10 小时前
算法题(Python)数组篇 | 6.区间和
python·算法·数组·区间和