【什么是双层桶】
事实上,与其说双层桶划分是一种数据结构,不如说它是一种算法设计思想。面对一堆大量的数据我们无法处理的时候,我们可以将其分成一个个小的单元,然后根据一定的策略来处理这些小单元,从而达到目的。

【适用范围】
第k大,中位数,不重复或重复的数字

【基本原理及要点】
因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。可以通过多次缩小,双层只是一个例子,分治才是其根本(只是“只分不治”)。

【扩展】
当有时候需要用一个小范围的数据来构造一个大数据,也是可以利用这种思想,相比之下不同的,只是其中的逆过程。

【问题实例】
1).2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。也就是说只要有足够的磁盘空间,就可以很方便的解决。 当然这个题也可以用我们前面讲过的BitMap方法解决,正所谓条条大道通罗马~~~

2).5亿个int找它们的中位数。

这个例子比上面那个更明显。首先我们将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第几大数刚好是中位数。然后第二次扫描我们只统计落在这个区域中的那些数就可以了。

实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受的程度。即可以先将int64分成2^24个区域,然后确定区域的第几 大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里的数的个数只有2^20,就可以直接利用direct addr table进行统计了。

3).现在有一个0-30000的随机数生成器。请根据这个随机数生成器,设计一个抽奖范围是0-350000×××中奖号码列表,其中要包含20000个中奖号码。

这个题刚好和上面两个思想相反,一个0到3万的随机数生成器要生成一个0到35万的随机数。那么我们完全可以将0-35万的区间分成35/3=12个区间,然后每个区间的长度都小于等于3万,这样我们就可以用题目给的随机数生成器来生成了,然后再加上该区间的基数。那么要每个区间生成多少个随机数呢?计算公式就是:区间长度*随机数密度,在本题目中就是30000*(20000/350000)。最后要注意一点,该题目是有隐含条件的:×××,这意味着你生成的随机数里面不能有重复,这也是我为什么用双层桶划分思想的另外一个原因。

转载于:https://blog.51cto.com/rosehacker/751561

海量数据处理专题(六)——双层桶划分相关推荐

  1. 大数据处理 - 双层桶划分

    分桶法简介 其实本质上还是分而治之的思想,重在"分"的技巧上! 适用范围: 第k大,中位数,不重复或重复的数字 基本原理及要点: 因为元素范围很大,不能利用直接寻址表,所以通过多次 ...

  2. 海量数据处理专题(八)——倒排索引(搜索引擎之基石)

    引言: 在信息大爆炸的今天,有了搜索引擎的帮助,使得我们能够快速,便捷的找到所求.提到搜索引擎,就不得不说VSM模型,说到VSM,就不得不聊倒排索引.可以毫不夸张的讲,倒排索引是搜索引擎的基石. VS ...

  3. 10道海量数据处理的面试题

    说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结. 出处:http://blog.csdn.net/v_JULY_v. 第一部分.十道海量数据处理面试 ...

  4. [转+整理]十道海量数据处理面试题与十个方法大总结

        海量数据处理:十道面试题与十个海量数据处理方法总结 作者:July.youwang.yanxionglu. 时间:二零一一年三月二十六日 本文之总结:教你如何迅速秒杀掉:99%的海量数据处理面 ...

  5. 面试中海量数据处理总结

    教你如何迅速秒杀掉:99%的海量数据处理面试题 前言 一般而言,标题含有"秒杀","99%","史上最全/最强"等词汇的往往都脱不了哗众取宠 ...

  6. 海量数据处理相关算法及数据结构【转】

    积淀 何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储.处理.操作.何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存. 那解决 ...

  7. 十八道海量数据处理面试题与相关知识讲解

    转载自:http://blog.sina.com.cn/s/blog_6002b97001014mu1.html 第一部分.十五道海量数据处理面试题 1. 给定a.b两个文件,各存放50亿个url,每 ...

  8. 上亿海量数据处理方法

    上亿海量数据处理方法 1.海量日志数据,提取出某日访问百度次数最多的那个IP. 2.搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节. 3.有一个1G大 ...

  9. 海量数据处理算法 各种STL容器使用的数据结构剖析

    教你如何迅速秒杀掉:99%的海量数据处理面试题 转载于:结构之法算法之道blog 前言 一般而言,标题含有"秒杀","99%","史上最全/最强&qu ...

最新文章

  1. python入门基础知识教程-Python基础知识入门,这三个原则是你要知道的,还有教程...
  2. 数据结构和算法之时间复杂度
  3. 通过yum安装Nagios
  4. Python(6)-文件和异常
  5. linux3.8内核下载,linux 3.8内核usbmouse代码注释
  6. 文件、异常、模块——初步了解
  7. 浏览器播放语音SpeechSynthesisUtterance
  8. python中exchange函数使用_Python下使用rabbitmq之exchange属性
  9. 角色与使命:学生干部如何平衡工作与学习的关系?
  10. oppo的sd卡在哪里打开_oppo手机sd卡怎么打开 oppo手机sd卡怎样打开
  11. 网页中图片显示不出来,解决网页中图片不能显示的方法
  12. 【翻译】理解 LSTM 网络
  13. 解题:POI 2008 Plot purchase
  14. 各行业获客有哪些捷径?有没有能快速找到精准客户的软件?
  15. 操作系统实验Ucore:Kernel_init(四)
  16. 计算机怎么搜索程序和文件格式,PDF软件如何快速搜索与查找文件?
  17. 学习C语言常用的几个网站
  18. 使用工具【ZipCenOp.jar】自动修复zip伪加密文件
  19. unity塔防游戏怪物转向_萌宠打怪物红包福利版-萌宠打怪物红包版(可提现)下载v1.0...
  20. web项目实践1-iwebshop项目-页面初始化数据与sql数据库中的数据对比

热门文章

  1. Linux——进程间通信(总结)
  2. 7-28作业直接刷一下
  3. php3.2手册中文版,Uploadify v3.2中文手册分享
  4. php post收不到值,php 取不到POST 值
  5. 周报速递丨中国 5G 基站全球占比 70% ;360 宣布转型数字安全公司
  6. 特邀丨前阿里巴巴产品运营专家、中国计算机学会专业会员,揭秘增长共同点
  7. 求素数——多线程练习
  8. [CODE FESTIVAL 2016]Distance Pairs
  9. 开发人员学Linux(1):VirtualBox中安装CentOS7过程记录
  10. Oracle RESETLOGS 和 NORESETLOGS 区别说明