約80,000文字列を格納するブルームフィルターを作成しようとしています...今、各文字列は2ワードの長さになると推測しています。80,000文字列を保存するには..80,000*2 = 16kBytesが必要ですか?
16kB = 16 * 1000 * 8 = 128,000ビットを格納する必要がある場合は、少なくとも2 ^ 17=131,072のビットマップが必要になります。これは私が今持っているものです
int main(){
char *str = "hello world";
int c = sizeof(unsigned char);
/*
* declare the bit array
*/
unsigned char bit_arr[128000/c];
/*
* couple of hash functions
*/
unsigned int bkd = bkdrhash(str, strlen(str));
unsigned int rsh = rshash(str, strlen(str));
unsigned int jsh = jshash(str, strlen(str));
/*
* logic to set bit
* Access the bitmap arr element
* And then set the required bits in that element
*/
bit_arr[bkd/c] & (1 << (bkd%c));
bit_arr[rsh/c] & (1 << (rsh%c));
bit_arr[jsh/c] & (1 << (jsh %c));
}
これを行うためのより良い/最適な方法はありますか?
ありがとう