对于海量字符串的查找,一般有两种方法,一种是建树,还有一种就是bf算法,即布隆过滤器,这个从原来上讲比较简单,也易于实现,主要就是根据哈希算法来实现。

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的更多相关文章

  1. 海量数据处理算法—Bloom Filter

    海量数据处理算法—Bloom Filter 1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bl ...

  2. 【转】海量数据处理算法-Bloom Filter

    1. Bloom-Filter算法简介 Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在于 ...

  3. 海量数据处理之Bloom Filter详解

    前言 :  即可能误判    不会漏判   一.什么是Bloom Filter     Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函 ...

  4. php实现Bloom Filter

    Bloom Filter(BF) 是由Bloom在1970年提出的一种多哈希函数映射的高速查找算法,用于高速查找某个元素是否属于集合, 但不要求百分百的准确率. Bloom filter通经常使用于爬 ...

  5. Bloom Filter解析

    布隆过滤器简介:https://www.cnblogs.com/Jack47/p/bloom_filter_intro.html 布隆过滤器详解:原文链接:http://www.cnblogs.com ...

  6. Bloom Filter的算法

     Bloom Filter的算法: 为了降低冲突的概念,Bloom Filter使用了多个哈希函数,而不是一个.创建一个m位BitSet,先将所有位初始化为0,然后选择k个不同的哈希函数.第i个哈希函 ...

  7. Bloom Filter算法

    Bloom Filter算法详解 什么是布隆过滤器 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数 (下面详细说),实际上你也可 ...

  8. 海量信息库,查找是否存在(bloom filter布隆过滤器)

    Bloom Filter(布隆过滤器) 布隆过滤器用于测试某一元素是否存在于给定的集合中,是一种空间利用率很高的随机数据结构(probabilistic data structure),存在一定的误识 ...

  9. 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想

    转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton ...

随机推荐

  1. wpf custom control

    最近在做WPF,记录一下自定义控件的制作过程,源码请点击:源码. 1.目标 实现一个如图所示的可增减的数字框: 2.先画Template 可以在Generic.xaml中画,也可以用MergedDic ...

  2. 【转发】linux yum命令详解

    linux yum命令详解 yum(全 称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理, ...

  3. 更改layout的布局

    创建了一个layout,缺省都是LinearLayout,原来都在xml把他改成其他布局,习惯了拖放的方式觉得挺麻烦. 其实vs2013有这个功能,就是在设计界面单机右键可以删除布局,然后拖一个布局进 ...

  4. 虚拟机无法上网的问题:无法启动VMnet0等问题

    虚拟机无法上网,由于之前安装过虚拟机,后来将它卸载了,然后重新安装,最后出现了虚拟机无法上网.刚开始以为是系统的原因,于是就通过linux命令查看系统里面的网卡时是否启动,如:/etc/init.d/ ...

  5. 打印的infoplist文件

    Printing description of dict: { CFBundleDevelopmentRegion = en; CFBundleExecutable = yybjproject; CF ...

  6. 提示错误#165 too few argument in function call

    调用函数时,参数个数少于函数定义.检查一下函数定义和参数调用,两个要一致.

  7. FastReport产品介绍及免费下载地址

    公司地址: 俄罗斯 公司网址: http://www.fast-report.com 详细信息: 由技术总监Alexander Tzyganenko创建于1998年,Fast Reports, Inc ...

  8. 作业1-我的第一个博客&GuiHub简单练习

    自我介绍                   姓名:苗中峰(不要问有什么含义,翻着字典取的名,翻到什么字就取了什么字)                               性别:男(不解释) ...

  9. HDU4055 - number string(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 思路:dp[i][j]表示处理前i个字符以j结尾可能的序列数. 当a[i]=='I'时,dp[i ...

  10. Windows系统定时重开或者关机

    at 6:00 /every:M,T,W,Th,F,S,Su cmd /c shutdown -r -t 60 (每天早上6点自动重启一次) at 0:00 /every:M,T,W,Th,F,S,S ...