腾讯面试官是这样问布隆过滤器的
Posted Python数据科学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯面试官是这样问布隆过滤器的相关的知识,希望对你有一定的参考价值。
重磅干货,第一时间送达
# 何为布隆过滤器
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
还是以上面的例子为例:
判断逻辑
多次哈希
# Guava的BloomFilter
# 创建BloomFilter
public static <T> BloomFilter<T> create(Funnel<? super T> funnel, int expectedInsertions, double fpp);
public static <T> BloomFilter<T> create(Funnel<? super T> funnel, long expectedInsertions, double fpp);
public static <T> BloomFilter<T> create(Funnel<? super T> funnel, int expectedInsertions);
public static <T> BloomFilter<T> create(Funnel<? super T> funnel, long expectedInsertions);
最终还是调用:
static <T> BloomFilter<T> create(Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy);
// 参数含义:
// funnel 指定布隆过滤器中存的是什么类型的数据,有:IntegerFunnel,LongFunnel,StringCharsetFunnel。
// expectedInsertions 预期需要存储的数据量
// fpp 误判率,默认是0.03。
static long optimalNumOfBits(long n, double p) {
if (p == 0) {
p = Double.MIN_VALUE;
}
return (long) (-n * Math.log(p) / (Math.log(2) * Math.log(2)));
}
# 使用:
# 算法特点
# 使用场景
推荐阅读
以上是关于腾讯面试官是这样问布隆过滤器的的主要内容,如果未能解决你的问题,请参考以下文章