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

    最近经常在别人的文章中看到布隆过滤,看了一些应用场景,觉得这个东西还真是在特定的情况能发挥超常的作用。

    比如我们在刷今日头条的时候,我们看完一段,然后下刷,头条就推荐一些新文章给我们。

    头条有无数个文章,我们也读了一些文章,那么头条是怎么做到不推荐重复文章给我们的呢?这里就是用到布隆过滤的时候了。

    先来个官方的解释:https://en.wikipedia.org/wiki/Bloom_filter

    布隆过滤呢,是布隆这个人在1970提出来的一种数据结构,可以用来计算一个是不是包含在一个超大的集合中,但是有一定的误差。

    如果计算到元素不在集合中,那么这个元素一定不在集合中;

    如果计算到元素在集合中,那么这个元素可能在集合中。

    假如我们有m个元素,现在要检查元素x是否在m中。那么布隆是怎么计算检查的呢?

    1,建一个长度为n的数组,元素全部为0,

    2,h个哈希算法,每个算法都把m中的元素hash成整数N

    3,把数组的N元素设置成1

    4,增加的时候,再用h个哈希算法,算出h个整数N,再把数组的元素N设置成1

    查找时,把元素x,用h个哈希算法,算出h个整数N,如果数组的N元素某个为0,则我们认为x不在m中

    这样我们的布隆过滤的数据结构就做好了。从中我们可以看到一些布隆过滤的优点:

    1,没有存储m个元素的值

    2,速度比较快

    缺点就是有时候不准。m的数量越来越多,就越不准确。

    有点像现在互联网分布式系统中的CAP理论

    CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得 。
  • 相关阅读:
    寻找我编程道路的明灯
    Torque2D MIT 学习笔记(7) TAML的使用
    Torque2D MIT 学习笔记(4) 脚本语法(2)
    C++输入/输出流
    设计模式之命令模式
    设计模式之策略模式
    Torque2D MIT 学习笔记(11) 资源管理(3)
    C++文件处理
    Torque2D MIT 学习笔记(2) 目录结构
    设计模式之观察者模式
  • 原文地址:https://www.cnblogs.com/13579net/p/10102418.html
Copyright © 2011-2022 走看看