双层桶划分学习笔记

关于我的 Leetcode 题目解答,代码前往 Github:https://github.com/chenxiangcyr/leetcode-answers


适用范围:求第 k 大,中位数,不重复或重复的数字,且元素范围很大,不能一次载入内存。

基本原理:通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。

问题1:在2.5亿个整数中找出不重复的整数的个数。假设内存不足以同时容纳2.5亿个整数。

  • 方案1:
    整数个数为 2^32,也就是,我们可以将这 2^32 个数,划分为 2^8 个区域(比如2^8 个文件),然后将数据分离到不同的区域,然后不同的区域在利用 bitmap 就可以直接解决了。
  • 方案2:
    采用 2-bitmap,每个数分别 2 个bit,00 表示出现 0 次,01 表示出现 1 次,11 表示出现多次。
    需要内存 2.5 亿 * 2 = 5亿 bit = 0.5G bit = 0.07G byte = 70M
    依次扫描2.5亿个整数:
    • 00 变 01
    • 01 变 11
    • 10 不变

问题2:在5亿个整数中找出中位数。

  • 方案1:将这些数字划分到 2^16 个区域,依次统计每个区域内元素的个数,根据统计结果,判断出中位数位于哪个区域。随后在重新扫描该区域。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文...
    零一间阅读 966评论 0 5
  • (一)——开篇 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到...
    零一间阅读 769评论 0 5
  • 在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面: 一、数据量过大,数据中...
    零一间阅读 1,831评论 0 10
  • 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一...
    java大哥阅读 797评论 0 3
  • 摘要:本文将向您讲述诸多数据处理面试题以及方法的总结。 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出...
    拾壹北阅读 1,723评论 0 28