Bloom Filters Ref[1]

1. 简介

Bloom filter(布隆过滤器;有更好的或正确的翻译,告诉我) 是一个数据结构,该数据结构快速并且内存高效,它可以告诉你某个元素是否在集合中。

作为高效的代价,Bloom filter是存在概率的数据结构:它告诉我们某个元素一定不在集合中,或者可能在集合中。

Bloom filter的基本数据结构是Bit Vector。

在Ref[1]中有简单形象的例子来说明Bloom Filter。

1.1 Hash Functions

在Bloom Filter中的hash function应该是独立的并且是均匀分布的。应该选用尽可能快的hash function。(sha1虽然被广泛使用,

但是在Bloom Filter的实现中并不是好的选择)。

hash function有:murmur, fnv, Jenkins Hashes。

1.2 How big should I make my Bloom filter?

false positive rate: (1-e-kn/m)k

false positive rate: 是指假肯定率(Q[1]: false positive rate 是指???)

k: hash function的个数

m: filter中的bits数

n: 已经被插入到filter里的元素个数

1.3 应该使用多少hash function?

hash function越多,bloom filter越慢,bloom filter就越容易被填满。如果hash function太少,就会得到太多的假肯定(false positive)。

由于在创建filter时必须为k选择一个值,你需要对n的变动范围进行界定。一旦范围确定了,仍然需要选择一个潜在的m和k。

幸运地,给定m和n,我们有一个函数来选择k的最佳值:(m/n)ln(2)

接下来选定bloom filter的尺寸/大小:

  1. 选择一个n的范围值

  2. 为m选择一个值

  3. 计算k的最佳值

  4. 根据n,m,k来计算error rate。如果该值不可接受,需要返回第二步并修改m的值。

1.4 How fast and space efficient is a Bloom filter?

一个给定有m个bits和k个hash function的Bloom filter,插入和成员身份的测试是O(k)

2. Bloom Filter的应用案例

[Todo]


Reference

1. Bloom Filters by Example

http://billmill.org/bloomfilter-tutorial/

1.1 http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-handling-ridiculous-amounts-of-data-with-probabilistic-data-structures-4899047

1.2 Network Application of Bloom Filter: A Survey

http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=6CA79DD1A90B3EFD3D62ACE5523B99E7?doi=10.1.1.127.9672&rep=rep1&type=pdf

1.3 Less Hashing, Same Performance

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.152.579&rank=1

1.4 Scalable Bloom Filters [AAAA]

http://gsd.di.uminho.pt/members/cbm/ps/dbloom.pdf

1.5

https://sites.google.com/site/murmurhash/

1.6

http://isthe.com/chongo/tech/comp/fnv/

1.7

http://www.burtleburtle.net/bob/hash/doobs.html

2. Bloom Filter  [AAAAA]

http://en.wikipedia.org/wiki/Bloom_filter

DataStructure.BloomFilter的更多相关文章

  1. BloomFilter 与 Cuckoo Filter

    BloomFilter 与 CuckooFilter Bloom Filter 原理 Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个相互独立的H ...

  2. Hbase中的BloomFilter(布隆过滤器)

    (1)     Bloomfilter在hbase中的作用 Hbase利用bloomfilter来提高随机读(get)的性能,对于顺序读(scan)而言,设置Bloomfilter是没有作用的(0.9 ...

  3. [转]BloomFilter——大规模数据处理利器

    Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. 一. 实例 为了说明Bl ...

  4. 基于Redis的BloomFilter算法去重

    BloomFilter算法及其适用场景 BloomFilter是利用类似位图或者位集合数据结构来存储数据,利用位数组来简洁的表示一个集合,并且能够快速的判断一个元素是不是已经存在于这个集合.因为基于H ...

  5. BloomFilter–大规模数据处理利器(转)

    BloomFilter–大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求1 ...

  6. BloomFilter——读数学之美札记

    之前接触过bitmap,读吴军先生的数学之美,看到了一个更强大的数据结构,布隆过滤器(Bloomfilter),赶紧记下来吧,忘了怪可惜的. bitmap的使用是很有局限性的,往往只能用于海量数值型数 ...

  7. 【DataStructure In Python】Python实现各种排序算法

    使用Python实现直接插入排序.希尔排序.简单选择排序.冒泡排序.快速排序.归并排序.基数排序. #! /usr/bin/env python # DataStructure Sort # Inse ...

  8. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  9. 【DataStructure In Python】Python模拟链表

    最近一直在学习Python和Perl这两门语言,两者共同点很多,也有不多.希望通过这样的模拟练习可以让自己更熟悉语言,虽然很多时候觉得这样用Python或者Perl并没有体现这两者的真正价值. #! ...

随机推荐

  1. Java中for循环中的的try-catch

    异常处理 当for循环遇上try-catch @Test public void forThrow(){ final int size = 6; for (int i=0; i<size; i+ ...

  2. flume kafka 配置指南

    1.官方网站也有配置: https://flume.apache.org/FlumeUserGuide.html#kafka-source 2.clodera 官方配置 https://www.clo ...

  3. Mesh.CombineMeshes

    [Mesh.CombineMeshes] public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true ...

  4. sql根据最小值去重

    CREATE TABLE temp2 AS SELECT MAX(id) id FROM sys_oper_procenter GROUP BY pro_title 创建一个temp2的表 根据标题分 ...

  5. 两种创建Observable的方法(转)

    转自:http://blog.csdn.net/nicolelili1/article/details/52038211 Observable.create() create()方法使开发者有能力从头 ...

  6. Linux系统一本通(实用篇)

    本人最近一直在ubuntu,接下来和大家分享我曾经踩过的坑,和一些非常实用的命令知识- 安装中的磁盘分配 一般来说,在linux系统中都有最少两个挂载点,分别是/ (根目录)及 swap(交换分区), ...

  7. UVA-816.Abbott's Tevenge (BFS + 打印路径)

    本题大意:给定一个迷宫,让你判断是否能从给定的起点到达给定的终点,这里起点需要输入起始方向,迷宫的每个顶点也都有行走限制,每个顶点都有特殊的转向约束...具体看题目便知... 本题思路:保存起点和终点 ...

  8. 190. Reverse Bits (Int; Bit)

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  9. 大数据入门推荐 - 数据之巅 大数据革命,历史、现实与未来等五本PDF

    扫码时备注或说明中留下邮箱付款后如未回复请至https://shop135452397.taobao.com/联系店主

  10. 互联网进行限流策略的Semaphore信号量使用

    在Semaphore信号量非常适合高并发访问,新系统在上线之前,要对系统的访问量进行评估,当然这个值肯定不是随便拍拍脑袋就能想出来的,是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评 ...