布隆过滤器

✍ dations ◷ 2025-11-24 03:13:20 #函数,散列

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

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

相关

  • 随笔集《随笔集》(法语:Les Essais)是法国哲学家蒙田的107篇随笔的文集,1580年出版,书名也译作试笔集、随想录。全书共107篇,以短文的形式谈论特定的话题,并引用古希腊、罗马的文学补强,开
  • 郑成功郑成功(1624年8月27日-1662年6月23日),原名森,字明俨、大木,幼名福松,为南明政权的重要将领。南明绍宗隆武帝赐明朝国姓朱,赐名成功,世称“国姓爷”(荷兰语:Koxinga),或郑赐姓、郑国姓、
  • 沃尔夫冈·潘诺夫斯基沃尔夫冈·库尔特·赫尔曼·帕诺夫斯基(德语:Wolfgang Kurt Hermann Panofsky,1919年4月24日-2007年9月24日),德国-美国物理学家。
  • 脑部受损脑损伤(Brain damage)或脑部受伤(brain injury,简称BI)是指人脑细胞的受损或是退化。脑损伤可能因为一些内在或是外在的因素所造成。一般而言,会用“脑损伤”来表达一般明显的,因为
  • 沪尾湖南勇古墓沪尾湖南勇古墓为六座台湾清领时期隶属于孙开华麾下的“擢胜左营”兵勇的坟墓,这六位兵勇的祖籍为湖南善化和永定人,约在光绪七年(1881年)8月至11月间死亡,死亡原因不名,由于埋葬
  • 洛杉矶FC洛杉矶足球俱乐部(英语:Los Angeles Football Club),通常称为LAFC,是一支位于美国加利福尼亚州洛杉矶的MLS足球队,分属于西部联盟,主场为加州银行体育场。本队和洛杉矶银河共享洛杉
  • 杰克·克鲁亚克杰克·凯鲁亚克(英语:Jack Kerouac,1922年3月12日-1969年10月21日),美国小说家、作家、艺术家与诗人,也是垮掉的一代中最有名的作家之一,与艾伦·金斯堡(Allen Ginsberg)、威廉·柏洛
  • 类数公式在数论中,类数公式涉及了许多重要的不变量,是数域到其特殊的戴德金zeta函数赋值。数域 有扩张=rrKK戴德金zeta函数记为: ζ
  • 孙洙孙洙(1711年-1778年),字临西,一字苓西,别号蘅塘退士,清朝文人、政治人物。江苏无锡县(今无锡市)人。乾隆辛未进士,官直隶、山东知县。著名的《唐诗三百首》一书是其选编。家贫,隆冬读书
  • 空中编程空中编程(英语:Over-the-air programming,缩写OTA)是一种为设备分发新软件、配置,乃至更新加密密钥(英语:Over the Air Rekeying)(为例如移动电话、数字视频转换盒或安全语音通信(英语