Bloom Filter

introduction

首先,我们假设有四种存储设备,分别是 Tape, HDD, SSD, Memory.当然,我们知道,这四种设备的响应速度是按顺序递增的,也就是说 Memory 的速度最快,当然,我们都希望所有的程序都可以跑在 Memory 中,但是这四种设备的存储大小即容量也是不一样的,价格也是随之递增的.Ex .g 当我们在 Java 中使用 Set 类型去存储数据的时候,数据越多,查询所需的时间越长,同时 Jvm heap 也越大.实际生产环境中的数据量极大,在一些实时性要求比较高的应用当中,不可能将所有的数据都放在 Memory 中,当允许一定的误差的情况下,(即使用准确性去换取实时性,这是一种 tradeoff)这里就提出了,一种 Probabilistic data structure,它可以在一定程度上去接受一定的误差,从而使响应速度加快,所要存储的数据也大大缩小.

Bloom Filter 的概念提出的比较早,早在1970年就由一个叫 Bloom(真的叫这个名字)的人在一篇名为"Space / Time trade-offs in hash coding with allowable errors"

structure

  1. Initial the structure

  2. Add an element to this structure

  3. query 判断存在还是不存在

If one hash function map to 0, It means NO!( 有一个 map 到0 就不行)
But if all hash functions map to 1, it means maybe YES(即使 所有的 hash 函数都能 map 到1, 也不能说明就一定存在, 这里有一定的 false positive, 即认为是正确的,但实际上不是正确的概率)

use cases

  1. one hit wonders
  2. avoiding lookups
  3. real-time matching

Count-Min Sketch

introduction

Count-min Sketch 是一个概率数据结构,用作数据流中事件的频率表。它使用散列函数将事件映射到频率,但与散列表不同,散列表仅使用子线性空间,但会因过多计算冲突导致的某些事件。

Count-min Sketch 本质上与 Fan 等人在 1998 年引入的计数 Bloom filter 相同的数据结构. 但是,它们的使用方式各不相同,因此尺寸也有所不同:计数最小草图通常具有次线性单元数,与草图的所需近似质量有关,而计数 Bloom filter 的大小通常与其中的元素数集合。

Main aim is to count things, how many times have i seen an element

structure

实际的草图数据结构是 w 列和 d 行的二维数组。参数 w 和 d 在创建草图时是固定的,并确定时间和空间需求以及在查询频率或内部产品草图时的错误概率。与每个 d 行相关联的是一个单独的散列函数; 哈希函数必须是成对独立的。参数 w 和 d 可以通过设置 w =⌈e/ε⌉和 d =⌈ln1 /δ⌉来选择,其中在回答查询时的误差在概率为 1 - δ的附加系数ε内(见下文) ,e 是欧拉数。

  1. 结构图


