海量数据面试题总结

#

布隆过滤器

https://blog.csdn.net/v_july_v/article/details/6685894

思想

一个bit array,多个hash函数,命中标记为1

判断是否存在于该元素,若所有hash产生的地址上都是1,则很可能存在;若某个位置为0,则不命中

最优的哈希函数个数

要想保持错误率低,最好让位数组有一半还空着

位数组大小计算

在哈希函数的个数取到最优时,要让错误率不超过є,m至少需要取到最小值的1.44倍

扩展

https://blog.csdn.net/zhaoyunxiang721/article/details/41123007

  • 简单Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中, 不支持 删除操作, 若产出元素 将对应k个位置1 置为0,会影响其他的元素的判断
  • Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作,添加一个元素将对应k个 counter++,删除一个元素将对应k个counter–
  • Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率/ 查询的结果即使不准,得到的是真实值(出现次数)的一个上界,且比较接近

Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。

Java数组长度限制

Java 数组length 用int 表示 (有符号),表示范围 - 2^31 ~ 2^31 , 因此 数组最大长度为2^31

如果觉得有用的话,打赏我吧~