目录
一、定义
以下定义来自百度百科:
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系
列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和
查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
从上述定义我们可以得到以下关键信息:
- 布隆过滤器是由很长的二进制向量(即可以理解成很长的0、1数组)与一系列随机映射函数(Hash函数)构成。
- 布隆过滤器的作用是检索一个元素是否存在我们的集合之中。
- 优点是空间效率和查询时间都比一般的算法要好的多;缺点是有一定的误识别率和删除困难。
注意!接下来的原理我们都会基于定义来逐句解释和讲解布隆过滤器,请大家记住上述三点关键
信息。
二、原理
1. 布隆过滤器的数据结构
我们从定义总结的关键信息可知:布隆过滤器是由很长的二进制向量(即可以理解成很长的0、1
数组)与一系列随机映射函数(Hash函数)构成。因此我们可以将布隆过滤器理解成下图这种很
长的一个二进制数组:
正是由于布隆过滤器的数据结构仅需要存储“0”或“1”,因此所占用内存极少,这也是布隆过滤器的
一大优点。
2. 检索和插入原理
从上图布隆过滤器的数据结构图和定义的关键信息我们可以知道:布隆过滤器实际上是个很长的
二进制数组,作用是检索一个元素是否存在我们的集合之中。那么布隆过滤器是如何通过上述数
据结构判断一个元素是否存在我们的集合之中的呢?
这里就需要用到我们定义中提到的“一系列随机映射函数(Hash函数)”了。
首先我们需要知道什么是Hash函数?这里我们给出Hash函数的一个简要的说明:
简单来说Hash函数就是把输入值通过