海量数据处理之蓄水池抽样算法

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

一、问题由来

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

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

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

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

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

二、算法实现

 

array R[k];    // result
 integer i, j;
 

 for each i in 1 to k do
     R[i] := S[i]
 done;
 
 for each i in k+1 to length(S) do
     j := random(1, i);   // important: inclusive range
     if j <= k then
        R[j] := S[i]
     fi
 done

 

目录
相关文章
|
3月前
|
存储 负载均衡 算法
从海量数据中挖出TOP100热词,这个算法太绝了!
小米,一位热爱技术的29岁程序员,今天探讨如何在海量搜索词汇中找出最热的TOP100词汇。面对包含数百亿词汇的大文件,小米介绍了一种实用的方法:通过哈希分流将大文件拆分成小文件,接着利用哈希表统计词频,并运用小根堆选出每个小文件的TOP100词汇。最后通过外排序或再次使用小根堆选出全局TOP100。此外还提出了并行处理、内存优化及数据压缩等优化手段。这一系列技巧能有效应对大数据处理挑战。
63 9
|
6月前
|
算法 数据可视化
R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例
R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例
R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例
|
6月前
|
算法 数据可视化 Python
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
Python用MCMC马尔科夫链蒙特卡洛、拒绝抽样和Metropolis-Hastings采样算法
|
6月前
|
机器学习/深度学习 算法
R语言使用Metropolis- Hasting抽样算法进行逻辑回归
R语言使用Metropolis- Hasting抽样算法进行逻辑回归
|
机器学习/深度学习 传感器 算法
基于类帕累托贯序抽样算法求解单目标优化问题附matlab代码
基于类帕累托贯序抽样算法求解单目标优化问题附matlab代码
|
分布式计算 算法 搜索推荐
【经典算法问题 一】海量数据中找出前k大数(topk问题)
【经典算法问题 一】海量数据中找出前k大数(topk问题)
210 0
|
机器学习/深度学习 数据采集 存储
面试学习:海量数据的数据结构思想与算法
处理海量数据问题的6类算法思想
面试学习:海量数据的数据结构思想与算法
|
算法
《海量数据场景下的淘宝搜索智能——算法及实践》电子版地址
海量数据场景下的淘宝搜索智能——算法及实践
106 0
《海量数据场景下的淘宝搜索智能——算法及实践》电子版地址
下一篇
无影云桌面