海量数据处理常用数据结构及方法

大数据时代,海量数据的分析也成为了各大公司面试的热点问题。本文总结了几种常用的方法。

 

数据结构

 

bitmap

 

适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下
基本原理及要点:使用bit数组来表示某些元素是否存在;判重一般采用2-bitmap,即采用两个bit位来表示一个数据出现的次数(00表示未出现、01表示出现一次、10表示出现两次及其以上)

 

 

这里的堆不是我们提到的堆栈里的堆,而是用来排序的堆。

适用范围:海量数据前n大,并且n比较小,堆可以放入内存
基本原理及要点:最大堆求前n小,最小堆求前n大。维护一个拥有n个节点的堆,依次遍历剩下的元素,与堆顶元素比较,适当的时候替换堆顶元素,并调整堆。另外双堆可以用来维护中位数。

 

trie树

 

适用范围:数据量大,重复多,但是数据种类小可以放入内存
基本原理及要点:节点孩子的表示方式

 

hash

 

适用范围:快速查找、删除的基本数据结构,通常需要总数据量可以放入内存
基本原理及要点:hash函数选择,针对字符串、整数、排列等具体相应的hash方法;hash冲突的解决方式。

 

其他方法

 

分而治之

 

适用范围:几乎可用于所有的问题,经常用于不能一次读入内存的数据分析
基本原理及要点:如何分,一般都会用hash将大量的文件分成若干小部分,其思想实现为MapReduce

 

双层桶划分

适用范围:第k大,中位数,不重复或重复的数字
基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。

Bloom filter

 

适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集
基本原理及要点:对于原理来说很简单,位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。
可以把Bloom filter看成是bitmap和hash的扩展。

 

MapReduce

 

适用范围:数据量大,但是数据种类小可以放入内存
基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。

 

外排序

 

数据库索引

 

说明:上述方法都有对应的博文,在算法与数据结构分类中。有兴趣的,可以查阅。

 

你可能感兴趣的:(算法与数据结构,海量数据,数据结构,大数据,面试,mapreduce)