处理大数据,比如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.
这是典型的以错误率换空间和时间的例子。
相关热门文章
给主人留下些什么吧!~~
评论热议