bloom filter

#include <stdio.h>
#include <stdlib.h>
void set_bitmap(char* b, unsigned int i) {
    b[i / 8] |= 1 << (i & 7);
}
void unset_bitmap(char* b, unsigned int i) {
    b[i / 8] &= ~(1 << (i & 7));
}
char get_bitmap(char* b, unsigned int i) {
    return b[i / 8] & (1 << (i & 7)) ? 1 : 0;
}
char* create_bitmap(unsigned int n) {
    return malloc((n + 7) / 8);
}
unsigned int sdbm(char* str) {
  unsigned int hash = 0;
  while(*str != 0) {
    hash = ((hash << 6) + (hash << 16) - hash) + *str++;
  }
  return hash;
}
char* bloomFilter; int size;
void createBloomFilter(unsigned int n) {
  bloomFilter = create_bitmap(n);
  size = n;
}
void addElement(char* str) {
  set_bitmap(bloomFilter, sdbm(str) % size);
}
char checkElement(char* str) {
  return get_bitmap(bloomFilter, sdbm(str) % size);
}
int main() {
  createBloomFilter(1024);
  addElement("hello");
  addElement("world");
  addElement("please");
 
  printf("%d", checkElement("please"));
  printf("%d", checkElement("world")); 
  printf("%d\n", checkElement("checkout"));
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值