布隆过滤器理解

一、什么是布隆过滤器

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

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

二、哈希表与布隆过滤器

  哈希表也可以对一个数据进行标记,然后可以起到判断是否存在的作用,并且标记和判断的时间复杂度都为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

原文地址:https://www.cnblogs.com/-citywall123/p/13460678.html