大数据处理方法bloom filter

   布嵘过滤器为一种空间效率很高的随机数据结构, 它的实现方法主要包括一个位数组, 可用c++中的bitset来实现和k个哈希函数. 算法原理为: 当向某一个集合中添加一个元素的时候, 该元素会分别作为K个哈希函数的输入, 将该元素映射到位数组的k个点, 将这些点置为1. 当要查找某个元素是否在该集合中时, 只要将该元素作为k个哈希函数的输入, 然后看映射到的k个点是否为1, 如果全为1, 则该元素(可能)在该集合中, 如果出现了一个为0, 则说明该元素不在该集合中. 这就是该算法的基本思想.

集合s = {x1, x2, x3,...xn}在添加元素时, 设置位数组的过程:

 

   说全为1, 该元素可能存在是因为该算法是存在一个错误率的, 即可能将一个不存在的元素判断为存在这个集合中.为了使错误率最低, 需要知道如何根据输入元素个数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为底的对数)。

即: 位数组大小 m >= nlg(1/E)*lge (E为错误率) = nlg(1/E)1.44倍(lg表示以2为底的对数)

   哈希函数的个数 k = (ln2)*(m/n)

所以bloom filter比较适合可以容忍错误的应用.它通过低的错误率来节省大量的存储空间.

使用范围: 拼音错误检测和数据库系统; 可以用来实现数据字典, 数据判重或者求集合的交集.

Bloom filter将集合中的元素映射到位数组当中, 用k(k为哈希函数的个数)个映射位是否全1表示元素是否在这个集合中. 它的缺点是, 一个元素添加到集合中之后, 就不能删除了, 否则该元素对应的位会影响其他元素. CBF是一种改进, 它将每个bit改为了一个计数器, 从支持删除操作,即每删除一个关键字, 将对应k个位(计数器)减一.  SBF 将计数器与元素出现次数相关联, 将计数器中最小的作为该元素出现的频率.

时间: 2024-10-19 14:28:32

大数据处理方法bloom filter的相关文章

【转】海量数据处理算法-Bloom Filter

1. Bloom-Filter算法简介 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在于集合的快速的概率算法.Bloom Filter有可能会出现错误判断,但不会漏掉判断.也就是Bloom Filter判断元素不再集合,那肯定不在.如果判断元素存在集合中,有一定的概率判断错误.因此,Bloom Filter不适合那些“零错误”的应用场合.而在能容忍低错误率的应用场合下,Bloom Fi

海量数据处理算法—Bloom Filter

1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在集合的快速的概率算法.Bloom Filter有可能会出现错误判断,但不会漏掉判断.也就是Bloom Filter判断元素不再集合,那肯定不在.如果判断元素存在集合中,有一定的概率判断错误.

海量数据处理之Bloom Filter详解

前言 :  即可能误判    不会漏判 一.什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个位阵列(Bit array)中的K个点,把它们置为1.检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检索元素一定不在:如果都是1,则被检索元素很可能在.这就是布隆过滤器的基本思想. 但Bloom Filter的这种高效是有一定代价的:在判

C++大数据处理

转:http://blog.csdn.net/v_july_v/article/details/7382693 作者:July出处:结构之法算法之道blog 前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结. 毕竟受文章和理论之限,本文将摒弃绝大部分的细节,只谈方法/模式论,且注

大数据处理算法二:Bloom Filter算法

百度面试题:给定a.b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a.b文件共同的url? Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合.   一. 实例  为了说明Bloom Filter存在的重要意义,举一个实例: (实例一),假设要你写一个网络蜘蛛(web crawler).由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能会形成

Bloom Filter 大规模数据处理利器

BloomFilter–大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. 一. 实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络爬虫程序(web crawler).由于网络间的链接错综复杂,爬虫在网络间爬行很可能会形成“环”.为了避免形成“环”,就需要知道爬虫程序已经访问过那些URL.给一个URL,怎样知道爬虫程序

大数据量下的集合过滤—Bloom Filter

算法背景 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘,要么是内存.很多时候要么是以时间换空间,要么是以空间换时间. 在响应时间要求比较严格的情况下,如果我们存在内里,那么随着集合中元素的增加,我们需要的存储空间越来越大,以及检索的时间越来越长,导致内存开销太大.时间效率变低. 此时需要考虑解决的问题就是,在数据量比较大的情况下,既满足时间要求,又满足

海量数据处理--bloom filter

例题:给定两个大文件,各含有50亿条url,要求利用4G内存快速找出共同的url 解答: 假设两个文件为A和B,4G内存有32G位,可以表示5G的url. 本文采用bloom filter解答: 首先简单介绍一下bloom filter的思想,其核心是:位数组:K个hash函数. 通过对大量数据处理,通过k个hash函数将大量数据压缩存储到多个位当中. 查找的时候,根据K个hash函数的结果,如果有0那么就不在集合中,如果没有0那么就在集合中(可能会误判). 这道题可以先通过对A处理,然后得到b

小智慧,大作为——Bloom Filter

知道杀毒软件的病毒库如何存储的吗,杀毒软件又是如何识别一个病毒的呢,这或许是一个很深奥的问题.但是今天学习的了一个新东西--Bloom Filter,这个设计简单的小东西却可以很好的解决这一问题,并在很多常见的地方被使用,真是小智慧大作为.所以在这里分享一下Bloom Filter这个神奇的东东. 一.Bloom Filter是什么? Bloom Filter是具有很好的时间和空间效率的二进制向量数据结构,它使用较少的空间来存储海量的数据对象,并可以快速查询. 二.Bloom Filter的组成