C语言手撕布隆过滤器

编程探索课程 2024-07-05 08:11:36

布隆过滤器(Bloom Filter)是一种空间效率高的概率数据结构,用于测试一个元素是否属于一个集合。它可以告诉你一个元素“可能在集合中”或“肯定不在集合中”。布隆过滤器的主要优点是空间效率高,但它的缺点是有一定的误判率。

demo 图示

工作原理

布隆过滤器由一个位数组和多个哈希函数组成。位数组初始化为0,哈希函数将输入元素映射到位数组的不同位置。

search url

1. 插入元素

当一个元素被插入到布隆过滤器中时,它会被多个哈希函数处理,每个哈希函数都会生成一个索引。然后将位数组中对应索引的位置设置为1。

2. 查询元素

当查询一个元素是否在布隆过滤器中时,它会被同样的多个哈希函数处理,生成多个索引。如果位数组中所有对应索引的位置都为1,则元素“可能在集合中”;如果任何一个索引位置为0,则元素“肯定不在集合中”。

查找策略 redis

误判率

布隆过滤器的误判率(False Positive Rate)是指一个不在集合中的元素被错误地判断为在集合中的概率。误判率取决于位数组的大小、哈希函数的数量和插入元素的数量。

优缺点优点:空间效率高:布隆过滤器使用位数组存储信息,空间占用远小于其他数据结构。查询时间快:查询操作只需要计算哈希函数并检查位数组,时间复杂度为O(k),其中k是哈希函数的数量。缺点:误判率:存在一定的误判率,即可能将不在集合中的元素判断为在集合中。不支持删除:布隆过滤器不支持删除操作,因为删除一个元素会影响其他元素的判断。source code

nice code

result 如下:

代码测试结果

未完待续,喜欢的点个关注 谢谢。

创作不易 点个关注 谢谢

0 阅读:10

编程探索课程

简介:感谢大家的关注