布隆过滤器是用来处理爬虫去重问题或者黑名单问题的。
爬虫去重问题:将访问过的URL存储在数据库中,对于新进的URL,判断数据库中是否存在这个URL。(URL的量很大)
黑名单问题:假设给定100亿个URL是黑名单,用户输入一个URL,判断这个URL是否在黑名单中存在。
我们以黑名单问题举例:
布隆过滤器:
1:首先准备一个比特类型的数组,数组的大小为m。
如何准备呢?
我们知道,一个整型的大小是四个字节,一个字节是八个比特,所以一个整型是32个比特。我们可以用一个整型数组来构造出一个比特类型的数组。
假设现在有一个整型数组a[1000],那么它代表大小为1000*32的比特类型的数组。
如何实现这个比特类型的数组呢?
代码如下:
void tuhei(int m)//将比特数组中m位置标记
{
int intIndex=m/32;
int bitIndex=m%32;
arr[intIndex]=(arr[intIndex]|(1<<bitIndex));
}
int main()
{
int arr[1000];
memset(arr,0,sizeof(arr));
tuhei(30000);
}
2:对于每一个黑名单里的URL,我们通过K个哈希函数算出K个哈希值(有可能小于K个),然后把每个哈希值都(%m),对于每个哈希值(%m