怎麼用C 語言實現的 Bloom Filter

2021-07-27 22:43:23 字數 1411 閱讀 3720

bloom filter是2023年由bloom提出的,最初廣泛用於拼寫檢查和資料庫系統中。近年來,隨著計算機和網際網路技術的發展,資料集的不斷擴張使得 bloom filter獲得了新生,各種新的應用和變種不斷湧現。bloom filter是乙個空間效率很高的資料結構,它由乙個位陣列和一組hash對映函式組成。bloom filter可以用於檢索乙個元素是否在乙個集合中,它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。

/* bloom.h */

#ifndef __bloom_h__

#define __bloom_h__

#include

typedef

unsigned

int (*hashfunc_t)(const

char *);

typedef

struct 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

#include

#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, ...)

if(!(bloom->funcs=(hashfunc_t*)malloc(nfuncs*sizeof(hashfunc_t))))

va_start(l, nfuncs);

for(n=0; nfuncs[n]=va_arg(l, hashfunc_t);

}va_end(l);

bloom->nfuncs=nfuncs;

bloom->asize=size;

return bloom;

}int bloom_destroy(bloom *bloom)

int bloom_add(bloom *bloom, const

char *s)

return0;}

int bloom_check(bloom *bloom, const

char *s)

return

1;}

用C語言實現FlappyBird

在開始遊戲之前,我們先了解一些輔助函式 void gotoxy int x,int y 將游標調整到 x,y 的位置 void hidecursor 隱藏游標 setconsolecursorinfo getstdhandle std output handle cursor info 我們使用乙個...

用c語言實現的FFT

一 對fft的介紹 1.fft fast fourier transformation 即為快速傅利葉變換,是離散傅利葉變換的快速演算法,它是根據離散傅利葉變換的奇 偶 虛 實等特性,對離散傅利葉變換的演算法進行改進獲得的。2.fft演算法的基本原理 fft演算法是把長序列的dft逐次分解為較短序列...

C語言 用C語言實現快速排序

快速排序時間複雜度為o nlogn 是陣列相關的題目當中經常會用到的演算法。在c語言中,陣列作為引數傳遞時會轉換為指向陣列起始位址的指標,非陣列形式的資料實參均以傳值形式呼叫。下列兩種形式的傳參時等價的,他們均指向陣列a的初始位址。void test int a void test int a 因此...