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

    检查一个元素是否在某一个集合中,使用HashSet是比较好的选择,因为在不发生Hash碰撞的情况下它的时间复杂度为常数级别,但是在数据量比较大的情况下,使用HashSet将会占用大量的内存空间。举个例子,长城防火墙有100亿个需要屏蔽的网址,来自计算机的每一次请求都要经过防火墙的过滤判断请求URL是否在黑名单中,如果我们使用HashSet来实现过滤的话,我们假设每个URL的大小为64B,那么100亿个就至少需要大约640GB的内存空间,这显然是不符合实际情况的。
     
    布隆过滤器解决大数据检查问题

    并非百分百保正确

    假如输入的元素不在集合中,由于元素过多而bit数组过小,导致数组中的大部分bit为均为1,有可能误判该元素就在集合中。可能误判

    假如输入对象就在集合中,那么数组中的bit为肯定为1。一定不会误判
     
    对于已经发现的元素,放入HashSet中。经过布隆过滤器前先过滤下。

    数据结构

    bit数组。每个bit只有0和1两种状态。

    原理

    元素通过hash函数得到n个key值,与数组大小取余算出在桶中的位置。将bit置为1。

    将集合中所有的元素按此步骤走一遍即得到布隆过滤器。

    一回生,二回熟
  • 相关阅读:
    SignalR的三个Demo
    SignalR的一点点东西
    如何在appconfig中配置服务的ip
    IP分片丢失重传
    以太网之物理层
    以太网数据格式与封装解封
    OSI七层模型与TCP/IP五层模型
    边沿检测方法-FPGA入门教程
    如何用ModelsimSE仿真IP核-以PLL为例
    搭建Modelsim SE仿真环境-使用do文件仿真
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12672839.html
Copyright © 2011-2022 走看看