`
ansjsun
  • 浏览: 203781 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多
哈哈...我终于写了个BloomFilter

这个是干嘛用的???


恩...一般比较常见的应用是字符串去重..也就是...恩..就是采集网址去重.防止重复采集

下面是我自己写的个例子

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\Users\\caiqing\\workspace\\CQ\\library\\dictionary-utf8.TXT"),"UTF-8")) ;
		String str = null ;
		System.out.println("begin");
		long start = System.currentTimeMillis() ;
		while((str=br.readLine())!=null){
			if(bf.containsAndAdd(str)){
				System.out.println("containsAndAdd:"+str);
			}
		}
		
		br.close() ;
		
		br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\Users\\caiqing\\workspace\\CQ\\library\\dictionary-utf8.TXT"),"UTF-8")) ;
			System.out.println("begin-find");
			start = System.currentTimeMillis() ;
			while((str=br.readLine())!=null){
				if(!bf.contains(str)){
					System.out.println("contains:"+str);
				}
			}
			
		System.out.println(System.currentTimeMillis()-start);
		br.close() ;



对分词词典79962个词进行插入.和查重..准确率100%.算上IO时间耗时79毫秒...

源码我放到下面了大家可以下载..还有..要的人给个评论吧..我的博客好冷清啊


今天回来用我的过滤器做了个测试哎...效果不是很理想啊..在千万级数据还行.再大就不好办啦



重新抄袭了一些经典的算法...(哎中科院老师的算法有毛病有三个Hash算法都是白给的.也许是我从c转到java没写对吧..)  现在效率1亿..64m内存大约失误率是0.0013  12m的失误个数是44..另外我吧能加的hash都加上了.这里只测试了5个..哈哈
我很满意非常满意....请大家敬请下载吧

10000000
32m:0
64m:0
128m:0

100000000
64m:146546
128m:44
256m:0


分享到:
评论
10 楼 assasszt 2015-04-15  
请问 能不能加入写入文件功能,不然的话 是每次 执行 都是一个新的 吗?上一次执行 加入的 是不是就  不再里面了呢?
9 楼 lhj_6270 2014-12-23  
楼主不错。果然不是一般人。再接再厉弄个软件出来。
8 楼 tuoxinzhou 2013-12-31  
不错哦。加油
7 楼 tuoxinzhou 2013-11-26  
加油,不知道现在还有没有继续新的东东啊,最近在研究这个,很高兴看到你的博客。
6 楼 bzq19881115 2013-11-21  
最近需要学习学习!
5 楼 rick_liao 2012-10-18  
学习了,谢谢
4 楼 happyITLife 2012-06-06  
为什么不给个完整的呢?
3 楼 ericlyf 2011-09-20  
不错不错,学习了
2 楼 flootball 2011-09-20  
很少研究这个,先顶哈。
1 楼 xingcxb 2011-09-15  
     记得当年去外企面试的时候搞了个类似的陷阱,跳进去出不来....

相关推荐

    【技术分享】Bloomfilter布隆过滤器.pptx

    Redisson是一个Java客户端,它不仅支持Redis的各种功能,还包含了布隆过滤器的实现。通过使用Redisson,用户可以在分布式环境中利用布隆过滤器,提高系统的可扩展性和效率。 总的来说,布隆过滤器是一种在空间效率...

    布隆过滤器BloomFilters的一个简单Java库

    布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。在Java开发中,特别是在处理大数据、内存限制或需要快速查询是否存在某个元素的场景下,布隆过滤器是一个...

    java实现的布隆过滤器算法

    在提供的压缩包文件`Bloom Filter`中,可能包含了具体的Java实现代码,你可以通过阅读和分析这些代码来深入理解布隆过滤器的工作原理和Java实现细节。此外,还可以通过测试不同参数组合下的性能,进一步了解布隆过滤...

    布隆过滤器-BloomFilter

    例如,`BloomFilter.java`和`MyBloomFilter.java`可能是两个不同的实现版本。自定义实现通常包括以下几个关键部分: 1. **位数组(Bit Array)**:存储元素的位向量,所有操作都在这个数组上进行,大小通常是根据...

    java-bloomfilter

    Java 中实现布隆过滤器,通常可以使用开源库Guava提供的`com.google.common.hash.BloomFilter`类。Guava的布隆过滤器提供了灵活的参数配置,包括期望元素数量(expectedInsertions)和错误率(fpp,False Positive ...

    利用Java手写一个布隆过滤器Bloom Filter

    布隆过滤器是一种数据结构,主要用于判断一个元素是否可能在一个集合中存在。它可以在插入和查询数据时快速地判断一个元素是否可能在这个集合中,比如在缓存中查询一个元素是否存在。 它的原理是使用多个哈希函数对...

    介绍Bloom Filter(布隆过滤器)原理、实现及具体应用

    布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会误判,但不会漏判,即可能存在假阳性(False Positive),但绝不会有假阴性(False Negative)。...

    Java 实现的高性能布隆过滤器!.zip

    Java 实现的高性能布隆过滤器!.zip,Advanced Bloom Filter Based Algorithms for Efficient Approximate Data De-Duplication in Streams

    布隆过滤器的实现,以及测试用例,简单易懂并做了一些注释

    布隆过滤器是一种概率型数据结构,用于判断一个元素是否可能在一个集合中。它是由Burton Howard Bloom在1970年提出的,主要用于解决大数据集的存储和查询问题,尤其在空间效率上有着显著优势。在数据库、搜索引擎、...

    布隆过滤器-详说布隆过滤器.pdf

    在Java中,布隆过滤器的实现非常便捷,尤其是利用了Guava库提供的BloomFilter类。开发者可以非常简单地通过调用put方法添加元素,通过mayContain方法来检查元素是否存在。不仅如此,布隆过滤器还允许开发者自定义...

    安装布隆过滤器,布隆过滤器压缩包

    在Java中,我们可以利用开源库如RedisBloom来实现布隆过滤器的功能。 RedisBloom是一个扩展Redis功能的模块,提供了布隆过滤器的数据类型,使得在Redis中存储和查询数据时能够利用布隆过滤器的特性,有效避免不必要...

    布隆过滤器(Bloom Filter)的Java实现方法

    【布隆过滤器(Bloom Filter)的Java实现】 布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会产生误报(false positive),但不会产生漏报(false negative)。在Java...

    test-bloomfilter.zip

    要使用Redisson实现布隆过滤器,我们需要在SpringBoot应用中引入Redisson的依赖,配置Redis连接,并创建对应的BloomFilter实例。在代码中,我们可以调用`bf.add()`方法向过滤器添加元素,使用`bf.contains()`方法...

    PDD–基于高级布隆过滤器算法用于高效得删除数据流中的近似重复数据

    首先,我们要理解什么是布隆过滤器(Bloom Filter)。布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会误判,即可能将不存在的元素判断为存在,但不会漏掉真正存在的...

    bloomfilter:布隆过滤器Java

    这个压缩包文件"bloomfilter-master"很可能包含了一个Java实现的布隆过滤器库。 布隆过滤器的工作原理基于多个哈希函数。当一个元素加入集合时,它会经过几个独立的哈希函数映射到过滤器中的位数组的不同位置,并将...

    bloom-filter:Java中Bloom过滤器的实现

    在Java中实现布隆过滤器,可以使用Guava库提供的`com.google.common.hash.BloomFilter`类。Guava的BloomFilter提供了创建、添加元素和查询元素的方法,并且支持动态调整过滤器的大小以控制误判率。以下是一个简单的...

    Python-cljcbloom一个用Clojure脚本实现的跨平台布隆过滤器

    布隆过滤器是一种空间效率极高的概率型数据结构,用于测试一个元素是否可能在一个集合中。它可能会产生误报(false positive),但不会产生误删(false negative)。Python-cljcbloom项目是基于Clojure语言实现的一...

    BloomFilter-Java:Bloom过滤器的实现(双重哈希,三次哈希,增强型双重哈希)

    布隆过滤器是一种节省空间的概率数据结构。 提出的解决方案是用Java实现的。 Python实现可。 它包含几种用于生成独立哈希函数的方法: 双重散列 三重哈希 增强型双散列 Peter C. Dillinger和Panagiotis Manolios的...

    bloom过滤器解决缓存击穿问题1

    例如,Java中的Guava库提供了BloomFilter类。在测试中,我们可以看到,即使是百万级别的数据集,判断一个元素是否存在于集合中,也只需要几十微秒的时间,性能极其高效。同时,布隆过滤器的误判率可以通过设置参数...

Global site tag (gtag.js) - Google Analytics