什么是布隆过滤器
布隆过滤器由位图和多个哈希函数构成,解决类似黑名单问题。必定会存在误差率
原理
对字符串作哈希,得到多个哈希值,再将每个哈希值对位图大小m取余,得到索引位置标志为1。
如果一个字符串得到的所有哈希值对m取余后都命中1,则该字符串被命中。只要有一个命中0,则不算该字符串命中。
解析
- 误差率p:一个不属于黑名单中的数据命中了黑名单(宁错杀,不放过)
- 样本量n:实验的样本大小
- 哈希函数个数k:实验需要的哈希函数数量
公式
- 样本量固定,确定误差率,可以确定m的小
m越大,哈希值对m取余后分布越散列,即命中的概率越小,失误率就低;反之亦然。
- m的大小为2,对m取余后只有0、1两个结果,命中几率就大,误差率就大
- m的大小为10,对m取余后有0~9是个结果,命中几率小,误差率小
- 确定m大小,样本量大小,得到哈希个数
误差率随着哈希函数个数增加,先是下降到一定值又上升
- k为1时,如果哈希冲突就命中,则误差率大
- k为10亿时,哈希函数过多造成位图全部覆盖,此时必命中,误差率变大
- 位图大小和哈希函数个数确定,可以算出真正的误差率