【大数据管理】Java实现布隆过滤器

题目:

用编程语言实现布隆过滤器(内存中实现),要求如下:

1.自定数据(数字或者字符串都行)

2.构建布隆过滤器(有一个方法能够判别数据是否存在,输出为true或者false)

3.必须手动实现,不能调现有库

解题思路

Bloom过滤器原理比较简单,类似一个hash set,用来判断某个元素(key)是否在某个集合中。和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。

算法描述如下:

1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数

2. 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0

3. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1

4. 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。

package BloomFilter;

import java.util.BitSet;

public class BloomFilter {

    //bloomFilter大小
    private static final int SIZE = 1<<24;

    //bitset初始化
    private static final BitSet bitset=new BitSet();

    //计算hash值的辅助数组
    static final int[] seeds= {2, 3, 5, 7, 11, 13, 17, 19};

    //获取hash值
    public static int getHash(String data,int seed){
        int hash = 0;
        char arrChar[] = data.toCharArray();
        if (arrChar.length>0){
            for (int i = 0;i

你可能感兴趣的:(哈希算法,散列表,数据结构)