对于 Hash Function 的要求,可以是最简单的 hash function ,但所有的 hash function 必须不同.

  1. 添加元素
    当一个新的类型 i 事件到达时,我们更新如下:对于表中的每一行 j,应用相应的散列函数来获得列索引 k = hj(i)。然后将第 j 行第 k 列中的值加 1。


  2. 查询(统计元素个数)

    The estimated count is given by the least value in the table for i, namely {\displaystyle {\hat {a}}{i}=\min {j}\mathrm {count} [j,h_{j}(i)]} {\hat a}{i}=\min {j}{\mathrm {count}}[j,h_{j}(i)], where {\displaystyle \mathrm {count} } {\mathrm {count}} is the table.
    就是取最小的 count 作为 element 出现的次数,故名 count-min
    ![query1](https://raw.githubusercontent.com/Titanssword/Notes/master/pic/bloomfilter%20and%20CMS/Screenshot from 2018-02-20 06-33-42.png)

Probabilistic problem

Epsilon: accepted error added to counts with each item
Delta: probability that estimate is outside accepted error

use cases

  1. any kind of frequency tracking
  2. NLP (word count)
  3. Extension heavy-hitters
  4. range-query

参考

James Stanier 的演讲教程
wikipedia 解释
Algorithms & Data Challenges Berlin Meetup
Mar 19, 2013 PPT
An Improved Data Stream Summary: The Count-Min Sketch and Its Applications

Bloom Filter 和 Count-Min Sketch 介绍相关推荐

  1. Count Min Sketch: from Finding the Majority Element problem to heavy hitter problem,统计元素频率的利器

    这是笔者学习 Stanford cs 168 课程的一些学习笔记 lecture 2, 主要讲一个基于 hash 和独立试验思想,设计的一种数据结构 count min sketch,想法非常类似于 ...

  2. oracle bloom过滤,布隆过滤(Bloom Filter)-必须了解的优化器算法

    布隆过滤(Bloom Filter)-必须了解的优化器算法 布隆过滤器(Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一 ...

  3. 【恋上数据结构】布隆过滤器(Bloom Filter)原理及实现

    布隆过滤器(Bloom Filter) 引出布隆过滤器(判断元素是否存在) 布隆过滤器介绍(概率型数据结构) 布隆过滤器的原理(二进制 + 哈希函数) 布隆过滤器的误判率(公式) 布隆过滤器的实现 布 ...

  4. js 数组 实现 完全树_Flink实例(六十八):布隆过滤器(Bloom Filter)的原理和实现 - 秋华...

    什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...

  5. Spark Bloom Filter 测试

    Spark Bloom Filter 测试 什么是Bloom Filter? Bloom Filter的原理可参考文章 Bloom Filter原理 由上述文章可知,创建一个Bloom Filter我 ...

  6. 布隆(Bloom Filter)过滤器——全面讲解,建议收藏

    本文已收录于专栏 ❤️<Redis之大厂必备技能包>❤️ 欢迎各位关注.三连博主的文章及专栏,全套Redis学习资料,大厂必备技能! 目录 1.什么是布隆过滤器 2.布隆过滤器的使用场景 ...

  7. C++(数据结构与算法):64---布隆过滤器(Bloom Filter)

    文本代码下载地址: 方式1:公众号[多栖技术控小董]回复[3589]免费获取下载链接 方式2:Github:https://github.com/dongyusheng/csdn-code/tree/ ...

  8. 布隆(Bloom Filter)过滤器入门

    文章目录 1.什么是布隆过滤器 布隆过滤器的优缺点 布隆过滤器的优点 布隆过滤器的缺点 2.布隆过滤器的使用场景 3.布隆过滤器的原理 3.1 数据结构 3.2 空间计算 3.3 增加元素 3.4 查 ...

  9. 基于zset与bloom filter的排行榜与点赞方案设计

    前言 最近有做较多关于排行榜需求相关迭代,在这期间关于技术方案也进行了很多的思考和调研,到底采用哪种方式更贴合业务,在不过度设计的基础上多多考虑扩展性和稳定性,最终选型中有Mysql.Redis zs ...

最新文章

  1. 下一个十年,AI将在这10大领域颠覆世界!
  2. SAP Varient Configuration Type SAP变量配置类型
  3. java模拟一个军队作战_战区级联合作战仿真推演系统
  4. python学习-综合练习(平方根、海伦公式、随机数、转换函数、数值交换)
  5. 东北农业大学考研计算机大纲,东北农业大学(专业学位)计算机技术研究生考试科目和考研参考书目...
  6. git serialtool_Git学习笔记---协作的一般流程
  7. 发布一个域安全级别的无代码InfoPath表单作为文档库模版 (InfoPath 一)
  8. 如何对物联网数据进行大数据分析
  9. CAD1:1导出图纸的步骤
  10. “iPad 上不可错过的应用有哪些?”
  11. 交换机与路由器技术:静态路由配置和路由器上配置DHCP、虚拟局域网VLAN
  12. 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列
  13. 折腾BIOS(三),刷NVMe失败
  14. 网络电视经常出现服务器无响应,为什么pps总是显示服务器未能响应停止播放
  15. 在线ssd测试软件,速度软件:AS SSD Benchmark_固态硬盘_固态硬盘评测-中关村在线...
  16. 一次qps测试实践(续)
  17. 洛谷 P1618 三连击(升级版)
  18. python翻译-python软件翻译
  19. 我们的科技创新为何离黑科技如此遥远?
  20. 第九篇:强化学习Q-learning算法 通俗介绍

热门文章

  1. [附源码]java毕业设计零食销售系统
  2. 2021年金属非金属矿山(露天矿山)安全管理人员最新解析及金属非金属矿山(露天矿山)安全管理人员模拟考试
  3. # 工欲善其事必先利其器,让你的idea“飞”起来
  4. java图片切割类任务书_基于Java的截图工具(可储存编辑)的设计与实现毕业论文+任务书+翻译及原文+答辩PPT+源码+辅导视频...
  5. POJ3164 最小树形图 有向图的最小生成树 模板题 朱刘算法 朱永津-刘振宏算法
  6. 计算机科学概论(第12版)下载
  7. hana 查看表字段_SAP HANA 表格
  8. 消费者信任缺失,拼多多解决不了的问题其他平台能解决吗?
  9. 【牛客网华为机试】HJ89 24点运算
  10. 浅谈STG游戏的开发(4月8日更新,已补全内容)