转: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)。最后要注意一点,该题目是有隐含条件的:彩票,这意味着你生成的随机数里面不能有重复,这也是我为什么用双层桶划分思想的另外一个原因。
分享到:
相关推荐
2. 双层桶划分 3. Bloom filter/Bitmap 4. Trie 树/数据库/倒排索引 5. 外排序 6. 分布式处理之 Hadoop/Mapreduce 在处理海量数据时,需要根据实际情况选择合适的方法,并且需要考虑到数据的规模、分布式处理和并行...
掌握双层桶划分、堆、Bit-map等数据结构和算法,以及能够灵活运用分治策略,将为面试者在海量数据处理面试中赢得宝贵的印象分。这些技术和策略的有效结合使用,不仅是在面试中的应试技巧,更是未来工作中解决实际...
大数据量,海量数据 处理方法总结 包括Bloom filter 哈希 bit-map 堆 双层桶划分 数据库索引 倒排索引 外排序 trie树等。细分为适用范围、要点、实例等。
2. **双层桶划分** - 通过两层哈希的方式进一步细化数据分布,提高处理效率。 3. **Bloom Filter/Bitmap** - Bloom Filter(布隆过滤器)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中...
双层桶划分是另一种处理大数据分布情况的技术,它将数据分为两层进行统计和处理,有助于提升大规模数据处理的效率。 总结而言,海量数据处理在现代IT行业中的地位愈发重要,它要求面试者不仅要掌握数据结构和算法...
2. **双层桶划分**: - 在某些场景下,我们可能需要对数据进行两层划分,以更精确地定位目标。例如,在处理IP地址时,第一层可以按IP的高位进行划分,第二层则根据低位进行进一步细分。 3. **Bloom Filter/Bitmap*...
大数据量的问题是很多面试笔试中经常出现的问题,比如百度,谷歌,腾讯这样的一些涉及到海量数据的公司经常会问到。 本文的一些问题基本直接来源于...包括Bloom filter,Hashing,bit-map,双层桶划分,倒排索引等。
#### 五、双层桶划分 **定义**: 通过对数据进行初步分组,然后在每个小组内再次细分,以提高处理效率。 **应用场景**: - 分布式计算。 - 数据库分区。 **优点**: - 减少了单个分区的处理压力。 - 支持并行处理。 ...
2. **双层桶划分**:通过两次分配,将数据均匀分布到各个桶中,便于进一步处理。 3. **Bloom filter/Bitmap**:用于高效地判断一个元素是否存在于集合中,节省空间。 4. **Trie树/数据库/倒排索引**:用于快速查找和...
这种方法减少了单次处理数据量,从而降低对内存的需求。 双层桶划分是一种特定的数据处理方法,它通过两轮划分来将数据集分配到不同的桶中。第一轮划分按照某个特征将数据分布到一组桶中,第二轮再在每个桶内进行...
"双层膜椭偏数据处理的新算法" 摘要:本文提出了一种新的双层膜椭偏数据处理算法,该算法结合了模拟退火法和单纯形法的优点,能够准确地处理双层透明膜的椭偏数据。该算法可以在单波长测量时,仅测量一组椭偏参数,...
2. 双层桶划分(Two-level Bucketing):将数据分散到多个桶中,每个桶内部使用更简单的数据结构进行处理。 3. 布隆过滤器(Bloomfilter)和位图(Bitmap):使用位操作来高效地处理和检查大数据集中的元素。 4. ...
电气双层电容器(Electrical Double-Layer Capacitor,简称EDLC)是一种特殊的储能设备,其独特的构造和工作原理使其在众多电容器类型中脱颖而出。本文将深入探讨EDLC的基本结构、工作原理以及其特点。 ### 电气...
【初中物理专题复习——综合能力题含答案】 1. **白炽灯泡的工作原理与变化** 白炽灯泡是常见的电光源,其工作时,电流通过灯丝,将电能转化为内能和光能。灯丝在高温下发光,这是因为电流做功导致灯丝发热,进而...
综上所述,基于并发跳表的云数据处理双层索引架构的研究,不仅为数据处理领域带来理论创新,也为云计算及大数据应用提供了实用的解决方案,推动了数据处理技术的发展和进步。未来,随着云计算、大数据技术的不断发展...
2. 双层桶划分 3. Bloomfilter/Bitmap 4. Trie树/数据库/倒排索引 5. 外排序 6. 分布式处理之Hadoop/Mapreduce 在具体介绍这些方法之前,文章首先对数据结构进行了简要介绍。在STL中,容器主要分为序列式容器和关联...
7. **双层桶划分** - **适用**:找第k大元素、中位数、重复/不重复数字。 - **原理**:多次划分,逐步缩小范围,利用层次结构处理内存限制。 8. **数据库索引** - **应用**:大数据量的增删查改操作,提高查询...
本文将对几种常见的海量数据处理技术进行深入分析,包括Bloom Filtering、Hash表技术、堆技术和双层桶设计。 1. **Bloom Filtering**: Bloom Filtering是一种空间效率极高的概率型数据结构,用于测试一个元素是否...
提出一种基于桶排序的双层模型预测控制方法。对电容 电压进行桶排序,将电压排序后的子模块按次序等分为若干组,通过第一层模型预测控制确定需要插入桥臂的 组数,再通过第二层模型预测控制进一步确定需要插入的子...
在IT领域,优化问题在众多应用中占据了重要地位,特别是在数据科学、机器学习以及运筹学等方向。本文将深入探讨基于Python和Gurobi库解决数值双层规划问题的知识点。 双层规划是一种数学优化模型,它包含了两个相互...