# 💡 Summary
**布隆过滤器**:快速判断数据是否存在。
1. **如果说"不存在",100%正确** ``` Bloom Filter说没见过 → 肯定没见过 ✓ ```
2. **如果说"存在",可能错误(假阳性)** ``` Bloom Filter说见过 → 可能见过,也可能没见过 ⚠️
实例:
```Java
初始状态(都是0):
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
添加"apple":
- hash1(apple) = 3 → 位置3设为1
- hash2(apple) = 7 → 位置7设为1
- hash3(apple) = 12 → 位置12设为1
结果:
[0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0]
↑ ↑ ↑
查询"apple":
- 检查位置3、7、12是否都是1?
- 是 → 可能存在
- 否 → 肯定不存在
```
## 使用场景
**✅ 适合:**
- 需要判断**完全相同**的元素
- 内存紧张(几个GB的数据 → 几十MB)
- 可以容忍少量误判
- 不需要删除元素
**❌ 不适合:**
- 需要100%准确(用Set)
- 需要判断**相似性**(用MinHash)
- 需要删除元素(用Counting Bloom Filter变种)
- 需要知道元素具体信息(Bloom Filter只能判断存在性)
---
**总结一句话:**
- **Bloom Filter** = 快速回答"这个见过吗?"(完全匹配)
- **MinHash** = 快速回答"这两个像吗?"(相似度)
- **MMR** = 从一堆结果中"挑选又好又不重样的"(排序选择)
三者解决不同问题,但都用于高效处理大规模数据!🎯
# 🧩 Cues
# 🪞Notes
## 使用场景
### 2. **数据库查询优化**
- 先用Bloom Filter判断数据是否存在
- 不存在 → 直接返回,不用查数据库
- 可能存在 → 再查数据库确认
### 3. **垃圾邮件过滤**
- 已知垃圾邮件地址存入Bloom Filter
- 新邮件来了 → 快速判断是否在黑名单
### 4. **区块链(比特币)**
- 快速判断交易是否已处理过
### 5. **Chrome浏览器**
- 判断URL是否是恶意网站