欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-05 16:22:27
...
哈哈...我终于写了个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