海量数据处理常用数据结构及方法
来源:互联网 发布:公司网络微信被屏蔽 编辑:程序博客网 时间:2024/06/03 16:47
大数据时代,海量数据的分析也成为了各大公司面试的热点问题。本文总结了几种常用的方法。
数据结构
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
适用范围:数据量大,但是数据种类小可以放入内存
基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。
外排序
数据库索引
说明:上述方法都有对应的博文,在算法与数据结构分类中。有兴趣的,可以查阅。
- 海量数据处理常用数据结构及方法
- 常用海量数据处理方法
- 海量数据处理常用方法总结
- 海量数据处理常用的方法
- 海量数据处理的常用方法
- 海量数据处理常用算法、数据结构总结
- 关于海量数据处理的各种常用数据结构
- 海量数据处理常用思路和方法
- 海量数据处理常用思路和方法
- 海量数据处理常用思路和方法
- 常用海量数据处理方法/算法总结
- 海量数据处理常用思路和方法
- 海量数据处理常用思路和方法
- 海量数据处理常用的思路和方法
- 海量数据处理常用思路和方法
- 海量数据处理常用思路和方法
- 海量数据处理常用思路和方法
- 海量数据处理常用思路和方法
- sicilyOJ 11中大预选赛 D Minimum Labeled Spanning Tree
- Shut the Box HDU4212
- 删除线性表节点(线性表)
- 汇编语言 课程设计2 之时间设置改进篇
- 【四圣龙神录的编程教室】第19章、给敌机加上消灭特效吧
- 海量数据处理常用数据结构及方法
- C++学习之构造函数的理解--模板形式的构造函数不会遮掩编译器生成的默认构造函数
- 节点插入(线性表)
- 一步步学习微软InfoPath2010和SP2010--第十二章节--管理和监控InfoPath Form Services(IPFS)
- Linux Socket TCP通信
- log4j使用记录
- 定时任务调度总结2)
- 删除相同元素(线性表)
- Objective-C语法之NSDictionary和NSMutableDictionary