[Algorithm] Reservoir Sampling】的更多相关文章

Given a stream of elements too large to store in memory, pick a random element from the stream with uniform probability. To solve the problem which n size is unknown, Reservior Sampling is a perfect algorithm to use: Reservoir sampling algorithm can…
蓄水池抽样算法简介 蓄水池抽样算法随机算法的一种,用来从 N 个样本中随机选择 K 个样本,其中 N 非常大(以至于 N 个样本不能同时放入内存)或者 N 是一个未知数.其时间复杂度为 O(N),包含下列步骤 (假设有一维数组 S, 长度未知,需要从中随机选择 k 个元素, 数组下标从 1 开始), 伪代码如下: array R[k]; // result integer i, j; // fill the reservoir array to k do R[i] := S[i] done; /…
copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. --------------------------------------------------------------------------------------- 问题 随机抽样问题表示如下: 要求从N个元素中随机的抽取k个元素,其中N无法确定. 这种应用的场景一般是数据流的情况下,由于数据…
蓄水池采样算法 问题描述分析 采样问题经常会被遇到,比如: 从 100000 份调查报告中抽取 1000 份进行统计. 从一本很厚的电话簿中抽取 1000 人进行姓氏统计. 从 Google 搜索 "Ken Thompson",从中抽取 100 个结果查看哪些是今年的. 这些都是很基本的采用问题. 既然说到采样问题,最重要的就是做到公平,也就是保证每个元素被采样到的概率是相同的.所以可以想到要想实现这样的算法,就需要掷骰子,也就是随机数算法.(这里就不具体讨论随机数算法了,假定我们有了…
问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would you read a text file, and select and print one random l…
水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况. 在高德纳的计算机程序设计艺术中,有如下问题:可否在一未知大小的集合中,随机取出一元素?.或者是Google面试题: I have a linked list of numbers of length N. N is very large and I don't know in advance the exact value of N. How…
1.理解 问题定义可以简化如下:在不知道文件总行数的情况下,如何从文件中随机的抽取一行? 首先想到的是我们做过类似的题目吗?当然,在知道文件行数的情况下,我们可以很容易的用C运行库的rand函数随机的获得一个行数,从而随机的取出一行,但是,当前的情况是不知道行数,这样如何求呢?我们需要一个概念来帮助我们做出猜想,来使得对每一行取出的概率相等,也即随机.这个概念即蓄水池抽样(Reservoir Sampling). 水塘抽样算法(Reservoir Sampling)思想: 在序列流中取一个数,如…
问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would you read a text file, and select and print one random l…
2018-03-05 14:06:40 问题描述:给出一个数据流,这个数据流的长度很大或者未知.并且对该数据流中数据只能访问一次.请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等. 问题求解:如果是长度已知或者有限的问题,那么可以使用朴素的方法,先遍历一遍得到的长度.然后在得到长度后可以使用随机算法得到一个随机的index. 但是本题已经明确指出数据流长度很大或者未知,也就是说只能遍历一次,而且要保证每个数被挑选的概率相等. 标准解法是使用Reservoir Sampling算法,该…
转自:孤影醉残阳 http://hi.baidu.com/siyupy/item/e4bb218fedf4a0864414cfad 随机抽样问题(蓄水池问题Reservoir Sampling) 随即抽样问题: 要求从N个元素中随机的抽取k个元素,其中N无法确定. 是在 <计算机程序设计与艺术> 中看到的这个题目,书中只给出了解法,没给出证明. 解决方法是叫Reservoir Sampling (蓄水池抽样) Init : a reservoir with the size: k for i=…
https://blog.csdn.net/huagong_adu/article/details/7619665 https://www.jianshu.com/p/63f6cf19923d https://www.cnblogs.com/snowInPluto/p/5996269.html https://www.cnblogs.com/xudong-bupt/p/4053652.html https://www.jianshu.com/p/51f7089c082b 概念: 在一个给定长度的…
问题描述 给定一个数据流,数据流长度 N 很大,且 N 直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出 m 个不重复的数据. 比较直接的想法是利用随机数算法,求 random(N) 得到随机数,但是题目表明数据流极大,这种大数据量是无法一次都读到内存的,这就意味着不能像数组一样根据索引获取元素.获取 N 只能对所有数据进行遍历,耗费时间较大,并且题目强调只能遍历一遍,意味着不能先获取到 N ,那么采用分块存储数据的方法也不可取(遍历不止一遍):如果采…
  知识复习 空间亚线性算法:由于大数据算法中涉及到的数据是海量的,数据难以放入内存计算,所以一种常用的处理办法是不对全部数据进行计算,而只向内存里放入小部分数据,仅使用内存中的小部分数据,就可以得到一个有质量保证的结果. 数据流算法:是指数据源源不断地到来,根据到来的数据返回相应的部分结果.适用于两种情况:第一.数据量非常大仅能扫描一次时,可以把数据看成数据流,把扫描看成数据到来.第二.数据更新非常快,不能把所有数据都保存下来再计算结果,此时可以把数据看成是一个数据流. 在一些情况下,空间亚线…
randomly choose a sample of k items from a list S containing n elements, the algorithm may be online (i.e. the input list is unknown beforehand) https://en.wikipedia.org/wiki/Reservoir_sampling ReserviorSampling(Source[..n], Result[..k]) { ; i <= k;…
蓄水池算法是一种随机算法,可以形象的描述为从一个n维的list中选取k个元素,其中n是一个很大的数或者n是一个未知的数,而且一般n很大使得不会将list存在主存中. 解法: i = 0 while more input lines with probability 1.0/++i choice = this input line print choice…
[本文链接] http://www.cnblogs.com/hellogiser/p/reservoir-sampling.html 问题起源于编程珠玑Column 12中的题目10,其描述如下: How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness…
随机读取数据,如何保证真随机是不可能的,因为计算机的随机函数是伪随机的. 但是在不考虑计算机随机函数的情况下,如何保证数据的随机采样呢? 1.系统提供的shuffle函数 C++/Java都提供有shuffle函数,可以对容器内部的数据打乱,保持随机排序. C++: template <class RandomAccessIterator, class URNG> void shuffle (RandomAccessIterator first, RandomAccessIterator la…
在看蚂蚁***的时候看到这道题,真心觉得有趣,所以啊,一定要投入其中,知识的美妙啊~ 小明在天猫上开了一个网店,某天要开展一个抽奖活动,奖品数量100个.为了保证活动的公平,小明希望保证每个顾客中奖概率都一样,但他无法提前预估活动当天参加抽奖的顾客数.请你给他设计一个算法,要求: 1) 在抽奖过程中,如果让所有顾客一直等待抽奖结果,否则顾客会一直刷新导致网络拥塞,用户体验也很糟糕,因此只能容忍一小部分用户在活动进行过程中等待: 2) 活动结束以后,必须立即给出中奖的100位顾客名单. 给出一个数…
重要的是Gibbs的思想. 全概率分布,可以唯一地确定一个联合分布 ---- Hammersley-Clifford 多元高斯分布 当然,这个有点复杂,考虑个简单的,二元高斯,那么超参数就是: 二元高斯联合分布: 将其中一个作为已知常数,也就是求条件分布,正好就体现了Gibbs的特性: #initialize constants and parameters N <- 5000 #length of chain burn <- 1000 #burn-in length X <- matr…
蓄水池抽样——<编程珠玑>读书笔记 382. Linked List Random Node 398. Random Pick Index 从n个数中随机选取m个 等概率随机函数面试题总结         问题:如何随机从n个对象中选择一个对象,这n个对象是按序排列的,但是在此之前你是不知道n的值的.  思路:如果我们知道n的值,那么问题就可以简单的用一个大随机数rand()%n得到一个确切的随机位置,那么该位置的对象就是所求的对象,选中的概率是1/n. 但现在我们并不知道n的值,这个问题便抽…
4.3 抽样(Sampling) 用基于MapReduce的程序来处理TB级的数据集,要花费的时间可能是数以小时计.仅仅是优化代码是很难达到良好的效果. 在开发和调试代码的时候,没有必要处理整个数据集.但如果在这种情况下要保证数据集能够被正确地处理,就需要用到抽样了.抽样是统计学中的一个方法.它通过一定的过程从整个数据中抽取出一个子数据集.这个子数据集能够代表整体数据集的数据分布状况.在MapReduce中,开发人员可以只针对这个子数据集进行开发调试,极大减小了系统负担,提高了开发效率. 技术2…
吻合度蛮高,但不光滑. > L= > K=/ > x=runif(L) > *x*(-x)^/K)) > hist(x[ind],probability=T, + xlab="x",ylab="Density",main="") /* 应用了平滑数据的核函数 */ > d=density(x[,to=) // 只对标记为true的x做统计 --> 核密度估计 > lines(d,col=) // (…
M-H是Metropolis抽样方法的扩展,扩展后可以支持不对称的提议分布. 对于M-H而言,根据候选分布g的不同选择,衍生出了集中不同的变种: (1)Metropolis抽样方法 (2)随机游动Metropolis (3)独立抽样方法 <---- 本章涉及的方法 (4)逐分量的M-H抽样方法 独立抽样方法是M-H的一个特殊形式.因为独立,所以提议分布去掉了先验的影响. [Bayes] Metropolis-Hastings Algorithm 中可见的例如下图,是否可以用于预测参? 在此用于预…
随机生成[0,n)中不重复的m个数. class Random { public: Random(int n, int m):n(n), m(m) {} void generate() { srand(time(NULL)); ; i < n; ++i) data.push_back(i); ; i < m; ++i) swap(data[i], data[i + rand() % (n - i)]); } void increase() { data.push_back(n++); int…
[Bayes] prod: M-H: Independence Sampler for Posterior Sampling dchisq gives the density,                          # 计算出分布下某值处的密度值 pchisq gives the distribution function, qchisq gives the quantile function, rchisq generates random deviates. 通过一个例子直接了解…
第一部分 水塘抽样 reservoir sampling 水塘抽样的原理:(应该开一篇新文章)pssss [382]Linked List Random Node (2018年11月15日,新算法) 给了一个单链表,要求等概率的返回单链表的一个结点的值. 解法:我直接随便解了,能过,但是肯定不是面试官想要的XD.先遍历一遍链表求链表长度,然后随机一个出这次是第 x 个结点,(x = rand() % length),然后再遍历到这个结点返回值. /** * Definition for sing…
一.直接采样 直接采样的思想是,通过对均匀分布采样,实现对任意分布的采样.因为均匀分布采样好猜,我们想要的分布采样不好采,那就采取一定的策略通过简单采取求复杂采样. 假设y服从某项分布p(y),其累积分布函数CDF为h(y),有样本z~Uniform(0,1),我们令 z = h(y),即 y = h(z)^(-1),结果y即为对分布p(y)的采样. 直接采样的核心思想在与CDF以及逆变换的应用.在原分布p(y)中,如果某个区域[a, b]的分布较多,然后对应在CDF曲线中,[h(a), h(b…
https://leetcode.com/problems/linked-list-random-node/ // Using Reservoir sampling algorithm // https://discuss.leetcode.com/topic/53812/using-reservoir-sampling-o-1-space-o-n-time-complexity-c/2 /** * Definition for singly-linked list. * public clas…
通常我们需要监测ASP.NET MVC 或 Web API 的应用程序的性能时,通常采用的是自定义性能计数器,性能计数器会引发无休止的运维问题(损坏的计数器.权限问题等).这篇文章向你介绍一个新的替代性能计数器的工具Metrics.NET,因为是它是内部的,所以我们能够向系统中添加更多更有意义的度量标准. Metrics.NET(https://github.com/etishor/Metrics.NET)是一个给CLR 提供度量工具的包,它是移植自Java的metrics,支持的平台 .NET…
摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePartitioner和sortByKey实验 内容: 1.背景:这是一个填之前Spark RDD 核心总结这篇博文中RangePartitioner留下的坑,没想到又发现一个坑(XORShiftRandom:生成随机数的一个算法,有时间再来总结) RangePartitioner 是Spark Parti…