`

双层桶划分

阅读更多

http://blog.redfox66.com/post/mass-data-topic-6-multi-dividing.aspx

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

【适用范围】
第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)。最后要注意一点,该题目是有隐含条件的:彩票,这意 味着你生成的随机数里面不能有重复,这也是我为什么用双层桶划分思想的另外一个原因。

分享到:
评论

相关推荐

    海量数据处理 百度、腾讯、Google面试

    1. **双层桶划分**:双层桶划分是一种处理海量数据的算法设计思想,适用于寻找第k大数、中位数以及不重复或重复数字的问题。当数据量过大,无法一次性处理时,通过多次划分数据,逐步缩小处理范围,最终在可接受的...

    大数据的一些面试题.pdf

    一、分而治之思想与双层桶划分 在大数据处理中,面对大规模数据,无法直接使用直接寻址表时,我们可以采用分而治之的策略。双层桶划分是一种典型的例子,它适用于寻找第k大元素、计算中位数以及处理不重复或重复数字...

    通用大数据存储和分析处理平台-Hadoop.docx

    - **Bloom filter**、**Hashing**、**bit-map**、**堆**、**双层桶划分**、**数据库索引**(如倒排索引)、**外排序**、**trie 树**等是处理大数据时的常用技术策略。 7. **配置调优**: - **MapReduce配置**:...

    教你如何迅速秒杀掉 海量数据处理面试题.pdf

    双层桶划分是一种特定的数据处理方法,它通过两轮划分来将数据集分配到不同的桶中。第一轮划分按照某个特征将数据分布到一组桶中,第二轮再在每个桶内进行划分,以进一步细分数据集。 Bloom Filter是一种空间效率很...

    教你如何迅速秒杀掉:99%的海量数据处理面试题

    2. **双层桶划分**: - 在某些场景下,我们可能需要对数据进行两层划分,以更精确地定位目标。例如,在处理IP地址时,第一层可以按IP的高位进行划分,第二层则根据低位进行进一步细分。 3. **Bloom Filter/Bitmap*...

    99%的海量数据处理面试题

    2. **双层桶划分**:通过两次分配,将数据均匀分布到各个桶中,便于进一步处理。 3. **Bloom filter/Bitmap**:用于高效地判断一个元素是否存在于集合中,节省空间。 4. **Trie树/数据库/倒排索引**:用于快速查找和...

    海量数据处理方法

    2. 双层桶划分 3. Bloom filter/Bitmap 4. Trie 树/数据库/倒排索引 5. 外排序 6. 分布式处理之 Hadoop/Mapreduce 在处理海量数据时,需要根据实际情况选择合适的方法,并且需要考虑到数据的规模、分布式处理和并行...

    《Java面试必知必会》-海量数据类高频问题和参考答案.pdf

    7. **双层桶划分** - **适用**:找第k大元素、中位数、重复/不重复数字。 - **原理**:多次划分,逐步缩小范围,利用层次结构处理内存限制。 8. **数据库索引** - **应用**:大数据量的增删查改操作,提高查询...

    数据处理面试题

    2. 双层桶划分(Two-level Bucketing):将数据分散到多个桶中,每个桶内部使用更简单的数据结构进行处理。 3. 布隆过滤器(Bloomfilter)和位图(Bitmap):使用位操作来高效地处理和检查大数据集中的元素。 4. ...

    通用大数据存储与分析处理平台_Hadoop.docx

    最后,文档探讨了海量数据处理的思路,包括Bloom filter、Hashing、bit-map、堆、双层桶划分、数据库索引(如倒排索引)和外排序等方法,并引用了关于Hadoop框架和MapReduce模式的经典文章,帮助读者深入理解海量...

    数据处理面试题.pdf

    2. 双层桶划分 3. Bloomfilter/Bitmap 4. Trie树/数据库/倒排索引 5. 外排序 6. 分布式处理之Hadoop/Mapreduce 在具体介绍这些方法之前,文章首先对数据结构进行了简要介绍。在STL中,容器主要分为序列式容器和关联...

    海量数据处理

    2. **双层桶划分** - 通过两层哈希的方式进一步细化数据分布,提高处理效率。 3. **Bloom Filter/Bitmap** - Bloom Filter(布隆过滤器)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中...

    海量数据处理面试题.pdf

    双层桶划分是另一种处理大数据分布情况的技术,它将数据分为两层进行统计和处理,有助于提升大规模数据处理的效率。 总结而言,海量数据处理在现代IT行业中的地位愈发重要,它要求面试者不仅要掌握数据结构和算法...

    大数据 海量数据 处理方法总结

    大数据量,海量数据 处理方法总结 包括Bloom filter 哈希 bit-map 堆 双层桶划分 数据库索引 倒排索引 外排序 trie树等。细分为适用范围、要点、实例等。

    海量数据处理的方法

    #### 五、双层桶划分 **定义**: 通过对数据进行初步分组,然后在每个小组内再次细分,以提高处理效率。 **应用场景**: - 分布式计算。 - 数据库分区。 **优点**: - 减少了单个分区的处理压力。 - 支持并行处理。 ...

    常用大数据量、海量数据处理方法__算法总结

    大数据量的问题是很多面试笔试中经常出现的问题,比如百度,谷歌,腾讯这样的一些涉及到海量数据的公司经常会问到。 本文的一些问题基本直接来源于...包括Bloom filter,Hashing,bit-map,双层桶划分,倒排索引等。

    生活垃圾收集运输服务合同.pdf

    生活垃圾的收集、压缩和运输主要依赖4辆双层垃圾桶平板运输车、4套垃圾压缩箱、2辆拉臂车、2座垃圾中转站以及相关的清洗和垃圾桶设备。 五、承包费用 1. 收集运输服务费按中标价(元/吨)乘以实际日收运量计算,最...

    发热门诊隔离病房感控工作规范PPT学习教案.pptx

    诊疗区域的手卫生设施需便利医务人员使用,且不设生活垃圾桶,感染性医疗废物需使用双层黄色废物袋。 工作人员的防护措施是感控工作的核心。进入污染区前,医务人员需在缓冲区穿戴工作服、隔离衣或防护服,同时佩戴...

    江苏省幼儿园教育技术装备标准.doc

    - 材质为木制或不锈钢,内部空间划分满足幼儿数+20%的数量要求,以备不时之需。 - **茶杯**: - 不锈钢材质,每名幼儿配备2个,以便轮流使用或作为备用。 - **消毒柜**: - 容量需满足消毒需求。 - **毛巾架**...

Global site tag (gtag.js) - Google Analytics