bloom filter与Cuckoo Filter
1. bloom filter
算法是: 创建一个m位BitSet,先将所有位初始化为0,然后选择k个不同的哈希函数。第i个哈希函数对字符串str哈希的结果记为h(i,str),且h(i,str)的范围是0到m-1 。
(1) 加入字符串过程
下面是每个字符串处理的过程,首先是将字符串str“记录”到BitSet中的过程:
对于字符串str,分别计算h(1,str),h(2,str)…… h(k,str)。然后将BitSet的第h(1,str)、h(2,str)…… h(k,str)位设为1。

图1.Bloom Filter加入字符串过程
这样就将字符串str映射到BitSet中的k个二进制位了。
(2) 检查字符串是否存在的过程
下面是检查字符串str是否被BitSet记录过的过程:
对于字符串str,分别计算h(1,str),h(2,str)…… h(k,str)。然后检查BitSet的第h(1,str)、h(2,str)…… h(k,str)位是否为1,若其中任何一位不为1则可以判定str一定没有被记录过。若全部位都是1,则“认为”字符串str存在。
若一个字符串对应的Bit不全为1,则可以肯定该字符串一定没有被Bloom Filter记录过。(这是显然的,因为字符串被记录过,其对应的二进制位肯定全部被设为1了)

本文详细介绍了Bloom Filter的工作原理,包括插入和检查字符串存在的过程,以及False Positive的概念。此外,还讨论了Bloom Filter的参数选择,如哈希函数的选择和位数组大小的确定。接着,提到了Counting Bloom Filter,它是Bloom Filter的一种变体,支持删除操作。最后,文章引入了Cuckoo Filter,一种结合了删除操作和高空间效率的过滤器,并解释了其基于Cuckoo Hashing的碰撞解决机制。
最低0.47元/天 解锁文章
757

被折叠的 条评论
为什么被折叠?



