本文内容
- 用处、特点、应用场景
- 原理
- 优缺点
- 改善
用处:测试一个元素是否在集合中
特点:
- 常量级别空间、时间复杂度
- 能告诉你某个元素 一定不存在 或 可能存在 于集合
应用场景:
- 网络爬虫去除重复URL,一定未访问过的URL
- 垃圾邮件地址
- 缓存穿透,将可能存在的数据放入,过滤掉不存在数据
原理:
多哈希函数的映射,一个很长的二进制位表+多个哈希函数
- 初始时位表全为0
- 添加:多个哈希函数计算多个位置,将对应位置上位表置1
- 查询:多个哈希函数计算多个位置,如果有一个位置为0,则元素肯定不存在,全为1,则可能存在
优点:
- 常量级别的时间、空间复杂度
- 不保存元素内容,安全
- 哈希函数间独立,方便硬件并行执行
缺点:
- 有一定概率误判
- 删除困难
改善
基于想达到的误判率p、估计的元素数目n,按照公式计算长度m,哈希函数个数k
学习自
https://cloud.tencent.com/developer/article/1456844
https://zhuanlan.zhihu.com/p/43263751