Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1899001
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 架构设计与优化

2013-01-24 15:56:58

处理大数据,比如hbase中常常会提到bloom filter 的概念。这个精简的数据结构是干嘛的呢?

 他的作用就是判断某个元素是否属于这个集合。

方法是:对于集合A ,设置一个m位的位数组b。并给定k个hash函数。

     for i in 0...k

       for elem in A(遍历整个集合)

            setbit(maparray,hash(k,elem)) (根据第k个hash函数计算出一个值,并将该位设置为1,如果已经设置为1,则不重复设置)。

  如果要判断一个元素是否是属于这个集合的话,依次调用k个hash函数,当然会映射到位数组b的k个位置,如果映射到的位置不为1,那么就说明他不是该集合当中的。


 但是bloom filter 的致命伤是他的计算并不是每次都是准确的,可能会有失误,将不属于这个集合的元素识别为这个集合的元素。比如y1 映射到的地方出现了0,说明y1不为这个集合的元素,y2就是这个集合的元素,因为y2映射的地方都是1.


  这是典型的以错误率换空间和时间的例子。

阅读(3568) | 评论(0) | 转发(0) |
1

上一篇:zfs中的锁的使用

下一篇:合并IO代码分析

给主人留下些什么吧!~~