zoukankan      html  css  js  c++  java
  • 基于Golang的布隆过滤器

    布隆过滤器:

      是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率删除困难。布隆过滤器解决了快速的检索一个元素是否在一个较大的元素列表之中的问题,通常用于缓存穿透,爬虫的爬取链接去重以及推荐历史去重

    具体流程:

      对于各种对象(可以是任意数据类型),通过n个hash函数将其映射在bit数组的n个位置,当判断某个对象是否在布隆过滤器中时,就将其映射并判断这些位置是否为1,因为存在映射到同一个位置这种情况,故存在误识别,本来它不在过滤器中,识别它在过滤器中,另外无法通过将这些位置1置为0这种方式来删除对象,因为这些位置可能是被其他对象映射的

    布隆过滤器的false positive计算:

    误识别率fpp的关键参数:

      m表示bit数组的长度

      k表示散列函数的个数

      n表示插入的元素个数

    其公式:

    基于Golang的具体编码实现:

    https://github.com/ZiHengLee/go-bloomfilter

  • 相关阅读:
    Python全栈之路-Day40
    Python全栈之路-Day39
    Python全栈之路-Day38
    Python全栈之路-Day37
    Python全栈之路-Day36
    Python全栈之路-Day34
    Python全栈之路-Day33
    Python全栈之路-Day32
    深入理解urllib、urllib2及requests
    win10中的vmware桥接模式异常,不能设置同网段ip
  • 原文地址:https://www.cnblogs.com/peterleee/p/14628622.html
Copyright © 2011-2022 走看看