赞
踩
今天遇到的新鲜面试题:
问数据量在million级别的情况下,怎么快速判断一个data是不是在数据库中出现过,
当时没想到怎么做,回了家一拍大腿才想起来这是布隆过滤器……
唉,在极客时间学过这个概念,但是学完之后再也没用到过,而且太久没打LOL了,所以远远地抛到脑后……
今天赶快复习一下……
布隆过滤器用于检索一个元素是否存在一个集合里。
优点:空间效率 和 时间效率 都非常高
缺点:存在误识别率并且删除困难。
注意⚠️:此处的误识别率是指,当一个布隆过滤器判断一个数据在集合中存在时,有一定的可能性误判;但如果布隆过滤器判断一个数据不在集合中时,则100%正确。
(注:以下两张图均来自《算法面试通关40讲》)
如上图所示,使用哈希函数将每个元素映射到一个二进制向量的三个位上,
将集合中每个元素对应的三个位记录成1。
当需要判断一个新的元素w 在不在集合中时,可以先计算出w的三个位,
然后只要发现其中存在任何一个位为0, 则可以100%肯定,w不在此集合中。
再来个例子:
假设集合中已经存在元素A和元素E,
需要判断元素 A, B, C在不在集合里,
看上图可以发现, 元素B对应的两个key位出现映射冲突,即恰好都是1,所以布隆过滤器会认为元素B存在于集合中,
但实际上B并不在集合里,这即是布隆过滤器误识别率的体现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。