Doris BloomFilter原理
1、Bloom Filter的核心是一个【m】位的bitset和【k】个hash函数。
初始时bitset中所有位的值都设置为0,假设取【m = 10】,【k = 3】,用蓝色表示某位为0,红色表示为1

2、插入数据
插入元素的过程是三步走:
(1)计算k个hash值
(2)将k个hash值对m取模得到k个下标
(3)将bitset中k个下标对应的位设置为1
例:比如向的Bloom Filter插入元素“Alice”。
分别用3个hash函数计算“Alice”的hash值,将hash值对10取模,得到在[0, 10)范围内的r1、r2、r3,
假设计算结果为:
r1 = h1("Alice") % m = 1
r2 = h2("Alice") % m = 3
r3 = h3("Alice") % m = 5
于是将bitset中第1位、第3位和第5位的值置为1

再插入元素“Bob”的过程还是一样的,假设:
r1 = h1("Bob") % m = 8
r2 = h2("Bob") % m = 2
r3 = h3("Bob") % m = 3
那就将bitset中第2位、第3位、第8位的值置为1(值已经为1的第3位不动):
图形化思考的话就是,Bloom Filter运行过程中不断插入新元素,bitset里的0逐渐被翻转成1。
3、查询数据
怎么判断元素“Alice”是否在集合里呢?同样还是三步走:
(1)计算k个hash值
(2)将k个hash值对m取模得到k个下标
(3)检查bitset中k个下标对应的位是否都为1
如果Bloom Filter里有“Alice”,那bitset中相应的k位值显然都为1。问题是即使Bloom Filter里没有“Alice”,
还是可能由于之前插入的元素而导致“Alice”对应的k位值都为1,因此会错误地认为集合里已经有“Alice”了,
这就是Bloom Filter会出错的地方。
【不支持删除】由于bitset里每位都和多个元素有关,将某个为1的位置为0,涉及到这位的元素都会被认为不属于集合,所以Bloom Filter不支持删除操作。

4、复杂度分析
空间复杂度方面:Bloom Filter不会动态增长,运行过程中维护的始终只是m位的bitset,所以空间复杂度只有O(m)。
时间复杂度方面:Bloom Filter的插入与属于操作主要都是在计算k个hash,所以都是O(k)。
参考链接: https://www.jianshu.com/p/8193d7dc8348

Doris BloomFilter原理的更多相关文章
- BloomFilter&python支持
BloomFilter&python支持 BloomFilter 布隆过滤器是一种概率空间高效的数据结构.它与hashmap非常相似,用于检索一个元素是否在一个集合中.它在检索元素是否存在时, ...
- 九章算法:BAT国内班 - 课程大纲
第1章 国内笔试面试风格及准备方法 --- 分享面试经验,通过例题分析国内面试的风格及准备方法 · 1) C/C++部分: 实现 memcpy 函数 STL 中 vector 的实现原理 · 2)概率 ...
- 大数据相关的面试题(摘自网络)hbase,kafka,spark
1.讲讲你做的过的项目, 项目里有哪些难点重点呢? kafkaDirect ES /hive kafka producer 难点值得一提的有两点: 1.rdd中用到外部变量的时候如何处 ...
- 浅谈BloomFilter【上】基本概念和实现原理
在日常生活中.包括在设计计算机软件时,我们常常要推断一个元素是否在一个集合中. 比方在字处理软件中,须要检查一个英语单词是否拼写正确(也就是要推断 它是否在已知的字典中).在 FBI. ...
- 深度剖析各种BloomFilter的原理、改进、应用场景
Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. 一. 实例 为了说明B ...
- BloomFilter 与 Cuckoo Filter
BloomFilter 与 CuckooFilter Bloom Filter 原理 Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个相互独立的H ...
- 【转】Bloom Filter布隆过滤器的概念和原理
转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的 ...
- 布隆过滤器(Bloom Filter)的原理和实现
什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...
- Java位向量的实现原理与巧妙应用
Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...
- BloomFilter(布隆过滤器)
原文链接:http://blog.csdn.net/qq_38646470/article/details/79431659 1.概念: 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保 ...
随机推荐
- golang之异步队列Asynq
Asynq[1]是一个Go实现的分布式任务队列和异步处理库,基于redis,类似Ruby的sidekiq[2]和Python的celery[3].Go生态类似的还有machinery[4]和gowor ...
- ORACLE本地磁盘备份恢复
1.部署新备份磁盘(源和目标) [oracle@cmxdb /ora_bak]$ mkdir -p /oracle/rmanback [oracle@cmxdb /ora_bak]$ chown -R ...
- Astro Zen Blog |一个优雅、极简、强大的博客
介绍 Astro Zen 博客项目 如果你想部署一个自己的静态博客,又不想到处折腾,并且是熟悉的前端技术栈,你可以尝试下:Astro Zen Blog! Astro Zen Blog 是一个使用 As ...
- bluetooth_stack开源蓝牙协议栈源码分析与漏洞挖掘
文章首发地址 https://xz.aliyun.com/t/9205 前言 网上闲逛的时候,发现github有个开源的蓝牙协议栈项目 https://github.com/sj15712795029 ...
- openEuler欧拉安装指定版本的nodejs
1. 安装nodejs dnf -y install nodejs npm config set registry https://registry.npmmirror.com -g npm conf ...
- Tauri2.0-Vue3OS桌面端os平台|tauri2+vite6+arco电脑版OS管理系统
自研tauri2.x+vite6+vue3+arco.design客户端os管理系统Tauri2ViteOS. vue3-tauri2-os原创跨平台Tauri2.0+Vite6+Pinia2+Arc ...
- Dapr-2: 世界是分布式的
第 2 章 世界是分布的 只需要问任何达人:现代的.分布式的系统已经到来,单体应用已经过时. 但是,不仅是达人,渐进的 IT 领袖,企业架构师,以及精明的开发者,在探寻和评估现代分布式应用的时候,也在 ...
- 【前端】【H5 API】Web存储 Web Storage
Web存储 传统的方式是使用document.cookie来进行存储,但是由于其存储空间有限(大约4KB),并且需要复杂的操作来解析,给开发者带来了诸多不便. 为此,HTML 5规范提出了网络存储的相 ...
- springboot 多数据源(aop方式)
一.实现思路 在yml中定义多个数据源的配置,然后创建一个类DynamicDataSource去继承AbstractRoutingDataSource类 AbstractRoutingDataSour ...
- Qt/C++开发经验小技巧306-310
远程过很多人电脑远程分析问题,发现一个通病,比如明明修改了某个数据库或者配置文件,结果运行程序一看,还是旧的数据,死活都不行,查了半天程序,始终找不到问题所在.最终查到原来是程序读取的文件根本不是修改 ...