布隆过滤器

✍ dations ◷ 2025-04-12 08:59:30 #函数,散列

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

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

相关

  • HBrOsub4/sub高溴酸,或称过溴酸,化学式为HBrO4,是溴的含氧酸之一,其中溴的氧化态为+7。与高氯酸和高碘酸不同,高溴酸不稳定,不能通过溴酸盐热分解反应或卤素间的置换反应制备。首次制得利用的
  • 花椒等。Fagara L. Ochroxylum Schreb. Xanthoxylum Mill.花椒,又称秦椒、川椒或山椒,指的是芸香科花椒属(学名:Zanthoxylum)的灌木或乔木以及其果实。《神农本草经》中记载:“始产于
  • 跳台滑雪跳台滑雪在1924年奥运会成为正式比赛项目。维基共享资源中与冬季奥林匹克运动会跳台滑雪比赛相关的分类
  • CSesub2/sub二硒化碳(化学式:CSe2),是一种黄色且有刺激性气味的液体。和二氧化碳、二硫化碳一样,二硒化碳也被认为是一种无机化合物。二硒化碳首次是由硒化氢与四氯化碳反应后发现的。二硒化
  • 蜜熊蜜熊(Potos flavus)是生活在雨林中的一种浣熊科,蜜熊属下的唯一种。它们原住于中美洲及南美洲,非常罕有。蜜熊重2-3公斤,体长43-56厘米,尾巴长40-56厘米。它们的外毛皮呈金色,底毛
  • 王崇简王崇简(1602年12月10日-1678年12月30曰),字敬哉,一作敬斋,明末清初宛平(今属北京市)人。早年加入复社,喜郊游,工山水画,师法米芾。崇祯十六年(1643年)中癸未科进士,未及授官,李自成陷北京。
  • 活性系数活性系数(英语:Activity coefficient),又称活性因子(英语:Activity factor),是热力学中的一个系数,反映的是真实溶液中某组分i的行为偏离理想溶液的程度,量纲为1。引入活性系数后,适用
  • 咄陆咄陆(保加利亚语:Дуло)是早期匈人-保加尔人的王族。是老大保加利亚建国者一家的氏族。这氏族在保加尔王族系谱中最早祖先是匈人阿提拉(有人说咄陆出自匈奴屠各),但这氏族也与
  • B'z LIVE-GYM 2019 -Whole Lotta NEW LOVE-《B'z LIVE-GYM 2019 -Whole Lotta NEW LOVE-》是日本音乐组合B'z的影像作品。以DVD和Blu-ray Disc形式发售。自举行于截至2019年6月8日起至9月10日止的巡回演唱会‘B'z LIV
  • 台湾水韭台湾水韭(学名:),是水韭属的一种草本植物,叶长7至24公分。台湾水韭是在1971年由徐国士及张惠珠首次发现。台湾只有此种水韭,分布于阳明山国家公园的梦幻湖,这是全球六十多种的水韭