阿弥陀佛
分类: 架构设计与优化
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.
这是典型的以错误率换空间和时间的例子。