算法实现
符号说明
| Symbol | Desc |
|---|---|
| BF大小 | |
| BF中元素个数 | |
| BF中哈希函数个数 | |
| 自定义的k | |
| 一个集合 | |
| 一个集合里面的元素 | |
| 一个集合里面的元素 | |
| s 的 第 i 个哈希值 | |
| 误判 | |
| 误判率 | |
| BF的误判比例 | |
| 添加所有 n 个元素后 某个比特为0的概率 | |
| 标准BF实现 | |
| 独立BF,对于每个集合单独创建一个BF | |
| Shifting BF | |
| 用于成员查询的ShBF | |
| 用于关系查询的ShBF | |
| 用于计数查询的ShBF | |
| 每秒查询数量 | |
| multi-set | 允许重复的集合 |
| 偏移量 | |
| 机器字长 | |
| 最大偏移量 | |
| 某个元素最大出现次数 |
构建阶段
构建分为三步
- 构建 个独立均匀分布的哈希函数,包含 个比特的数组
- 冲集合 中读取 元素 ,
- 使用前 个哈希函数计算并存储存在信息:
- 使用第 个哈希函数计算偏移信息:
- 将偏移信息 设为1

如何选择合适的
我们需要一个合适的 让我们可以同时处理 以及 。
注意,像x86平台的CPU可以从任何字节访问数据,不需要对其,也不需要在同一个 WORD 中
比如说, 是某字节的第 个元素,为了同时访问,我们需要保证 能被一次访问,即 ,j最大为时 的最大值最小为 ,那么
大概长这样
