布隆过滤器

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

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

相关

  • EnsemblEnsembl是一项生物信息学研究计划,旨在开发一种能够对真核生物基因组进行自动诠释(automatic annotation)并加以维护的软件。该计划由英国维康基金桑格研究院(英语:Wellcome Trus
  • 双层脂膜磷脂双分子层(英语:lipid bilayer 或phospholipid bilayer)是由两层磷脂分子组成的薄膜。 几乎所有细胞生物的细胞膜和许多病毒的包膜都主要由磷脂双分子层构成,此外,核被膜和
  • 欧洲协调欧洲协调(Concert of Europe),又称为会议制度(Congress System),是1815年至1900年左右出现在欧洲的势力均衡,保护各王国既得利益对抗民族主义和革命浪潮。其创建成员为英国、奥地利
  • 魁北克市魁北克市(法语:Ville de Québec,英语:Quebec City,西阿布那基语(Western Abnaki): Kephek),又称魁北克城或魁城,是一座位于加拿大魁北克南部的城市。市区2016年7月人口为531,902,相较
  • 荚果蕨荚果蕨(学名:Matteuccia struthiopteris)为球子蕨科荚果蕨属下的一个变种。
  • 严如煜严如熤(1759年-1826年),字炳文,一字苏亭,号乐园。湖南溆浦人,清朝官员、地理学家。早年就读岳麓书院,精研天文、兵法。乾隆五十四年(1789年)优贡。乾隆六十年(1795年),参与镇压贵州苗族反
  • 羊桥寨信仰佤族(佤文:Ba Rāog / si viex / Brāog / Vax Ba Rāog / Vāx qux (口语) / Vā (文学语),旧佤文:Praok / Va;中国标准罗马字母:Va)是亚洲的一个跨国民族,主要分布在澜沧江与萨尔温江
  • 精巢睾丸,俗称蛋,是雄性动物生殖器官及生殖腺的一部分。是女性卵巢的同源器官。主要作用是产生精子和分泌雄性激素(主要是睾酮)。睾酮的分泌是由脑垂腺前叶分泌的黄体成长激素所控制
  • 国际主义工人党国际主义工人党(法语:Parti ouvrier internationaliste,缩写为POI)是法国历史上的一个托洛茨基主义政党,在1938年至1939年、1942年至1944年是第四国际的正式支部。建立于1936年6
  • 天主教塞蒂拉瓜斯教区天主教塞蒂拉瓜斯教区(拉丁语:Dioecesis Septemlacunensis;葡萄牙语:Diocese de Sete Lagoas)是巴西一个天主教教区,包括米纳斯吉拉斯州中部共二十二市。属贝洛奥里藏特总教区。教