布隆过滤器

偶尔善良 提交于 2020-02-05 10:39:50

1、使用场景

布隆过滤器用于检查元素是否存在在集合中,比list、set、dict占用空间更少。当以上类型的集合特别大时,以至于无法加载进内存时,布隆过滤器则显得更加有用。天下没有免费的午餐,布隆过滤器是一种概率数据结构,存在一定误报。

2、实现原理

布隆过滤器由以下几个部分组成:

  1. nn个位组成的数组,每个位的初始值都为00
  2. 一系列哈希函数h1,h2...hkh_1,h_2...h_k组成的集合。每个哈希函数都将“键”值映射到上述的nn个桶中(对应于位数组中的nn个位)。
  3. mm个键值组成的集合SS

假设我们将布隆过滤器应用于流数据,我们的目的是让所有键值在SS中的元素通过,而阻挡不在SS中的元素。
位数组的所有初始位为00,对于SS中的每个键值KK,利用哈希函数进行处理,得到一个哈希值序列h1(K),h2(K)...hk(K)h_1(K),h_2(K)...h_k(K),将这个序列对应的位数组位全部设置为11.
当一个新的元素键L过来时,先计算出哈希值序列h1(L),h2(L)...hk(L)h_1(L),h_2(L)...h_k(L),在位数组对应的位全部为11时通过,否则拒绝。
由于存在序列值全为1,而不在集合中,故布隆过滤器存在一定误报。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!