`
Rexwong
  • 浏览: 10526 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

布隆算法 BloomFilter

阅读更多
import java.util.BitSet;

/**
 * <p>
 * 布隆算法 BloomFilter
 * <i>http://www.googlechinablog.com/2007/07/bloom-filter.html</i>
 * </p>
 * <strong>扩展<tt>hash</tt>算法</strong>
 * <p>
 * 基本思想:在内存里面开辟一个区域,所有位置为零,然后 用不同的hash算法对要存入的数据计算hash值,每个hash
 * 值对内存位数求模,得到的数在内存位置上值1,置位之前需要现 判断是否已经置位,对于插入的值,所有的位置都是1时, 才认为 是重复
 * </p>
 * 
 * @author Rex.wong
 */
public class BloomFilter {
	private static int defaultSize = 2 << 24;// 2的24次方。

	private static int basic = defaultSize - 1;

	private static BitSet bits;// 内存置位

	static int check(int h) {
		return basic & h;
	}

	static int hash(int h) {
		h ^= (h >>> 20) ^ (h >>> 12);
		return h ^ (h >>> 7) ^ (h >>> 4);
	}

	public BloomFilter() {
		bits = new BitSet(defaultSize);
	}

	public boolean contains(String url) {
		if (url == null) {
			return true;
		}
		int pos1 = check(hash(url.hashCode() + 2));
		int pos2 = check(hash(url.hashCode() + 4));
		int pos3 = check(hash(url.hashCode() + 6));
		if (bits.get(pos1) && bits.get(pos2) && bits.get(pos3)) {
			return true;
		}
		return false;
	}

	public void add(String url) {
		if (url == null) {
			return;
		}
		int pos1 = check(hash(url.hashCode() + 2));
		int pos2 = check(hash(url.hashCode() + 4));
		int pos3 = check(hash(url.hashCode() + 6));
		bits.set(pos1);
		bits.set(pos2);
		bits.set(pos3);
	}

	public static void main(String[] args) {
		String ss = "ssss";
		BloomFilter bf = new BloomFilter();
		bf.add(ss);
		System.out.println(bf.contains(ss));
	}
}

 

分享到:
评论

相关推荐

    大文件去重 布隆算法

    最后,"BloomFilter"可能是一个源代码文件夹,包含了布隆过滤器的实现代码。 综合这些文件,我们可以推测这是一个使用C#或.NET开发的布隆过滤器实现,包含了源码、测试和构建配置。通过阅读源代码和执行测试,我们...

    bloom filter布隆过滤器学习资料大全

    布隆过滤器(Bloom Filter)是一种空间效率极高...通过这个“bloom filter布隆过滤器学习资料大全”,你可以深入研究布隆过滤器的理论、算法实现以及在不同场景下的应用实例,提升对这一重要数据结构的理解和应用能力。

    bloom filter 相关论文资料

    综上所述,这份“bloom filter”的论文资料集是深入理解、研究和应用布隆过滤器的重要资源,涵盖了从基本概念到实际应用的多个方面,对于IT从业者尤其是数据结构和算法领域的专业人士来说,是非常宝贵的参考资料。

    java实现的布隆过滤器算法

    布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它可能会误判,但不会漏判,即如果它说一个元素在集合中,那可能是错误的,但如果它说一个元素不在集合中,那么...

    PHP中实现Bloom Filter算法

    在上述代码中,我们定义了一个`BloomFilter`类,构造函数接受哈希函数的数量和位数组的大小作为参数。`add`方法用于添加元素到Bloom Filter中,它通过循环使用哈希函数来计算多个位置并把它们设置为1。`check`方法...

    bloom filter

    在压缩包中的`BloomFilter_-_Object_Pascal`文件中,很可能包含了用Delphi编写的布隆过滤器的源代码示例。源代码可能会定义一个BloomFilter类,包含初始化、插入和查询等方法,同时实现了多个哈希函数。通过阅读和...

    C# 简易爬虫程序 布隆去重算法

    在C#中实现布隆过滤器,可以自定义哈希函数,或者使用开源库如BloomFilter.NET。在使用时,我们需要合理设定数组大小和哈希函数的数量,以平衡误报率和空间消耗。 综上所述,"C#简易爬虫程序"结合了C#网络编程和...

    Bloom_filter_(C).zip_Flooding_atmega_bloom_bloom filter

    标题中的"Bloom_filter_(C).zip"表明这是一个关于C语言实现的布隆过滤器(Bloom Filter)项目,而"Flooding_atmega_bloom_bloom filter"可能指的是该过滤器在ATmega微控制器上的应用,可能涉及到数据溢出或高效处理...

    shingling、simhash、bloom filter

    3. **Bloom Filter(布隆过滤器)** Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它使用多个哈希函数将元素映射到一个位数组中,通过检查位数组的几个特定位置来判断...

    海量数据去重的Hash与BloomFilter,bitmap1

    总之,哈希算法和布隆过滤器在处理海量数据时,提供了高效且灵活的解决方案。哈希算法确保快速查找,而布隆过滤器则在空间效率和判断准确性之间找到了平衡。了解并掌握这些技术,对于优化大数据处理和分布式系统的...

    PDD–基于高级布隆过滤器算法用于高效得删除数据流中的近似重复数据

    首先,我们要理解什么是布隆过滤器(Bloom Filter)。布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会误判,即可能将不存在的元素判断为存在,但不会漏掉真正存在的...

    Compressed Bloom filters

    布隆过滤器(Bloom Filter)作为一种高效的空间优化随机数据结构,在支持成员查询方面表现卓越,尤其在数据集庞大时能显著节省存储空间。然而,布隆过滤器存在假阳性的可能性,即可能错误地报告某个元素属于一个集合...

    InverseBloomFilter:并发逆布隆过滤器

    逆布隆过滤器逆布隆过滤器,或“布隆过滤器的反面”,是一种并发的概率数据结构,用于测试一个项目是否被观察到。 这是一个 Go 实现,,它用非加密 FNV-1a 函数代替了 MD5 散列的使用。 反向过滤器可能会报告误报,...

    RedisBloom-master.zip

    因为他是一个概率型的算法,所以会存在一定的误差,如果传入一个值去布隆过 滤器中检索,可能会出现检测存在的结果但是实际上可能是不存在的,但是肯定不会出现实际上不存在然后反馈存 在的结果。因此,Bloom Filter...

    C++ 数据结构之布隆过滤器

     布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远超过一般的算法,...

Global site tag (gtag.js) - Google Analytics