亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

bloom filter概念講解以及代碼分析

2020-01-26 15:50:47
字體:
來源:轉載
供稿:網友

一. 簡介
1.什么是bloom filter?
Bloom filter 是由 Howard Bloom 在 1970 年提出的二進制向量數據結構,它具有很好的空間和時間效率,被用來檢測一個元素是不是集合中的一個成員,這種檢測只會對在集合內的數據錯判,而不會對不是集合內的數據進行錯判,這樣每個檢測請求返回有“在集合內(可能錯誤)”和“不在集合內(絕對不在集合內)”兩種情況,可見 Bloom filter 是犧牲了正確率換取時間和空間。

2.bloom filter的計算方法?
如需要判斷一個元素是不是在一個集合中,我們通常做法是把所有元素保存下來,然后通過比較知道它是不是在集合內,鏈表、樹都是基于這種思路,當集合內元素個數的變大,我們需要的空間和時間都線性變大,檢索速度也越來越慢。 Bloom filter 采用的是哈希函數的方法,將一個元素映射到一個 m 長度的陣列上的一個點,當這個點是 1 時,那么這個元素在集合內,反之則不在集合內。這個方法的缺點就是當檢測的元素很多的時候可能有沖突,解決方法就是使用 k 個哈希 函數對應 k 個點,如果所有點都是 1 的話,那么元素在集合內,如果有 0 的話,元素則不在集合內。

3.bloom filter的特點?
Bloom filter 優點就是它的插入和查詢時間都是常數,另外它查詢元素卻不保存元素本身,具有良好的安全性。它的缺點也是顯而易見的,當插入的元素越多,錯判“在集合內”的概率就越大了,另外 Bloom filter 也不能刪除一個元素,因為多個元素哈希的結果可能在 Bloom filter 結構中占用的是同一個位,如果刪除了一個比特位,可能會影響多個元素的檢測。

二. 代碼實現
現下面在linux下實現了bloom filter的功能代碼:

復制代碼 代碼如下:

// bloom.h:
#ifndef __BLOOM_H__
#define __BLOOM_H__

#include<stdlib.h>

typedef unsigned int (*hashfunc_t)(const char *);
typedef struct {
size_t asize;
unsigned char *a;
size_t nfuncs;
hashfunc_t *funcs;
} BLOOM;

BLOOM *bloom_create(size_t size, size_t nfuncs, ...);
int bloom_destroy(BLOOM *bloom);
int bloom_add(BLOOM *bloom, const char *s);
int bloom_check(BLOOM *bloom, const char *s);

#endif

// bloom.c:
#include<limits.h>
#include<stdarg.h>

#include"bloom.h"

#define SETBIT(a, n) (a[n/CHAR_BIT] |= (1<<(n%CHAR_BIT)))
#define GETBIT(a, n) (a[n/CHAR_BIT] & (1<<(n%CHAR_BIT)))

BLOOM *bloom_create(size_t size, size_t nfuncs, ...)
{
BLOOM *bloom;
va_list l;
int n;

if(!(bloom=malloc(sizeof(BLOOM)))) return NULL;
if(!(bloom->a=calloc((size+CHAR_BIT-1)/CHAR_BIT, sizeof(char)))) {
free(bloom);
return NULL;
}
if(!(bloom->funcs=(hashfunc_t*)malloc(nfuncs*sizeof(hashfunc_t)))) {
free(bloom->a);
free(bloom);
return NULL;
}

va_start(l, nfuncs);
for(n=0; n<nfuncs; ++n) {
bloom->funcs[n]=va_arg(l, hashfunc_t);
}
va_end(l);

bloom->nfuncs=nfuncs;
bloom->asize=size;

return bloom;
}

int bloom_destroy(BLOOM *bloom)
{
free(bloom->a);
free(bloom->funcs);
free(bloom);

return 0;
}

int bloom_add(BLOOM *bloom, const char *s)
{
size_t n;

for(n=0; n<bloom->nfuncs; ++n) {
SETBIT(bloom->a, bloom->funcs[n](s)%bloom->asize);
}

return 0;
}

int bloom_check(BLOOM *bloom, const char *s)
{
size_t n;

for(n=0; n<bloom->nfuncs; ++n) {
if(!(GETBIT(bloom->a, bloom->funcs[n](s)%bloom->asize))) return 0;
}

return 1;
}  

// test.c:
#include<stdio.h>
#include<string.h>

#include"bloom.h"
//下面為兩種哈希算法函數
unsigned int sax_hash(const char *key)
{
unsigned int h=0;

while(*key) h^=(h<<5)+(h>>2)+(unsigned char)*key++;

return h;
}


unsigned int sdbm_hash(const char *key)
{
unsigned int h=0;
while(*key) h=(unsigned char)*key++ + (h<<6) + (h<<16) - h;
return h;
}

int main(int argc, char *argv[])
{
FILE *fp;
char line[1024];
char *p;
BLOOM *bloom;

if(argc<2) {
fprintf(stderr, "ERROR: No word file specified/n");
return EXIT_FAILURE;
}

if(!(bloom=bloom_create(2500000, 2, sax_hash, sdbm_hash))) {
fprintf(stderr, "ERROR: Could not create bloom filter/n");
return EXIT_FAILURE;
}

if(!(fp=fopen(argv[1], "r"))) {
fprintf(stderr, "ERROR: Could not open file %s/n", argv[1]);
return EXIT_FAILURE;
}

while(fgets(line, 1024, fp)) {
if((p=strchr(line, '/r'))) *p='/0';//回車
if((p=strchr(line, '/n'))) *p='/0';//換行

bloom_add(bloom, line);
}

fclose(fp);

while(fgets(line, 1024, stdin)) {
if((p=strchr(line, '/r'))) *p='/0';
if((p=strchr(line, '/n'))) *p='/0';

p=strtok(line, " /t,.;:/r/n?!-/()");
while(p) {
if(!bloom_check(bloom, p)) {
printf("No match for ford /"%s/"/n", p);
}
                    else
                      printf("match for ford /"%s/"/n",p);
p=strtok(NULL, " /t,.;:/r/n?!-/()");
}
}

bloom_destroy(bloom);

return EXIT_SUCCESS;
}  


// Makefile:
   all: bloom

bloom: bloom.o test.o
           cc -o bloom -Wall -pedantic bloom.o test.o

bloom.o: bloom.c bloom.h
           cc -o bloom.o -Wall -pedantic -ansi -c bloom.c

