博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓄水池问题
阅读量:5997 次
发布时间:2019-06-20

本文共 515 字,大约阅读时间需要 1 分钟。

“给出一个数据流,这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等。”

对于这种问题,一般可以从小的例子逐渐推导

例如当数据流只有一个数据时,直接取改了为1

两个数据时,生成一个0-1随机数,大于0.5选择1,每一个概率为0.5

3个数据时怎么办呢?首先考虑前两个,可以按照上述方法剔除一个,比如剔除1剩下2,现在我们要从2与3里面选出一个。那么怎么选才合理呢?既然一共3个数据,那么应该每一个概率都是1/3。因为我们已经知道2已经经过了一个1/2的选择,那么我们如果让2的概率为1/3的话,在第二次选取的时候2应该遵循2/3的概率。(或者换种思路,3的概率应该是1/3)。

于是推广到n时,假设当前正要读取第n个数据,则我们以1/n的概率留下该数据,否则留下前n-1个数据中的一个。前n-1个数据中数据被返回的概率为:1/(n-1)*(n-1)/n。如果是第一个数(或第一轮就开始比较),那么它的概率是1/2*2/3*...*(n-1)/(n)=1/n

转载于:https://www.cnblogs.com/dylan9/p/8682001.html

你可能感兴趣的文章
推荐系统中常用算法 以及优点缺点对比
查看>>
cocos2d-x v3.2环境配置(现在3.x版本号可以配置该)
查看>>
穷举法解决旅行商问题
查看>>
括号配对问题
查看>>
Oracle自学笔记(一)
查看>>
利用5w1h写出高效的git commit
查看>>
用div和css样式控制页面布局
查看>>
Python自定义库文件路径
查看>>
Get和Post的区别
查看>>
Redis--优化
查看>>
JSTL截取字符串以及格式化时间
查看>>
Bugtags 使用技巧之 setUserData
查看>>
Go语言标准库之JSON编解码
查看>>
使用windows search 搜索文件和文件夹(一)
查看>>
“江苏科技”背后有哪些大咖倾力参与?
查看>>
mysql优化
查看>>
mysqldump & binlog做完全备份
查看>>
杨辉三角
查看>>
Zabbix 2.4 —— Trigger Founction
查看>>
centos修改主机名
查看>>