前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >海量数据面试题总结(3)-多层桶划分

海量数据面试题总结(3)-多层桶划分

作者头像
小萌哥
发布2020-07-20 14:45:12
5250
发布2020-07-20 14:45:12
举报
文章被收录于专栏:算法研习社算法研习社

本系列文章对海量数据面试题进行了归类和总结,给出海量数据处理问题的通用解决思路,后面附有例题,希望大家能够举一反三。

往期回顾:

模式三:多层桶划分

一、解决思路:

多层桶划分,本质思想还是分而治之,可以认为是BitMap的增强版。

基本原理:因为元素范围很大,内存超限,不能使用直接寻址表,所以通过多次划分,逐步确定范围,每次都在一个可以接受的范围内进行,逐步缩小。

使用场景:BitMap所需要的内存空间无法一次性满足。

常见问题:第K大数,中位数,不重复或重复的数字。

二、经典例题:

1. 找出5亿个int的中位数。

(1) 如果数据类型为int16,首先申请一块2^16个bit的内存区域,然后将5亿个数依次划分到这些区域中,依次统计落到各个区域里的数的个数,之后我们根据计算出中间位置的数应该落到那个区域,同时知道这个区域的第几个数刚好是中位数;然后第二次扫描我们只统计落在这个区域中的那些数就可以了。

(2) 实际上,如果不是int16而是int64,2^64个Bit在内存中是存不下的,但可以经过3次划分降低到可以计算的程度。即可以先将2^64个区域分为2^24个较大的区域,然后确定区域的中部位于哪个区域内,再将该区域分成2^20个子区域,然后确定区域的中部位于哪个区域内,然后每个子区域里的数的个数只有2^20,就可以直接利用直接寻址表进行统计了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模式三:多层桶划分
    • 一、解决思路:
      • 二、经典例题:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档