布隆过滤器

  • 布隆过滤器Bloom Filter,是1970年由布隆提出的;它实际上是一个很长的二进制向量(BitMap)一系列随机映射函数
  • 可以用于检索一个元素是否在一个集合中
  • 优点:空间效率查询时间都很好
  • 缺点:有一定的误识别率删除困难,通常是只增/查不删
  • 原理:当一个元素被加入集合时,通过k个散列函数将这个元素映射成一个位数组中的k个点,把他们设置为1;检索时,我们只要看这些点是不是都是1就可以大约知道集合中是否有这个值,只要存在一个点不为1,则被检测的元素一定不存在,若全为1,则认为元素很可能存在
  • 代码实现
//布隆过滤器
public class BloomFilter {private static final int NumSlots = 1024 * 1024 * 8; //位图的宽度private static final int NumHash = 8; //Hash函数的个数,一个Hash函数的结果标记一个位private BigInteger bitmap = new BigInteger("0"); //位图//处理原始数据,每一个Hash函数对应出一个位,Hash的值域为0~(NumSlots-1)public void addElement(String message){//有几个hash函数就执行几次for (int i = 0; i < NumHash; i++) {//获取此时hash函数得到的值int hashCode = getHash(message, i);//如果位图的该位为0,将该为置为1if(!bitmap.testBit(hashCode)){//shiftLeft表示将1左移hashCode位,再与原始bitmap或运算,即可将bitmap的该位置为1bitmap = bitmap.or(new BigInteger("1").shiftLeft(hashCode));}}}//Hash函数,n代表第几个hash函数private int getHash(String message, int n){message = message + n;try {//获取md5的实例,md5将任意输入映射成128位的整数MessageDigest md5 = MessageDigest.getInstance("md5");byte[] bytes = message.getBytes();//使用md5将bytes转化为128位的整数md5.update(bytes);BigInteger bi = new BigInteger(md5.digest());return Math.abs(bi.intValue())%NumSlots;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return -1;}//查询是否在集合中public boolean check(String message){for (int i = 0; i < NumHash; i++) {//如果位图中该位为0if(!this.bitmap.testBit(getHash(message, i))){//一定不存在return false;}}//每一位都存在,可能存在return true;}//测试public static void main(String[] args) {BloomFilter bloomFilter = new BloomFilter();Random random = new Random();bloomFilter.addElement("123456");for (int i = 0; i < 1000; i++) {bloomFilter.addElement(i*8*(i-1) + random.nextInt(1000) + "");}System.out.println(bloomFilter.check("123456")); //trueSystem.out.println(bloomFilter.check("1236")); //falseSystem.out.println(bloomFilter.check("13579242356547")); //false}
}

算法学习--布隆过滤器相关推荐

  1. 大数据算法系列——布隆过滤器

    大数据算法系列--布隆过滤器 一.简介 Bloom filter介绍 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集 ...

  2. 面试官让我利用哈希算法、布隆过滤器设计一个短链系统

    点击上方蓝字设为星标 下面开始今天的学习- 作者 | 码海 来源 | 码海 前言 今天,我们来谈谈如何设计一个高性能短链系统,短链系统设计看起来很简单,但每个点都能展开很多知识点,也是在面试中非常适合 ...

  3. 软考2022高级架构师下午案例分析第4题:关于哈希算法、一致性哈希算法和布隆过滤器

    目录 [说明] [问题1] [问题2] [问题3] [说明] 某大型电商平台建立了一个在线 B2B 商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率.但是在运营过程中, ...

  4. Python爬虫学习——布隆过滤器

    布隆过滤器的实现方法1:自己实现 参考 http://www.cnblogs.com/naive/p/5815433.html bllomFilter两个参数分别代表,布隆过滤器的大小和hash函数的 ...

  5. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  6. 布隆过滤器(Bloom Filter)- 原理、实现和推导

    目录 算法背景 布隆过滤器–概念 布隆过滤器-原理 布隆过滤器-缺点 布隆过滤器-实现 布隆过滤器-应用 布隆过滤器-公式推导 算法背景 问题: 在开发中,经常要判断一个元素是否在一个集合中. 实现方 ...

  7. 布隆过滤器在区块链中的应用

    作者:Annchain   (本文一切著作权归annchain技术团队所有,未经许可,不得转载.若需转载请联系页尾二维码.) Bloom Filter简介 布隆过滤器(bloom filter)是空间 ...

  8. 【微服务】Day17(酷鲨商城前台业务总结、布隆过滤器、Docker)

    酷鲨商城前台业务总结 "我负责的功能" 登录(SSO),注册 显示商品分类(自关联三级分类树) 显示商品列表 显示商品详情 购物车管理(显示购物车列表,添加购物车,删除购物车,修改 ...

  9. 算法学习 (门徒计划)3-2 哈希表与布隆过滤器及经典问题 学习笔记

    算法学习 (门徒计划)3-2 哈希表与布隆过滤器及经典问题 学习笔记 前言 哈希表 哈希操作 冲突处理 开放定址法 再哈希法 公共溢出区 链式地址法 扩容哈希表 设计简易哈希表 总结 布隆过滤器 对比 ...

最新文章

  1. 硬核!我的导师手写129页毕业论文,堪比打印!
  2. 机器学习笔记:为什么要对数据进行归一化处理?
  3. java客户端运行hadoop_JAVA客户端连接部署在docker上的hdfs
  4. java编译命令带参数_java编译命令基础知识点
  5. (王道408考研操作系统)第四章文件管理-第一节8:文件保护
  6. centos7.3部署django用uwsgi和nginx[亲测可用]
  7. Kafka从上手到实践 - 实践真知:搭建Kafka相关的UI工具 | 凌云时刻
  8. 荐书|图解深度学习与神经网络:从张量到TensorFlow实现
  9. Symbian中的iScanCode和iCode(转)
  10. UE4编辑器ToolBar扩展
  11. Hexo博文置顶(自定义排序)
  12. android锁屏是弹出窗口,Android锁屏状态下弹出activity
  13. 微生活完成3200万元A轮融资,助企业快速搭建移动互联CRM
  14. 人均 3.6万行代码, C++ 成最烫手山药:腾讯首度披露技术研发数据!
  15. 长安大学计算机学硕毕业要求,长安大学研究生学习期间发表学术论文规定.doc...
  16. sql 数据库前两列值乘_SQL注入原理和方法汇总
  17. 机器人网络系统时延笔记(LAN+WLAN)
  18. Java base64加密解密 两种实现方式
  19. EMC电磁兼容测试项目简介
  20. 美团王兴开炮阿里,昨天刚刚结束的美团四面面经分享,已拿Offer

热门文章

  1. 为什么中断里不能 sleep
  2. 多维数据表达式MDX笔记
  3. Xshell 执行python脚本
  4. HTML中设定下划线样式并且指定下划线长度
  5. 【大学物理·静止电荷的电场】静电场中的导体
  6. JAVA基础-U7 面向对象编程(基础部分)-作用域
  7. MTCNN人脸检测论文+代码实现(python)(全)
  8. 关于PPT模板的制作
  9. Lots of Buttons的故事
  10. Unity3D集成腾讯语音GVoiceSDK