布隆过滤器

✍ dations ◷ 2025-07-19 06:57:44 #函数,散列

布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢,上述三种结构的检索时间复杂度分别为 O ( n ) , O ( log n ) , O ( 1 ) {\displaystyle O(n),O(\log n),O(1)}

布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在。这就是布隆过滤器的基本思想。

相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数( O ( k ) {\displaystyle O(k)} )。另外,散列函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。

布隆过滤器可以表示全集,其它任何数据结构都不能;

k {\displaystyle k} m {\displaystyle m} 相同,使用同一组散列函数的两个布隆过滤器的交并运算可以使用位操作进行。

但是布隆过滤器的缺点和优点一样明显。误算率是其中之一。随着存入的元素数量增加,误算率随之增加。但是如果元素数量太少,则使用散列表足矣。

另外,一般情况下不能从布隆过滤器中删除元素。我们很容易想到把位数组变成整数数组,每插入一个元素相应的计数器加1, 这样删除元素时将计数器减掉就可以了。然而要保证安全地删除元素并非如此简单。首先我们必须保证删除的元素的确在布隆过滤器里面。这一点单凭这个过滤器是无法保证的。另外计数器回绕也会造成问题。

在降低误算率方面,有不少工作,使得出现了很多布隆过滤器的变种。

相关

  • 蛋白质复合体蛋白质复合体(英语:protein complex)是有两个以上功能相关的多肽链通过二硫键或其它蛋白质相互作用所形成的复合物。蛋白质复合体的种类繁多,许多种的性质与功能都还不为人所知,
  • 鼓波街代天宫高雄代天宫,俗称哈玛星代天宫、 哈玛星代天府、哈玛星大庙,址在高雄市鼓山区鼓波街27号,前身为日治台湾高雄第一个市府所在地,其建筑雄伟庄严,内部雕梁画栋,出自名匠潘丽水大师精
  • 花烟草花烟草(Nicotiana × sanderi)为茄科烟草属下的一个园艺杂交种,亲本为翼柄烟草和红花烟草。
  • 张志东张志东(英语:Tony Zhang,1972年-),汉族,广东东莞人,为腾讯创办人之一,曾经为腾讯执行董事和首席技术官,负责专有技术开发,包括即时通信平台以及网上应用系统。张志东于1993年取得了深圳
  • 爱情破坏球《爱情破坏球》(英语:Wrecking Ball)是收录于麦莉·希拉专辑《青春大爆炸》的一首歌曲。《爱情破坏球》表现出感情的残酷与赤裸,描述热爱男友的少女被冷淡对待的心情犹如被大铁
  • 黄德濂黄德濂(1786年-1849年),字劭怀,号惺溪、一都。湖南省长沙府安化县(今属益阳市)龙塘人,清朝政治人物、翰林。嘉庆十八年(1813年)举人。嘉庆二十二年(1817年)丁丑科第三甲第四十七名同进士
  • 尼泊尔共产党(团结中心-火炬)尼泊尔共产党(团结中心-火炬)(尼泊尔语:नेपाल कम्युनिष्ट पार्टी (एकताकेन्द्र–मसाल))是尼泊尔的一个已不存在的共产主义政党。该党成立于2
  • 淳于衍淳于衍(?-?年)字少夫,为汉朝时期的宫廷女医,是中国最早有文献纪录的女性专职妇产科医师之一。本始三年(公元前71年),汉宣帝的皇后许平君怀孕,在即将要分娩时得病,女医淳于衍颇得大将军霍
  • 蒙毅蒙毅(约前245年-前210年),为秦朝大臣蒙恬之弟,主掌刑罚及监察朝臣。蒙毅是秦始皇的上卿,在始皇帝晚年,他是最被信任的大臣之一。出行做秦始皇的参乘,入则在皇帝的御前。早年赵高触法
  • 列表 (抽象数据类型)在计算机科学中,列表(英语:list)或序列(sequence),是一种抽象数据类型,一种有限的有序值的集合,其中每个值可以出现多次。列表的一个实例是在计算机中用来表现出数学上有限序列的概念