大数据算法

http://blog.csdn.net/zuiaituantuan/article/details/5900981

1. Bloom Filter

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合

    位数组+k个独立hash函数。将hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。

    据输入元素个数n,确定位数组m的大小及hash函数个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应 该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。

    案例:  A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL

 

2. 哈希法

     适用范围:快速查找,删除的基本数据结构,通常需要总数据量可以放入内存   

     hash函数选择,针对字符串,整数,排列,具体相应的hash方法。
     碰撞处理,一种是open hashing,也称为拉链法;另一种就是closed hashing,也称开地址法,opened addressing。

     实例:海量日志数据,提取出某日访问百度次数最多的那个IP。


3. 大小根堆问题

     实例:1)100w个数中找最大的前100个数

 

4. bitmap

    适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下
    基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码

posted on 2014-05-05 14:45  kangbry  阅读(166)  评论(0编辑  收藏  举报

导航