等概率选取随机流中的元素
来源:互联网 发布:sql删除一个表的命令 编辑:程序博客网 时间:2024/04/28 11:50
给定一个输入流,停止时的长度未知(假设无休止的进行下去),如何等概率的获取每一个位置上的元素。
解决:设输入流当前长度为n,以1/n的概率获取当前位置的元素来替代之前获取的元素
可以用归纳法证明:
当队列长度为1时,获取该元素的概率p=1/1 (100%)
当队列长度为2时,获取位置为2元素的概率p=1/2(50%),即以50%的概率替代位置1上的元素,这样每个元素被获取的概率均为50%
当。。。。。。
当队列长度为n时,根据之前的假设,获取前n-1个元素的概率均为1/n-1,获取当前元素的概率为1/n。那么此时之前元素未被替代(即在序列长度为n的情况下获取前n-1个元素)的概率为1/n-1/n*1/n-1,为1/n-1。
得证。
假设输入流是一个长度未知的链表,实现为:
int current_pos = 0;for ( p=head; p!=tail; p=p->next ){ if ( rand() % ++current_pos == 0 ) { element_get = p; }}最后返回element_get
- 等概率选取随机流中的元素
- 等概率选取未知长度的链表中的元素
- 海量数据等概率随机选取问题
- 高效地随机选取数组中的元素
- 单次遍历,等概率随机选取问题
- 单次遍历,等概率随机选取问题
- 一次遍历等概率选取字符串中的某个字符
- 等概率随机函数
- 遍历n个元素取出等概率随机取出其中之一元素
- 遍历n个元素取出等概率随机取出其中之一元素
- 遍历n个元素取出等概率随机取出其中之一元素
- 遍历n个元素取出等概率随机取出其中之一元素
- 第十三章:遍历n个元素取出等概率随机取出其中之一元素
- 等概率选取问题 Random Pick
- 海量数据等概率选取问题
- 海量数据等概率选取问题
- 游戏中的随机概率
- 等概率随机洗牌算法
- 风尘中,忘了捡拾那日女子留下的胭脂
- QTE中如何支持GIF、JPEG等格式图片
- hdu 3117 Fibonacci Numbers(矩阵乘法+fibonacci)
- [转]QT中各种MessageBox的使用
- POJ1416
- 等概率选取随机流中的元素
- 配置简单功能强大的excel工具类搞定excel导入导出工具类(一)
- 理解inode
- C++中的引用
- 我指间的刺青是对你的誓言
- HDU 4403 A very hard Aoshu problem(暴搜)
- 网站友链交换十个标准
- 悬挂else引发的问题
- hdu 4404 Worms (2012金华网络赛E题)