`
freesky110
  • 浏览: 12618 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论
阅读更多
最近在看Hadoop源代码的时候,发现了一个Bloom Filter的数据结构,觉得比较有意思,所以了解了一些,下面是大致的解释,需要detailed information的请Google之:

Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。



除了用来去重的场景外,大家有用到Bloom Filter吗?还有些什么场景下,我们可以考虑用它呢?
分享到:
评论
8 楼 david.org 2011-10-27  
楼主做HBase的吧,最近准备用bloom filter来做搜索过滤!

gtalk : dongtalk@gmail.com
7 楼 zhangdp_neu 2010-01-28  
freesky110 写道
zhangdp_neu 写道
我曾经想用它去实现 新数据和历史数据对比,看是否重复出现。不过这个布隆过滤器实现难度比较大,hash算法实现起来不容易,效果不是很好。有兴趣继续讨论


我觉得实现起来,难道还是不大的,主要就是多了几次hash操作,以减少冲突的几率,但是理论上还是无法避免的。

整个框架实现起来难度不大,但是 在如何减少 hash的冲突,这个难度是比较大的。
Hadoop源代码 里面有这个?我不了解Hadoop,有时间去看看。
6 楼 freesky110 2010-01-28  
zhangdp_neu 写道
我曾经想用它去实现 新数据和历史数据对比,看是否重复出现。不过这个布隆过滤器实现难度比较大,hash算法实现起来不容易,效果不是很好。有兴趣继续讨论


我觉得实现起来,难道还是不大的,主要就是多了几次hash操作,以减少冲突的几率,但是理论上还是无法避免的。
5 楼 zhangdp_neu 2010-01-28  
jahcy 写道
感兴趣,讲讲怎么回事!!以及实现原理思路

你可以上网找找,《数学之美》系列文章里面有介绍。
4 楼 zhangdp_neu 2010-01-28  
zhangdp_neu 写道
我曾经想用它去实现 新数据和历史数据对比,看是否重复出现。不过这个布隆过滤器实现难度比较大,hash算法实现起来不容易,效果不是很好。有兴趣继续讨论

这个布隆过滤器的原理比较简单,设计一个好的布隆过滤器难度不小啊。
3 楼 zhangdp_neu 2010-01-28  
我曾经想用它去实现 新数据和历史数据对比,看是否重复出现。不过这个布隆过滤器实现难度比较大,hash算法实现起来不容易,效果不是很好。有兴趣继续讨论
2 楼 jahcy 2010-01-28  
感兴趣,讲讲怎么回事!!以及实现原理思路
1 楼 freesky110 2010-01-28  
没有人对这个感兴趣吗?

相关推荐

    Bloom Filter概念和原理

    ### Bloom Filter概念与原理 #### 一、Bloom Filter概述 Bloom Filter是一种高效的数据结构,主要用于快速查询一个元素是否存在于一个集合中。它通过牺牲一定的精确度来换取存储空间的极大节省。Bloom Filter的...

    leveldb中bloomfilter的优化.pdf

    ### Leveldb中Bloom Filter的优化:ElasticBF #### 概述 在现代数据库技术中,**Log-Structured Merge-tree (LSM-tree)** 结构因其高效的写入性能而被广泛应用于各种键值(Key-Value, KV)存储系统中,如Google的*...

    bloom filter

    ### Bloom Filter概述与应用 #### 一、Bloom Filter简介 Bloom Filter是一种高效的数据结构,主要用于近似地判断一个元素是否在一个集合中。它的主要特点是空间效率高,但允许存在一定的误报率(即可能会错误地...

    bloomfilter.js, 使用FNV的JavaScript bloom filter快速散列.zip

    bloomfilter.js, 使用FNV的JavaScript bloom filter快速散列 Bloom过滤器This过滤器实现使用非加密 Fowler-Noll-Vo散列函数来实现速度。用法var bloom = new BloomFilter( 32 * 256,//number of bits to all

    带bloom filter 的c网络爬虫

    - **bloomfilter.h**:这是一个头文件,很可能包含了Bloom Filter的数据结构定义和相关操作函数的声明。在C语言中,头文件通常用于提供接口给其他源文件使用,这里可能是为了在spider.c中方便地调用Bloom Filter的...

    Python-bloomfilter过滤器

    **Python-bloomfilter过滤器详解** Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。在Python开发中,尤其是在处理大量数据时,Bloom Filter可以有效地节省内存空间,尤其适用...

    java-bloomfilter

    BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 100000, 0.0001); // 添加元素 bloomFilter.put("element1"); bloomFilter.put("element2"); // 检查元素 ...

    BloomFilter及其应用综述

    Bloom filter是一个简明的空间效率极高的随机的数据结构。用Bloom filter 表示 cache 内容 ,可以高效地实现cache 协作。本文对BloomFilter及其改进型进行了综述性分析,探讨了它的实用性。

    多字段矩阵型bloomfilter(支持砍维度)

    在传统的Bloom Filter中,它通常处理单一的关键字,而在“多字段矩阵型Bloom Filter”中,这一概念被扩展到了支持多个字段的情况,这使得它在处理复杂数据集时更具灵活性。 首先,我们要理解Bloom Filter的基本原理...

    bloom-filter-scala, 用于 Scala的Bloom过滤器,最快的JVM.zip

    bloom-filter-scala, 用于 Scala的Bloom过滤器,最快的JVM Scala的 Bloom filter 概述Bloom过滤器是一种空间高效的数据结构,用于测试某个元素是否是集合的成员。 false 正匹配是可能的,但 false 负数不是。 ...

    Bloom Filter of 2.5 Million common passwords

    This is the bloom filter of 2.5 Million ... BloomFilter bf=new BloomFilter(); BitSet bitSet=bf.readBit(fileName); bf.setBits(bitSet); System.out.println(bf.exist("password")); } it will says true.

    BloomFilter算法

    **Bloom Filter算法详解** Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。由Burton Howard Bloom在1970年提出,它的主要特点是能够在牺牲一定的判断准确性(可能存在...

    Java版本的BloomFilter (布隆过滤器)

    BloomFilter<String> bloomFilter = BloomFilter.create(funnel, 100000, 0.03); bloomFilter.put("element1"); bloomFilter.put("element2"); System.out.println(bloomFilter.mightContain("element1")); //...

    bloom filter 相关论文资料

    布隆过滤器(Bloom Filter)是一种空间效率极高的概率数据结构,用于判断一个元素是否可能在一个集合中。它由布伦南·布隆在1970年提出,最初是为了解决查找问题中的空间效率问题。这篇论文资料集合涵盖了布隆过滤器...

    BloomFilter源码

    基于bloomfilter的大规模网页去重,判断是否爬过URL

    Go-Go中的CuckooFilter实现比BloomFilter更好

    在Go编程语言中,Bloom Filter和Cuckoo Filter是两种流行的数据结构,用于空间效率高的近似存在检查。本篇文章将深入探讨Cuckoo Filter如何在某些情况下优于Bloom Filter,以及Go语言中实现Cuckoo Filter的细节。 ...

    open bloom filter

    open bloom filter是我见过的bloom filter之中写的比较好的一个,但是其中的数值范围过大,获取hash函数时测试次数过多。希望对你有所裨益,使用的时候请遵守原作者的权益。见过csdn上好多不要脸的人,别人写的东西...

Global site tag (gtag.js) - Google Analytics