基于Golang的布隆过滤器
布隆过滤器:
是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。布隆过滤器解决了快速的检索一个元素是否在一个较大的元素列表之中的问题,通常用于缓存穿透,爬虫的爬取链接去重以及推荐历史去重
具体流程:
对于各种对象(可以是任意数据类型),通过n个hash函数将其映射在bit数组的n个位置,当判断某个对象是否在布隆过滤器中时,就将其映射并判断这些位置是否为1,因为存在映射到同一个位置这种情况,故存在误识别,本来它不在过滤器中,识别它在过滤器中,另外无法通过将这些位置1置为0这种方式来删除对象,因为这些位置可能是被其他对象映射的
布隆过滤器的false positive计算:
误识别率fpp的关键参数:
m
表示bit数组的长度
k
表示散列函数的个数
n
表示插入的元素个数
其公式:
基于Golang的具体编码实现:
https://github.com/ZiHengLee/go-bloomfilter
本文来自博客园,作者:LeeJuly,转载请注明原文链接:https://www.cnblogs.com/peterleee/p/14628622.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义