Java版本的BloomFilter (布隆过滤器)
程序员文章站
2022-06-05 16:22:27
...
哈哈...我终于写了个BloomFilter
这个是干嘛用的???
恩...一般比较常见的应用是字符串去重..也就是...恩..就是采集网址去重.防止重复采集
下面是我自己写的个例子
对分词词典79962个词进行插入.和查重..准确率100%.算上IO时间耗时79毫秒...
源码我放到下面了大家可以下载..还有..要的人给个评论吧..我的博客好冷清啊
今天回来用我的过滤器做了个测试哎...效果不是很理想啊..在千万级数据还行.再大就不好办啦
重新抄袭了一些经典的算法...(哎中科院老师的算法有毛病有三个Hash算法都是白给的.也许是我从c转到java没写对吧..) 现在效率1亿..64m内存大约失误率是0.0013 12m的失误个数是44..另外我吧能加的hash都加上了.这里只测试了5个..哈哈
我很满意非常满意....请大家敬请下载吧
这个是干嘛用的???
恩...一般比较常见的应用是字符串去重..也就是...恩..就是采集网址去重.防止重复采集
下面是我自己写的个例子
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
上一篇: 两个大数字相乘
下一篇: schema 访问权限问题