• OI视角浅谈布隆过滤器


    简要谈及布隆过滤器

    Preface

    不负责的出题人扔了一道5e5,2M卡内存的题,标算布隆过滤器,然而std自己用std::set 70M碾过去了。

    没学OI时候草草看过这个,不过忘得差不多了。

    今天自己考试时候写的假布隆过滤器在$10^5$时候都会有10来个误判(而且这空间怎么卡啊)。

    网上的资料大抵都是工程向,这里从OI角度随意谈谈布隆过滤器吧。

    所谓“布隆过滤器”?

    可以先浅显地理解为 低配版的多哈希 ,因为这东西的最大卖点就是空间复杂度较哈希小得多;但是正确性又不能丢太多,所以就在压缩空间的前提下多用几个哈希函数来增加正确性。

    这里有一个卡空间的基础操作:bitset.因为一般的方法bool是8bit只能表示一个数的存在与否;而一个int有32bit,以位可以来表示32个数的存在。

    先做说明几个变量的含义:

    • $n$:总计插入$n$个元素
    • $m$:实现的共有$m$位的bitset.
    • $k$:有$k$个不同的hash函数,每个值域在$[0,m)$之间

    其实现过程是:对于每次插入,计算得到$k$个哈希值,然后把全局的bitset这$k$个位置修改成1;每次询问,在全局的bitset里查询是否$k$个位置都是1.

    没错这个东西感性理解上去就是误判率很高——对OI来说确实了。

    下面一段就是课件里关于正确性证明的搬运……

    假设布隆过滤器中的hash function满足simple uniform hashing假设:每个元素都等概率地hash到m个slot中的任何一个,与其它元素被hash到哪个slot无关。

     

     

    (我琢磨着课件好像也是哪里copy来的)

    这东西在OI里是不是没什么用

    应该是的。

    除了丧心病狂+不负责任的出题人会来出道布隆过滤器的题目之外,这玩意(优点:时间换空间;缺点:一定的误判率)在OI里似乎没什么用场。

    END

  • 相关阅读:
    Ubuntu18.04, WPS表格生成中文大写数字的script
    Java实现的简单神经网络(基于Sigmoid激活函数)
    Naive Bayes Classifier 朴素贝叶斯分类器
    动态规划处理diff算法 Myers Diff (正向)
    动态规划处理01背包问题
    文本diff算法Patience Diff
    API返回错误信息的最佳实践
    CAP理论中, P(partition tolerance, 分区容错性)的合理解释
    mysql: SELECT ... FOR UPDATE 对SELECT语句的阻塞实验
    Probability&Statistics 概率论与数理统计(1)
  • 原文地址:https://www.cnblogs.com/antiquality/p/11317510.html
Copyright © 2020-2023  润新知