海量字符串查找——bloom filter,c
int len(char *ch)
{
int m=0;
while(ch[m]!='\0') {
m++;
}
return m;
} bool judge(char *vertor,char ch[]){
if (GETBIT(vertor,RSHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,JSHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,PJWHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,ELFHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,BKDRHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,SDBMHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,DJBHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,DEKHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,BPHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,FNVHash(ch,len(ch)))==0) return false;
if (GETBIT(vertor,APHash(ch,len(ch)))==0) return false;
else
return true; } int main(int argc,char *argv[]){
argv[1]="/Users/emaillist.dat";
argv[2]="/Users/checklist.dat";
argv[3]="/Users/result2222.dat"; clock_t a=clock();
int pos=1,k=0,j=0;
FILE *fp_strpool,*fp_checkedstr,*fp_result;
fp_strpool=fopen(argv[1], "r");//打开三个文件
fp_checkedstr=fopen(argv[2], "r");
fp_result=fopen(argv[3], "w");
char ch[ARRAY_SIZE];
char *vertor;
char yes[5]="yes\n";
char no[4]="no\n";
vertor=(char *)calloc(SIZE , sizeof(char) );//申请位数组
for (int i=0; i<SIZE; i++) {
vertor[i]=0;
}
while (fscanf(fp_strpool, "%s",ch)==1) {
//fgets(ch, ARRAY_SIZE, fp_strpool);
SETBIT(vertor, RSHash(ch,len(ch)));
SETBIT(vertor, JSHash(ch,len(ch)));
SETBIT(vertor, PJWHash(ch,len(ch)));
SETBIT(vertor, ELFHash(ch,len(ch)));
SETBIT(vertor, BKDRHash(ch,len(ch)));
SETBIT(vertor, SDBMHash(ch,len(ch)));
SETBIT(vertor, DJBHash(ch,len(ch)));
SETBIT(vertor, DEKHash(ch,len(ch)));
SETBIT(vertor, BPHash(ch,len(ch)));
SETBIT(vertor, FNVHash(ch,len(ch)));
SETBIT(vertor, APHash(ch,len(ch)));
j++; }
while (fscanf(fp_checkedstr, "%s",ch)==1) {
k++;
//fgets(ch, ARRAY_SIZE, fp_checkedstr);
if (judge(vertor,ch)) {
printf("%d\n",pos);
pos++;
fputs(yes, fp_result);
}
else
fputs(no, fp_result);
}
printf("%d %d\n",j,k);
fclose(fp_result);
fclose(fp_checkedstr);
fclose(fp_strpool);//关闭文件
clock_t b=clock();
double duration = (double)(b - a) / CLOCKS_PER_SEC;
printf( "%f seconds\n", duration );
}
海量字符串查找——bloom filter,c的更多相关文章
- 海量数据处理算法—Bloom Filter
海量数据处理算法—Bloom Filter 1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bl ...
- 【转】海量数据处理算法-Bloom Filter
1. Bloom-Filter算法简介 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在于 ...
- 海量数据处理之Bloom Filter详解
前言 : 即可能误判 不会漏判 一.什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函 ...
- php实现Bloom Filter
Bloom Filter(BF) 是由Bloom在1970年提出的一种多哈希函数映射的高速查找算法,用于高速查找某个元素是否属于集合, 但不要求百分百的准确率. Bloom filter通经常使用于爬 ...
- Bloom Filter解析
布隆过滤器简介:https://www.cnblogs.com/Jack47/p/bloom_filter_intro.html 布隆过滤器详解:原文链接:http://www.cnblogs.com ...
- Bloom Filter的算法
Bloom Filter的算法: 为了降低冲突的概念,Bloom Filter使用了多个哈希函数,而不是一个.创建一个m位BitSet,先将所有位初始化为0,然后选择k个不同的哈希函数.第i个哈希函 ...
- Bloom Filter算法
Bloom Filter算法详解 什么是布隆过滤器 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数 (下面详细说),实际上你也可 ...
- 海量信息库,查找是否存在(bloom filter布隆过滤器)
Bloom Filter(布隆过滤器) 布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识 ...
- 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想
转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html 布隆过滤器[1](Bloom Filter)是由布隆(Burton ...
随机推荐
- LibSVM使用指南
LibSVM使用指南 一. SVM简介 在进行下面的内容时我们认为你已经具备了数据挖掘的基础知识. SVM是新近出现的强大的数据挖掘工具,它在文本分类.手写文字识别.图像分类.生物序列分析等实 ...
- lucene 查询的使用
各种查询方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser查询字符串 ------------------------> Query对象 ...
- long long 读数scanf的转换 #define
在win32的评测系统下,long long scanf 要用"%I64d" ,而网上评测和考试要用"%lld",因此,难免有点麻烦,还会runtime err ...
- 【STL】-deque的用法
初始化: #include <deque> deque<float> fdeque; 算法: fdeque.push_front(f); fdeque.push_back(f) ...
- Opencv的基础结构与内容
- ajax跨域相关
ajax 技术使用xmlhttprequest组件附送请求时,发送请求的url和本网页的url地址必须在同一个域名下如果需要跨域,可以使用iframe或者<javascript src=&quo ...
- hdu 1034 (preprocess optimization, property of division to avoid if, decreasing order process) 分类: hdoj 2015-06-16 13:32 39人阅读 评论(0) 收藏
IMO, version 1 better than version 2, version 2 better than version 3. make some preprocess to make ...
- 移动设备和SharePoint 2013 - 第1部分:概述
博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...
- C语言:typedef 跟 define 的区别
typedef (int*) pINT1;以及下面这行:#define pINT2 int* pINT1 a,b; 与pINT2 a,b; 定义的a,b 有差别吗 回答: typedef作为类型定义关 ...
- win10下安装centOS 7 U盘
前段时间我把朋友帮忙装的ubuntu15.10给玩坏了=.=虽然后来自己在另一台电脑上成功装了ubuntu16.04和win7双系统,但是...这台电脑也要装个别的系统才比较..不空.所以决定装个ce ...