布隆过滤器

✍ dations ◷ 2025-11-20 06:19:34 #函数,散列

布隆过滤器(英语: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, 这样删除元素时将计数器减掉就可以了。然而要保证安全地删除元素并非如此简单。首先我们必须保证删除的元素的确在布隆过滤器里面。这一点单凭这个过滤器是无法保证的。另外计数器回绕也会造成问题。

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

相关

  • 坎特伯雷的圣奥古斯丁坎特伯里的奥斯定(英语:St. Augustine of Canterbury,俗译圣奥古斯丁,?-604年5月26日)是本笃会的修士和天主教会第一位坎特伯里大主教。597年,奥斯定等人奉教皇大额我略一世之命,往英
  • 弹状病毒科水泡病毒属 Vesiculovirus 丽沙病毒属 Lyssavirus 短时热病毒属 Ephemerovirus 胞内水稻黄矮炮弹病毒属 Cytorhabdovirus 核内水稻黄矮炮弹病毒 Nucleorhabdovirus 粒外弹状
  • 定义谬误定义谬误是泛指一系列因定义不当造成的推理问题。探讨定义,尤其是词法定义时,必须考虑其是否恰当。恰当的词法定义,其被定义项与定义项必须等值,如有东西符合定义项却不符合被定
  • 哈菲兹哈菲兹(本名沙姆斯丁·穆罕默德,波斯语:اجه شمس‌الدین محمد حافظ شیرازی‎,约1315年-约1390年),为最有名的波斯抒情诗人,常被誉为“诗人的诗人”。据统计
  • 线路表本列表列出所有于中国广东省深圳市境内营运的公共汽车线路,以及所有深圳与东莞、惠州之间的城际公交线路。关于表格中“运营商”栏内容及“编号”栏配色的说明如下:
  • 伊斯兰司法局局长马来西亚回教司法局(马来语:Jabatan Kehakiman Syariah Malaysia,缩写:JKSM)是马来西亚联邦政府机构,负责协调马来西亚回教法院和回教司法机构的行政事务。该机构由马来西亚首席回
  • 基因作图基因作图(英文gene mapping)是一种遗传学作图,用来定位染色体中特定的DNA片段。是基因组研究的成果之一,主要分为以重组率为定位依据的遗传舆图,以及以DNA片段实际位置为依据的物
  • 矮雷氏鲶矮雷氏鲶,为辐鳍鱼纲鲶形目鼬鲶科的其中一种,为热带淡水鱼,分布于南美洲委内瑞拉淡水流域,体长可达10.7公分,栖息在底层水域,生活习性不明。 维基物种中有关矮雷氏鲶的数据
  • 姜仙祐姜仙祐(朝鲜语:강선우/姜仙祐 ,1978年6月2日-),大韩民国自由派政治人物,第21届国会议员。
  • 硫代硫酸铵硫代硫酸铵,分子式为(NH4)2S2O3,是硫代硫酸盐的一种。一种有强烈吸湿性的白色斜方结晶,加热至150℃会分解成亚硫酸铵、硫黄、氨、硫化氢及水。极易溶于水,不溶于醇和醚,微溶于丙