布隆过滤器

布隆过滤器

布隆过滤器(Bloom Filter)是由布隆( Burton Howard Bloom)在1970年提出的算法:是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的,所以不会漏报)。

算法流程

如果我们要映射一个值到布隆过滤器中,我们可以使用多个不同的哈希函数生成多个哈希值,并对每个生成的哈希值指向的 bit 位置 1:

当查询某一个值是否存在集合中的是否,则同样经过相同次数的哈希运算,若映射到的每个bit位都为1,那么说明该元素有可能属于该集合,否则则说明该元素一定不属于该集合。

误差率表

m表示过滤器的bit位数,n为总的输入数据量,k为哈希函数的个数,那么判断一条不存在的数据却返回存在结果的误差率p为:

p=(1enkm)k

下面是m/n和k的值对p的影响统计表:

posted @   HachikoT  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示