Bloom-Filter , 即布隆过滤器
通常用来检索一个元素是否在一个集合内
布隆过滤器存在失误率 但是不存在误判 : 即结果为不再集合内 一定不在 若结果为在集合内 可能在也可能为失误
此算法的核心思想就是用相对独立的哈希算法对一个位数组进行映射避免发生哈希冲撞 映射到的比特位置为1 使用时多个哈希映射要过滤的元素
1.关于位数组的大小选取与哈希个数
---当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况 下,m至少要等于n*lg(1/E) 才能表示任意n个元素的集合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应 该>=nlg(1/E)*lge ,大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。
改进:
CounterBloom Filter :BloomFilter无法进行删除操作 删除时可能会牵动位的变化 不知道一个位属于那些数据 改进的方法为在BloomFilter上加计数器 天价使增加计数 删除时减少计数
Compressed Bloom Filter:改进针对于在服务器之间更快的传输 主要方法是在完成BloomFilter后根据实际所给的参数进行压缩 将元素全部添加入Bloom Filter后,我们能得到真实的空间使用率,用这个值代入公式计算出一个比m小的值,重新构造Bloom Filter,对原先的哈希值进行求余处理,在误判率不变的情况下,使得其内存大小更合适。