在爬虫工作过程中,需要把爬过的URL做成索引,之后每次分析到新的URL时与爬过的URL匹配
一般可以使用字符串匹配,但如果有几十万,上百万数据时呢?匹配过程会非常缓慢,
这时可以使用这个算法,用哈希对URL计算一个值,然后存在一个足够大的数组中
而哈希值对应该数组的索引,在新的URL匹配时,对URL进行哈希计算,计算的值 为数组的索引
这样每次匹配速度会极快,下面是代码的实现
#include <stdio.h>
#include <string.h>
int url[10000];
int Get_Url_HashIndex(char *Url,int Num)
{
int hash = 0;
int i;
char *b= (char*)&hash;
for(i=0;i<strlen(Url);i++)
{
b[i % 4] = b[i % 4] ^ Url[i];
}
return hash % Num;
}
void main()
{
int urlindex = Get_Url_HashIndex("httn",10000);
printf("hash:%d\n",urlindex);
if (url[urlindex] == 0)
{
printf("首次匹配");
url[urlindex] = 1;
}
urlindex = Get_Url_HashIndex("http://www.baidu.com",10000);
if (url[urlindex] == 0)
{
printf("测试匹配");
url[urlindex] = 1;
}
}