Perfect Hashing VS. Bloom Filter

转载地址:https://blog.csdn.net/jiaomeng/article/details/1519383

Perfect Hashing VS. Bloom Filter

Network Applications of Bloom Filters: A Survey一文中,作者提到了一种基于Perfect hashing的方法,它在维持同样错误率的情况下比Bloom Filter占用更少的空间。但是这种方法只能使用在静态集合上,一旦集合发生变化,就需要进行重新计算。

假设我们要表示的静态集合X有n个元素,我们针对它可以找到一个perfect hash function,记作hx : [1…u] → [1…n]。所谓perfect hash function,即它针对不同的key能产生不同的hash value,也就是说没有collision。如果针对不同的key产生不同的hash value,且hash value分布在连续的整数区间内,则称之为minimal perfect hash function,或者minimal perfect hashing。所以上面提到的函数hx严格来说是一个minimal perfect hash function。

有了hx,我们就可以将X映射到n个连续的格子(bucket)中,每个元素对应其中一个格子。下面我们还需要另一个hash function,它针对每个元素完全随机地生成j位长的hash value,然后将hash value作为这个元素的fingerprint存储在对应的格子里。记这个函数为φ: [1…u] → [0…2j-1]。

有了hx和φ,我们就可以分两步将X映射到一个m = n .j位的内存中,且查找的错误率为1/2j,因为只有在j位fingerprint完全吻合的情况下才会出现false positive。在Bloom Filter概念和原理一文中,我们提到过Bloom Filter的错误率为(1/2)k ≥ (1/2)mln2/n。因此当m = n .j时,Bloom Filter的错误率为(0.6185)j,高于这种基于perfect hashing的方法。如果Bloom Filter要保持1/2j的错误率,必须有m = n .j / ln2,因此所占空间是基于perfect hashing方法的1 / ln2倍。

这种方法看起来很诱人,可惜只能用在静态集合上。在一些本身就具有静态集合特征的应用场合下,比如某种程序设计语言的关键字,或者某张光盘里的文件目录,它可以作为一种节省空间的方法得以应用。后续的文章中还会介绍一种d-left counting bloom filter,它借鉴了这种基于perfect hashing的方法,在保留counting bloom filter功能的前提下比它节省了大约一半空间。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值