一、问题由来

这个题目的由来是在《编程珠玑》里遇到的故记录一下。还可以这么说”如何从二进制文件中等概率取整数”或者”在不知道文件总行数的情况下如何从文件中随机的抽取一行?”这个题目说的有点不清楚实际上是一个二进制文件中有好多好多整数你要随机取出一个。

这个问题的难点就在于你开始不知道有多少的整数也就是说这个1/n你不知道n是多少。

综上随机抽样问题表示如下要求从N个元素中随机的抽取k个元素其中N无法确定。

这种应用的场景一般是数据流的情况下由于数据只能被读取一次而且数据量很大并不能全部保存因此数据量N是无法在抽样开始时确定的但又要保持随机性于是有了这个问题。所以搜索网站有时候会问这样的问题。

这里的核心问题就是“随机”怎么才能是随机的抽取元素呢我们设想买彩票的时候由于所有彩票的中奖概率都是一样的所以我们才是“随机的”买彩票。那么要使抽取数据也随机必须使每一个数据被抽样出来的概率都一样。

二、算法实现

array R[k];    // resultinteger i, j;for each i in 1 to k doR[i] := S[i]done;for each i in k+1 to length(S) doj := random(1, i);   // important: inclusive rangeif j <= k thenR[j] := S[i]fidone

海量数据处理之蓄水池抽样算法相关推荐

  1. LeetCode Random Pick Index(蓄水池抽样算法)

    问题:给出一个数组,存在相同的数,随机输出目标数所在的下标 思路:使用蓄水池抽样算法,当第一次找到目标数时,作为选取.接着如果随机数等于0,则选取.在遍历完后,直接返回选取的值 具体代码参考: htt ...

  2. 【大数据算法】蓄水池抽样算法

    一.题目来源: 这个题目的由来是周围有人讨论到去面试(某8)的时候遇到了这个问题.另外正好HIT有个视频也有这个内容,故记录一下: 二.题目描述:     该人面试的时候问的是: 如何从二进制文件中等 ...

  3. 蓄水池抽样算法(reservoir sampling)

    蓄水池抽样算法(reservoir sampling) 场景:在长度未知的数据流中,等概率地采样一定数量的数据.即,数据量N未知,若要求采样k个数据,采样概率保证kN\frac{k}{N}Nk​. 要 ...

  4. 蓄水池采样算法的python实现_常用算法-蓄水池抽样算法

    Leetcode上遇到一道题,题目是这样的: 这道题的关键是链表的长度不知道,但是要使随机返回每个元素的概率相等,这一下就难倒我了,如果知道链表的长度k,从0到k中随机选择一个整数就好了呀,可现在不知 ...

  5. 蓄水池采样算法的python实现_蓄水池抽样算法(Reservoir Sampling)

    蓄水池抽样算法(Reservoir Sampling) 许多年以后,当听说蓄水池抽样算法时,邱simple将会想起,那个小学数学老师带他做"小明对水池边加水边放水,求何时能加满水" ...

  6. 图解连续学习中的蓄水池抽样算法(The Illustrated Reservoir sampling)

    图解连续学习中的蓄水池抽样算法The Illustrated Reservoir sampling 前言 什么是Reservoir Sampling? 蓄水池抽样算法(Reservoir sampli ...

  7. 机器学习中的数学——蓄水池抽样算法(Reservoir Sampling Algorithm)

    分类目录:<机器学习中的数学>总目录 蓄水池抽样算法(Reservoir Sampling Algorithm)解决了未知长度数据的均匀抽样问题,即:给定一个数据流,数据流长度NNN很大, ...

  8. 蓄水池抽样算法 Reservoir Sampling

    2018-03-05 14:06:40 问题描述:给出一个数据流,这个数据流的长度很大或者未知.并且对该数据流中数据只能访问一次.请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等. 问题求 ...

  9. 随机抽样java_Reservoir Sampling 蓄水池抽样算法,经典抽样

    随机读取数据,如何保证真随机是不可能的,因为计算机的随机函数是伪随机的. 但是在不考虑计算机随机函数的情况下,如何保证数据的随机采样呢? 1.系统提供的shuffle函数 C++/Java都提供有sh ...

最新文章

  1. RTEMS文件系统(4):系统调用开发信息(上)
  2. SpringCloud使用Sofa-lookout监控(基于Eureka)
  3. SpringMVC+MyBatis+Druid使用MySQL8.0.11版本
  4. Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs
  5. DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness、SVM、NN各自的准确率
  6. Spring Cloud Stream的使用(上)
  7. 第6讲 | 理解区块链之前,先上手体验一把数字货币
  8. proe2001安装指南
  9. 组合数学基本工具-- 排列与组合以及简单公式
  10. 每天学一点flash(70)弹出和关闭窗口
  11. VB.NET,C#.NET调用Web Service,利用visual studio 的实现方法
  12. 如何将access数据库导入到sql2005数据库中
  13. WindowsServers2019上手体验
  14. Eclipse下搭建Android的NDK开发环境
  15. 内外网同时运行路由设置
  16. 【delete用法 与 object(对象)的创建】
  17. 目标导向型思维, 利他思维,迭代思维, 用忙碌打败无聊,整合型思维 重视运动
  18. 吐血实践-TiDB离线安装
  19. 博仲兴业力作——《爱的雨季》讲述爱情的奥秘
  20. CVPR2022 | 重新审视池化:你的感受野不是最理想的

热门文章

  1. 五、curator recipes之选举主节点Leader Latch
  2. Java必须了解的“递归”与“IO流”!!!
  3. redmine添加自定义问题状态
  4. 图数据库Neo4j全栈Web技术解密
  5. Facebook SDE onsite面经
  6. API编程基本控件使用
  7. 【C#|.NET】从控制反转(依赖注入)想到事件注入 (非AOP)
  8. 分治法求数组中的最大最小元素
  9. commons-fileupload 图片上传示例
  10. 使用CSS选择器在页面中插入内容