bit map、hash map与布隆过滤器所占据的空间

以垃圾邮件过滤中黑白名单为例:现有1亿个email的黑名单,每个都拥有8 bytes的指纹信息,则可能的元素范围为  clip_image002 ,对于bit array来说是根本不可能的范围,而且元素的数量(即email列表)为 clip_image002[6],相比于元素范围过于稀疏,而且还没有考虑到哈希表中的collision问题。

 备注:每个email拥有8bytes的指纹信息,所以每个email拥有64位的指针信息。所以可能有2^64个不同的指纹信息。为了标记不同的指纹信息,所以需要2^64个bits,所以需要2^61个bytes,所以需要2^31GB。

若采用哈希表,由于大多数采用open addressing来解决collision,而此时的search时间复杂度为 :

clip_image002[8]

即若哈希表半满(n/m = 1/2),则每次search需要probe 2次,因此在保证效率的情况下哈希表的存储效率最好不超过50%。此时每个元素占8 bytes,总空间为:

clip_image002[10]

备注:对于10^8个元素来说,每个元素的指纹信息都要存储,所以需要8*10^8bytes,又因为空间利用率一般不超过0.5,所以需要16*10^8bytes。所以需要1.6GB。

若采用Perfect hashing(这里可以采用Perfect hashing是因为主要操作是search/query,而并不是add和remove),虽然保证worst-case也只有一次probe,但是空间利用率更低,一般情况下为50%,worst-case时有不到一半的概率为25%。

 

若采用布隆过滤器,取k=8。因为n为1亿,所以总共需要 clip_image002[12] 被置位为1,又因为在保证误判率低且k和m选取合适时,空间利用率为50%(后面会解释),所以总空间为:

clip_image002[14]

所需空间比上述哈希结构小得多,并且误判率在万分之一以下

备注:取k为8,因为n为10^8,所以总共需要8*10^8bits设置为1,又因为要保证空间利用率为0.5,所以空间为2*8*10^8bits=2*10^8bytes =0.2GB。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值