蓄水池抽样算法

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

例题:leetcode 382题

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

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

相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
alphaTao1 小时前
LeetCode 每日一题 2026/7/20-2026/7/26
算法·leetcode
青山木5 小时前
Hot 100 ---腐烂的橘子
java·数据结构·后端·算法·leetcode·广度优先
未来之窗软件服务5 小时前
计算机考试-快速排序—东方仙盟
数据结构·算法·排序算法·仙盟创梦ide·东方仙盟
小龙报5 小时前
【优选算法】1. 水果成蓝 2.找到字符串中所有字母的异位词
java·c语言·数据结构·数据库·c++·redis·算法
txzrxz6 小时前
数论:排列数、组合数、费马小定理、逆元、同余定理
c++·算法·数论·组合数·费马小定理·逆元·排列数
xqqxqxxq6 小时前
LeetCode Hot100 双指针专项题解笔记
笔记·算法·leetcode
闪电悠米6 小时前
力扣hot100-54.螺旋矩阵-模拟边界控制详解
算法·leetcode·矩阵
变量未定义~6 小时前
虚拟节点-星石传送阵(4星)、强连通分量
数据结构·算法
IT方大同7 小时前
C语言分支与循环语句
c语言·开发语言·算法