惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
S
Securelist
P
Privacy & Cybersecurity Law Blog
Scott Helme
Scott Helme
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
L
LINUX DO - 热门话题
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
量子位
博客园 - Franky
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
T
Troy Hunt's Blog
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
小众软件
小众软件
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Check Point Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
L
Lohrmann on Cybersecurity
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Microsoft Security Blog
Microsoft Security Blog
T
Tailwind CSS Blog
博客园_首页
云风的 BLOG
云风的 BLOG
V
Vulnerabilities – Threatpost
D
DataBreaches.Net
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
罗磊的独立博客
Engineering at Meta
Engineering at Meta
Forbes - Security
Forbes - Security
T
Tenable Blog

See you soon

试试将文章版本化管理吧 | See you soon 使用 Quadlet 将 Podman 中的 Postgres 当作 systemd 服务运行 | See you soon 大他者,那个无时无刻都在盯着你的东西 | See you soon Laws of Software Engineering,软件工程定律 | See you soon 浅记多因素身份认证 | See you soon Linux 内核中的度量单位 | See you soon 重置 GPG 智能密钥 | See you soon 向 NAS 引入 samba | See you soon 无法重复键入的 Fcitx5 | See you soon ZFS 降级事故 | See you soon 记被 XanMod Kernel 和 AppArmor 联合坑的一次踩坑 | See you soon agent 的 skill 与 toolcall | See you soon 记一次服务器被挂恶意挖矿二进制 | See you soon 活着的 Arc | See you soon 令 acme.sh 使用 Cloudflare 的 DNS API 签发与续签证书 | See you soon 于 Tokio 中卸载 CPU Bound 任务 | See you soon 如我所见,梦破碎的时候 | See you soon 74LS 家族手册 | See you soon JDK Projects 备忘录 | See you soon 关于历史 | See you soon 用 curl 下载 OnePlus 的 ROM | See you soon 实用命令切片 | See you soon 再见,Oh My Zsh。 | See you soon 你不应该复用 strings.Builder | See you soon 博客的明日 | See you soon 被 AppArmor 击杀的 Dockge | See you soon AI 时代的自我 | See you soon 基于栈的虚拟机与基于寄存器的虚拟机 | See you soon RVA23 包含了什么 | See you soon Rust 的边界检查是否已经有很大的进步 | See you soon 使用 Rust 编写操作系统:Barebones | See you soon 使用 Rust 编写操作系统:引言 | See you soon 编译器笔记:rope | See you soon 编译器笔记:CST | See you soon Paradoxical 札记 | See you soon 简单的相似去重算法(基于向量) | See you soon 更加现代的 PaperMC Minecraft 插件设计指南 | See you soon 简单的 CFG 语法分析方法 | See you soon 简单地使用 Caddy 实现 CORS 配置 | See you soon 让 OpenCV 可以被静态链接 | See you soon 图片搜索笔笺 | See you soon 电路板设计笔记-保护 | See you soon 使用 Rust 实现 SnowflakeId | See you soon 农夫乐事 FaQ 启示 | See you soon 使用 Rust 实现拓展系统札记 | See you soon 遗传学定律的代码实现 | See you soon EN:The Journey of Rust and Procps | See you soon ZH:Rust 与 Procps 之旅 | See you soon 使用 debootstrap 与 schroot 构建一个纯净环境 | See you soon GPG添加新的用户信息 | See you soon GSoC2024 笔记:使用 Rust 重新实现 procps | See you soon JWT 小册 | See you soon 使用密钥登录 SSH | See you soon Guava:Cache | See you soon 编译器笔记:增量编译 | See you soon Gradle秘境:添加一个类似modCompileOnly的依赖块 | See you soon Minecraft:原始经济系统设计简述 | See you soon TinyRemapper笔记 | See you soon MicroOS:进阶 | See you soon MicroOS:起步 | See you soon Swapfile 指北 | See you soon GPG 物理密钥的安装与密钥的迁移 | See you soon 用GPG签名告诉大家这就是我的提交 | See you soon DFS:深度优先搜索 | See you soon 文章翻译:从init.vim到init.lua | See you soon 目录遍历攻击 | See you soon 如何挂载.img文件,以及如何使用QEMU模拟arm64环境 | See you soon 在树莓派上编译 OpenCV | See you soon 关于卸载BlueStacks后遇到的问题 | See you soon
支持删除的布隆过滤器 | See you soon
Krysztal Huang · 2025-07-29 · via See you soon

支持删除的布隆过滤器

一般情况下布隆过滤器只能填入不能删除,有些特别的需求比如支持读写删的系统就会需要支持删除的布隆过滤器

原始布隆过滤器

我们先看看原始的布隆过滤器是个怎么回事

前提假设

原始的布隆过滤器有几个很重要的点,其实是个非常简单的东西

  • 一个哈希函数:
    • 注意,该哈希函数最好稳定不需要种子,摘要哈希最好。
  • 一个可以被位操作的数据类型 (也可以叫做向量?毕竟实际上是由一个十分长的位组成的东西)
  • 一个统计有多少位相同的算法:

原始的布隆过滤器使用多个位来作为其内部数据表示,我们这里使用 u8 作为 的实际类型

我们使用上文的 函数来对输入 做如下处理

则我们同样得到了一个类型为u8 的 ,其内容为 0000_0001

判断是否存在

在得到哈希结果后,我们利用这个结果来进行判断

我们使用的数据类型总共有 8 位,其中相等的位数为 7 位,并不完全相等,那么我们可以认为这个元素肯定不存在

写入数据

我们将这个数组写入到这个我们的过滤器里,这样我们的过滤器里的内容就变成了如下内容

  • 假如有新的数据,我们就继续按照判断是否存在来判断是否存在于过滤器中
  • 如果需要写入数据,我们就按照上文来写入数据

假阳性(False Positive)与误判率

假阳性(误判)

考虑到一种情况,我们的布隆过滤器满了

这个时候无论对什么数据进行哈希,得到的结果都会被布隆过滤器判定为存在。那么这里就产生了很重要的问题:误判

误判率

我们做如下假设

  • 布隆过滤器的总位数为
  • 函数 产生的结果为
  • 的位数为

则在插入时布隆过滤器中的某一个特定的位没有被操作的概率是

在完全插入 后某一位仍然为 0 的概率为

在执行了 次插入后,某一位仍然为 0 的概率就为

那么很容易得出,某一位为 1 的概率是

我们假设过滤器中所有位均被设置为 1,那么认为某一个原本不应该在集合中的元素却被误判的概率则为

则我们得到的误判率计算公式为 。对于该公式,我们假设 趋近于无限,则我们可以进行进一步的处理:令 ,我们对 进行极限,根据极限的定义我们可以得到如下的结果

什么?忘了指数函数的极限了?

简单回忆一下一般形式的指数函数的极限:

那么我们可以得到其误判率大概为