# 💡 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是否是恶意网站