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

你可能感兴趣的:(算法讨论,JAVASE)