test.o: test.c bloom.h
           cc -o test.o -Wall -pedantic -ansi -c test.c

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品国精品久久99热| 黄色一区二区在线观看| 色偷偷88888欧美精品久久久| 国产一区二区三区视频在线观看| 尤物精品国产第一福利三区| 国产精品欧美久久久| 岛国视频午夜一区免费在线观看| 国产精品久久久久久超碰| 国产精品美女免费视频| 欧美日韩精品在线| 国产精品久久久久aaaa九色| 国产精品亚洲一区二区三区| 国产一区二区三区视频免费| 欧美成人午夜视频| 国产精品美女主播| 在线日韩精品视频| 久久久之久亚州精品露出| 国产精品亚洲综合天堂夜夜| 97精品在线观看| 成人自拍性视频| 国产一区二区三区毛片| 亚洲女人天堂色在线7777| 久久精品国产一区| 日韩av男人的天堂| 欧美在线视频一区二区| 原创国产精品91| 欧美日韩国产丝袜美女| 亚洲va欧美va国产综合久久| 日韩一区视频在线| 亚洲一区美女视频在线观看免费| 日韩欧美有码在线| 国产一区在线播放| 国产精品久久久| 亚洲国产私拍精品国模在线观看| 久久久久久亚洲精品| 日韩亚洲综合在线| 国产中文字幕日韩| 久久999免费视频| 青草成人免费视频| 国产一区二区三区日韩欧美| 日韩欧美一区二区三区久久| 欧美刺激性大交免费视频| 欧美孕妇孕交黑巨大网站| 欧美日韩成人网| 91久久综合亚洲鲁鲁五月天| 国模极品一区二区三区| 亚洲国产日韩欧美综合久久| 日韩精品中文字幕在线播放| 亚洲精品国产精品国产自| 成人国产亚洲精品a区天堂华泰| 国产91色在线播放| 国产精品美女视频网站| www.日韩免费| 色偷偷噜噜噜亚洲男人| 精品成人乱色一区二区| 精品成人69xx.xyz| 日韩成人在线观看| 久久av红桃一区二区小说| 亚洲成在人线av| 欧美第一淫aaasss性| 久久久999成人| 尤物99国产成人精品视频| 日韩精品在线免费| 久久亚洲私人国产精品va| 色爱精品视频一区| 日韩中文理论片| 国产福利精品在线| 日韩av电影在线网| 日韩一区二区福利| 国产91精品网站| 欧美日韩人人澡狠狠躁视频| 在线播放亚洲激情| 在线看日韩欧美| 国产suv精品一区二区三区88区| 伦理中文字幕亚洲| 欧美福利视频网站| 亚洲色图欧美制服丝袜另类第一页| 亚洲第一色中文字幕| 国产精品爱久久久久久久| 欧美精品videofree1080p| 欧美性生交xxxxx久久久| 欧美大肥婆大肥bbbbb| 亚洲欧洲免费视频| 亚洲国产欧美日韩精品| 日韩av免费看| 91精品91久久久久久| 国产成人精品一区二区三区| 青青久久aⅴ北条麻妃| 国产精品久久精品| 91国产一区在线| 九九九热精品免费视频观看网站| 国产精品aaaa| 91夜夜未满十八勿入爽爽影院| 成人免费视频在线观看超级碰| 日本高清不卡的在线| 日韩理论片久久| 亚洲欧美国产精品久久久久久久| 日本不卡高字幕在线2019| 欧美洲成人男女午夜视频| 91亚洲国产精品| 亚洲白拍色综合图区| 爽爽爽爽爽爽爽成人免费观看| 中文字幕av一区二区| 欧美激情奇米色| 国产在线精品自拍| 久久久久亚洲精品成人网小说| 欧美日韩精品二区| 中文字幕精品—区二区| 久久综合五月天| 亚洲美女久久久| 国产亚洲精品综合一区91| 国产97色在线|日韩| 亚洲欧美国产日韩中文字幕| 国产z一区二区三区| 日韩av影片在线观看| 日韩精品极品毛片系列视频| 久久成人这里只有精品| 精品久久久久久亚洲精品| 这里只有精品在线观看| 精品一区二区三区四区在线| 777国产偷窥盗摄精品视频| 日本一欧美一欧美一亚洲视频| 精品福利免费观看| 日韩精品在线私人| 最近更新的2019中文字幕| 国产精品欧美在线| 91网站在线免费观看| 亚洲欧美国产va在线影院| 欧美性在线视频| 久久久精品在线观看| 亚洲国产精品久久久久秋霞不卡| 国产精品网红直播| 精品五月天久久| 国产成人精品综合| 亚洲国产精品资源| 欧美一级成年大片在线观看| 亚洲欧美日韩在线一区| 亚洲人成网站999久久久综合| 欧美久久精品一级黑人c片| 人体精品一二三区| 亚洲欧洲午夜一线一品| 欧美性生交大片免费| 尤物精品国产第一福利三区| 91久久精品国产91性色| 久久久久久久激情视频| 国产啪精品视频网站| 一区二区三区高清国产| 久久人人爽国产| 最近2019年好看中文字幕视频| 国产精品福利网| 国产精品视频自拍| 久久视频免费在线播放| 国产精品高清网站| 中文字幕在线国产精品| 2019中文在线观看| 精品视频在线观看日韩| 全球成人中文在线| 91精品在线影院| 亚洲视频在线观看网站| 精品国产欧美成人夜夜嗨| 日韩精品在线免费| 欧美性猛交xxxx富婆| 亚洲丁香婷深爱综合| 亚洲精品久久久久中文字幕欢迎你|