zoukankan      html  css  js  c++  java
  • 布隆过滤器理解

    一、什么是布隆过滤器

      布隆过滤器是一种数据结构,主要是通过位图+多个哈希函数来实现对一个    数据      的标记

      作用是在大量数据中,判断给定的一个  数据   是否存在

    二、哈希表与布隆过滤器

      哈希表也可以对一个数据进行标记,然后可以起到判断是否存在的作用,并且标记和判断的时间复杂度都为O(1),布隆过滤器有啥优点

      首先哈希表的时间复杂度是很理想,但是在大量数据的情况下,空间复杂度很高,计算机可能不支持那么大的内存,举个例子:

      

      如果一个黑名单网站包含100亿个URL连接,每个URL最多占64Byte,要求设计一个系统,判断当前的URL是否在这个黑名单当中,要求额外空间不超过30GB,允许误差率为万分之一

      如果使用哈希表标记,将URL哈希函数处理得到一个int类型的哈希值,那么需要一个大小为100亿的int数组去标记,需要的内存大概在300多GB,计算机显然不支持

      布隆过滤器使用位图去标记,解决了内存上的问题,解决上面的问题,只需要1个多G的内存大大节约了内存

    三、布隆过滤器的使用

      假设这个数据是字符串“xxxxx”,我们要在大量的数据中判断该数据是否存在,只要把字符串同样进行三种哈希函数处理,然后判断三个哈希值的位置是否

           为1,  如果有一个位置不为1,则一定不存在如果都为1,表示可能存在

      也就是说布隆过滤器只能判断数据是否一定不存在,而无法判断数据是否一定存在。

    四、布隆过滤器的优缺点

    优点:由于存放的不是完整的数据,所以占用的内存很少,而且新增,查询速度够快;

    缺点: 随着数据的增加,误判率随之增加;无法做到删除数据;只能判断数据是否一定不存在,而无法判断数据是否一定存在。

     

    布隆过滤器的误判率和  插入的数据多少  以及  位图的大小有密切的关系

     

     

     

     

    五、布隆过滤器的应用

     

    Redis缓存的判断、网页URL的去重,垃圾邮件的判别,集合重复元素的判别

     

     

     

    参考博客:https://www.cnblogs.com/CodeBear/p/10911177.html

  • 相关阅读:
    数组对象遍历新增属性
    watch监听数据的改变
    同一个数组查重
    SpringCloud搭建(二) 支付模块搭建
    SpringCloud搭建(一) 聚合父工程搭建
    线程池
    同步容器
    容器
    JVM学习
    线程---ThreadLocal
  • 原文地址:https://www.cnblogs.com/-citywall123/p/13460678.html
Copyright © 2011-2022 走看看