简介

AMQ(approximate membership queries近似成员查询):

  • 是一种字典数据结构
  • 是在空间使用和查询错误率的权衡
  • 用于解决大量数据的处理
  • 拥有以下操作
    • 查找
    • 插入
    • 可选择元素的删除
  • 设e误检率,当查询时报出absent值时,e的概率为误检,1-e的概率为确实没有该元素。
  • 可以通过调整e值来调整准确度和空间使用的关系

举例

Bloom Filter

Bloom filter

  • Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合
  • 历史:Bloom-Filter,即布隆过滤器,1970年由Bloom中提出。
  • 应用:用于检索一个元素是否在一个集合中。
  • 特点:Bloom Filter有可能会出现错误判断,但不会漏掉判断。
  • 适用场景:Bloom Filter”不适合那些“零错误的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter比其他常见的算法(如hash,折半查找)极大节省了空间。
  • 优点:是空间效率和查询时间都远远超过一般的算法,
  • 缺点:是有一定的误识别率和删除困难。

算法过程

  • 原理要点:一是位数组, 二是k个独立hash函数。

1)位数组:

  • 假设Bloom Filter使用一个m比特的数组来保存信息,初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0,即BF整个数组的元素都设置为0。

2)添加元素,k个独立hash函数

  • 为了表达S={x1, x2,…,xn}这样一个n个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,…,m}的范围中。

  • 当我们往Bloom Filter中增加任意一个元素x时候,我们使用k个哈希函数得到k个哈希值,然后将数组中对应的比特位设置为1。即第i个哈希函数映射的位置hashi(x)就会被置为1(1≤i≤k)。

  • 注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在下图中,k=3,且有两个哈希函数选中同一个位置(从左边数第五位,即第二个“1“处)。

3)判断元素是否存在集合

  • 在判断y是否属于这个集合时,我们只需要对y使用k个哈希函数得到k个哈希值,如果所有hashi(y)的位置都是1(1≤i≤k),即k个位置都被设置为1了,那么我们就认为y是集合中的元素,否则就认为y不是集合中的元素。下图中y1就不是集合中的元素(因为y1有一处指向了“0”位)。y2或者属于这个集合,或者刚好是一个false positive。

  • 显然这个判断并不保证查找的结果是100%正确的。
  • 更多详细信息

Quotient Filter and Cascade Filter

  • Quitient Filter 和Cascade Filter算法由Bender等人设计,是一个空间效率高的概率性数据结构
  • 应用:用于检索一个元素是否在一个集合中。
  • 优点:对插入、查询、删除操作由高吞吐量,比Bloom Filter高了两个数量级。
  • 更多详情见[3][4]

参考文献

[1] https://www.cnblogs.com/zhxshseu/p/5289871.html
[2] https://en.wikipedia.org/wiki/Bloom_filter
[3] https://en.wikipedia.org/wiki/Quotient_filter
[4] Don’t Thrash: How to Cache your Hash on Flash

AMQ(approximate membership queries)介绍的更多相关文章

  1. CSS3媒体查询(Media Queries)介绍

    媒体类型 all 所有设备 screen 电脑显示器 handheld 便携设备 tv 电视类型设备 print 打印用纸打印预览视图 关键字 and not(排除某种设备) only(限定某种设备) ...

  2. CSS3 Media Queries

    Media Queries直译过来就是“媒体查询”,在我们平时的Web页面中head部分常看到这样的一段代码: <link href="css/reset.css" rel= ...

  3. asp.net资料! (.NET) (ASP.NET)

    使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 ...

  4. General Purpose Hash Function Algorithms

    General Purpose Hash Function Algorithms post@: http://www.partow.net/programming/hashfunctions/inde ...

  5. Bloom Filters

    http://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html A Bloom filter is a method for represe ...

  6. Django 初试水(二)

    这部分链接上一部分.将建立数据库,创建第一个模型,并主要关注 Django 提供的自动生成的管理页面. 打开 mysite/setting.py 文件.这包含了 Django 项目设置的 Python ...

  7. CSS3 Media Queries 详细介绍与使用方法[转]

    Media Queries 就是要在支援CSS3 的浏览器中才能正常工作,IE8 以下不支援. 而Media Queries 的套用方法千变万化,要套用在什么样的装置中,都可以自己来定义. 关于Med ...

  8. CSS3 Media Queries 详细介绍与使用方法

    Media Queries 就是要在支援CSS3 的浏览器中才能正常工作,IE8 以下不支持. 而Media Queries 的套用方法千变万化,要套用在什么样的装置中,都可以自己来定义. 到底什么是 ...

  9. Membership 介绍

    ASP.NET成员资格为您提供了验证和存储用户凭据的内置方式.因此,ASP.NET成员可以帮助您管理网站中的用户身份验证.您可以使用ASP.NET表单身份验证使用ASP.NET成员身份,方法是使用AS ...

随机推荐

  1. Swift Development – List of Resources You Must Bookmark

    Ever since the introduction of iOS, there is iOS development fever across the globe. Many iOS develo ...

  2. mybatis大框架

    MyBatis   开源的数据持久化层框架 实体类与SQL语句之间建立映射关系 一:MyBatis前身是IBatis,本是Apache的一个开源的项目, 基于SQL语法,简单易学 ,是耦合度降低,方便 ...

  3. 浏览器根对象window之窗体和工具条

    1. 窗体和工具条 1.1 窗体 frames.self.window.parent.top.opener. frames 数组类型,页面中iframe的引用,如果页面有2个iframe,则frame ...

  4. 02_Netty实现的Echo服务器和客户端

    [Echo服务端] [EchoServer] public class EchoServer { private final int port; public EchoServer(int port) ...

  5. python学习笔记之——正则表达式

    1.re模块 Python通过re模块提供对正则表达式的支持,re 模块使 Python 语言拥有全部的正则表达式功能.使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用 ...

  6. JAVA - JDK 1.8 API 帮助文档-中文版

    JAVA - JDK 1.8 API 帮助文档-中文版 百度云链接: https://pan.baidu.com/s/1_7FFadw1a6J0qTfx2FzqPQ 密码: 41n4

  7. 弧形菜单2(动画渐入)Kotlin开发(附带java源码)

    弧形菜单2(动画渐入+Kotlin开发) 前言:基于AndroidStudio的采用Kotlin语言开发的动画渐入的弧形菜单...... 效果: 开发环境:AndroidStudio2.2.1+gra ...

  8. Angular5中提取公共组件之radio list

    上一篇说到了Checkbox List的公共组件提取,现在说一下Radio List的公共组件提取. Radio List组件提取起来很方便,不想Checkbox那么复杂. radio-list.co ...

  9. Python学习---IO模型1227

    1.1. 事件驱动 事件驱动属于一种编程的范式,一种编程的风格,它擅长于处理一些未知的事件,通过绑定一个事件,外界触发后激活这个事情,达到执行某些操作的目的.比如浏览器的onclick()事件 1.2 ...

  10. 安装kubernetes 环境

    master: 10.6.2.170     #master节点兼做仓库 node-1: 10.6.2.171 node-2: 10.6.2.172 1.添加host解析 # cat << ...