分类目录:《算法设计与分析》总目录

相关文章:
· 位图(BitMap)
· 布隆过滤器(Bloom Filter)


布隆过滤器(Bloom Filter)是1970年由布隆提出的,是非常经典的以空间换时间的算法。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。

具体的操作流程:假设集合里面有 x x x个元素,且一共设置 y y y个哈希函数。

  • 将位数组进行初始化,即初始化状态的数组的每个位都设置位0
  • 对于集合里面的每一个元素,将元素依次通过 y y y个哈希函数进行映射,每次映射都会产生一个哈希值,这个值对应位数组上面的一个点,然后将位数组对应的位置标记为1。

查询某元素是否存在集合中的时,用同样的方法将待查询元素通过 y y y个哈希映射到位数组上的 y y y个点。如果 y y y个点中任意一个点不为 1,则可以判断该元素一定不存在集合中。反之,如果 y y y个点都为 1,则该元素可能存在集合中。此处不能判断该元素是否一定存在集合中,可能存在一定的误判率

优点

相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入、查询时间都是常数。另外, Hash函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。布隆过滤器可以表示全集,其它任何数据结构都不能。

缺点

布隆过滤器的缺点和优点一样明显。随着存入的元素数量增加,误判率随之增加。常见的补救办法是建立一个小的白名单,存储那些可能被误判的元素。但是如果元素数量太少,则使用散列表足矣。

另外,一般情况下不能从布隆过滤器中删除元素。我们很容易想到把位列阵变成整数数组,每插入一个元素相应的计数器加1, 这样删除元素时将计数器减掉就可以了。然而要保证安全的删除元素并非如此简单。首先我们必须保证删除的元素的确在布隆过滤器里面. 这一点单凭这个过滤器是无法保证的。另外计数器回绕也会造成问题。

算法设计与分析——布隆过滤器(Bloom Filter)相关推荐

  1. Redis缓存穿透“新杀招“:布隆过滤器Bloom Filter

    场景分析 这篇文章来讲述缓存穿透的补充解决方案. 为什么要用补充来形容呢? 在之前的文章中,我们提到缓存穿透的解决方案时,我是这么说的: 关于缓存穿透,我们可以在用户访问数据库后将null值存入Red ...

  2. 布隆过滤器速度_布隆过滤器(Bloom Filter)详解

    布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的.它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元 ...

  3. 布隆过滤器+布隆过滤器(Bloom Filter)详解

    布隆过滤器+布隆过滤器(Bloom Filter)详解 程序 = 数据结构 + 算法 -- 图灵奖得主,计算机科学家N.Wirth(沃斯) A Bloom filter is a space effi ...

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

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

  5. mysql布隆过滤器源码_布隆过滤器(Bloom Filter)的原理和实现

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

  6. 布隆过滤器(Bloom Filter)算法

    布隆过滤器原理 开发一个电商项目,因为数据量一直在增加(已达亿级),所以需要重构之前开发好的秒杀功能,为了更好的支持高并发,在验证用户是否重复购买的环节,就考虑用布隆过滤器. 也顺便更加深入的去了解下 ...

  7. 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想

    转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton ...

  8. 布隆过滤器(Bloom Filter)原理及优缺点剖析

    直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中. 和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储 ...

  9. 布隆过滤器Bloom Filter简介

    背景: 如果在平时我们要判断一个元素是否在一个集合中,通常会采用查找比较的方法,下面分析不同的数据结构查找效率: 采用线性表存储,查找时间复杂度为O(N) 采用平衡二叉排序树(AVL.红黑树)存储,查 ...

最新文章

  1. java future设计模式
  2. hdu 1853(Cyclic Tour)
  3. 什么技术能改变世界?
  4. php无限极分类设计,递归方式已经淘汰了
  5. 一文读懂浏览器存储与缓存机制
  6. php,Allowed memory size of 8388608 bytes exhausted (tried to allocate 1298358 bytes)
  7. python面试题之python下多线程的限制
  8. 评论中显示表情,苹果和安卓都一样
  9. Ubuntu 10.04.2上编译ecos工具
  10. Exchange DAG 架构 POP3验证失败处理过程
  11. 前后端接口文档规范模板
  12. powerBI发布到web,管理员权限设置
  13. 韩立刚老师 -- 1、Linux 入门
  14. java 多线程 实现死锁问题
  15. (java)跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
  16. 0-VMware Horizon 2203 虚拟桌面-目录大纲
  17. 清除FreeIPA SSSD缓存
  18. Unity 骨骼动画
  19. 新浪微博第三方登录,显示重定向错误问题
  20. Python—基于Flask框架调用百度接口实现语音识别功能

热门文章

  1. 有进阶自动化测试的心,但是目前公司只要点点点有必要吗?
  2. redis 重启后数据丢失
  3. Windows Redis 重启数据丢失解决方案
  4. 题目:八进制转换为十进制
  5. 实现PMO价值的若干经验
  6. matlab立方如何输入,[求助]如何使用matlab画面心立方结构
  7. 图解深度学习-卷积神经网络
  8. 时刻鼓舞自己的话 当心情不好时就看看
  9. 华为的朋友,与朋友华为
  10. MD2 文件格式详解