对于海量字符串的查找,一般有两种方法,一种是建树,还有一种就是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. LibSVM使用指南

    LibSVM使用指南 一.     SVM简介 在进行下面的内容时我们认为你已经具备了数据挖掘的基础知识. SVM是新近出现的强大的数据挖掘工具,它在文本分类.手写文字识别.图像分类.生物序列分析等实 ...

  2. lucene 查询的使用

    各种查询方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser查询字符串 ------------------------> Query对象 ...

  3. long long 读数scanf的转换 #define

    在win32的评测系统下,long long scanf 要用"%I64d" ,而网上评测和考试要用"%lld",因此,难免有点麻烦,还会runtime err ...

  4. 【STL】-deque的用法

    初始化: #include <deque> deque<float> fdeque; 算法: fdeque.push_front(f); fdeque.push_back(f) ...

  5. Opencv的基础结构与内容

  6. ajax跨域相关

    ajax 技术使用xmlhttprequest组件附送请求时,发送请求的url和本网页的url地址必须在同一个域名下如果需要跨域,可以使用iframe或者<javascript src=&quo ...

  7. 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 ...

  8. 移动设备和SharePoint 2013 - 第1部分:概述

    博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和 ...

  9. C语言:typedef 跟 define 的区别

    typedef (int*) pINT1;以及下面这行:#define pINT2 int* pINT1 a,b; 与pINT2 a,b; 定义的a,b 有差别吗 回答: typedef作为类型定义关 ...

  10. win10下安装centOS 7 U盘

    前段时间我把朋友帮忙装的ubuntu15.10给玩坏了=.=虽然后来自己在另一台电脑上成功装了ubuntu16.04和win7双系统,但是...这台电脑也要装个别的系统才比较..不空.所以决定装个ce ...