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(分区容错性),三者不可兼得 。
  • 相关阅读:
    VS2010、SQL Server 2008和SQL Server 2012安装详解
    IIS服务寄宿
    C#中错误:不包含适合于入 口点的静态“Main”方法 的解决方法
    硬件的一些性能指标
    SATA SAS SSD 硬盘介绍和评测
    mysql数据库锁定机制
    mysql日志设置优化
    MySQL硬件瓶颈分析
    可扩展性设计之数据切分
    硬件环境对系统性能的影响
  • 原文地址:https://www.cnblogs.com/13579net/p/10102418.html
Copyright © 2011-2022 走看看