stone2083

布隆过滤器(BloomFilter)

资料:
wikipedia--bloom filter

使用场景,原理简介之中文资料:
数学之美系列二十一 - 布隆过滤器(Bloom Filter)

核心内容(摘自Google黑板报文章内容):


BloomFilter简易实现:
public class SimpleBloomFilter {

    
private static final int   DEFAULT_SIZE = 2 << 24;
    
private static final int[] seeds        = new int[] { 71113313761, };

    
private BitSet             bits         = new BitSet(DEFAULT_SIZE);
    
private SimpleHash[]       func         = new SimpleHash[seeds.length];

    
public static void main(String[] args) {
        String value 
= "stone2083@yahoo.cn";
        SimpleBloomFilter filter 
= new SimpleBloomFilter();
        System.out.println(filter.contains(value));
        filter.add(value);
        System.out.println(filter.contains(value));
    }

    
public SimpleBloomFilter() {
        
for (int i = 0; i < seeds.length; i++) {
            func[i] 
= new SimpleHash(DEFAULT_SIZE, seeds[i]);
        }
    }

    
public void add(String value) {
        
for (SimpleHash f : func) {
            bits.set(f.hash(value), 
true);
        }
    }

    
public boolean contains(String value) {
        
if (value == null) {
            
return false;
        }
        
boolean ret = true;
        
for (SimpleHash f : func) {
            ret 
= ret && bits.get(f.hash(value));
        }
        
return ret;
    }

    
public static class SimpleHash {

        
private int cap;
        
private int seed;

        
public SimpleHash(int cap, int seed) {
            
this.cap = cap;
            
this.seed = seed;
        }

        
public int hash(String value) {
            
int result = 0;
            
int len = value.length();
            
for (int i = 0; i < len; i++) {
                result 
= seed * result + value.charAt(i);
            }
            
return (cap - 1& result;
        }

    }

}



posted on 2010-01-30 15:00 stone2083 阅读(2574) 评论(0)  编辑  收藏 所属分类: java


只有注册用户登录后才能发表评论。


网站导航: