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”的论文资料集是深入理解、研究和应用布隆过滤器的重要资源,涵盖了从基本概念到实际应用的多个方面,对于IT从业者尤其是数据结构和算法领域的专业人士来说,是非常宝贵的参考资料。
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它可能会误判,但不会漏判,即如果它说一个元素在集合中,那可能是错误的,但如果它说一个元素不在集合中,那么...
在上述代码中,我们定义了一个`BloomFilter`类,构造函数接受哈希函数的数量和位数组的大小作为参数。`add`方法用于添加元素到Bloom Filter中,它通过循环使用哈希函数来计算多个位置并把它们设置为1。`check`方法...
在压缩包中的`BloomFilter_-_Object_Pascal`文件中,很可能包含了用Delphi编写的布隆过滤器的源代码示例。源代码可能会定义一个BloomFilter类,包含初始化、插入和查询等方法,同时实现了多个哈希函数。通过阅读和...
在C#中实现布隆过滤器,可以自定义哈希函数,或者使用开源库如BloomFilter.NET。在使用时,我们需要合理设定数组大小和哈希函数的数量,以平衡误报率和空间消耗。 综上所述,"C#简易爬虫程序"结合了C#网络编程和...
标题中的"Bloom_filter_(C).zip"表明这是一个关于C语言实现的布隆过滤器(Bloom Filter)项目,而"Flooding_atmega_bloom_bloom filter"可能指的是该过滤器在ATmega微控制器上的应用,可能涉及到数据溢出或高效处理...
3. **Bloom Filter(布隆过滤器)** Bloom Filter是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它使用多个哈希函数将元素映射到一个位数组中,通过检查位数组的几个特定位置来判断...
总之,哈希算法和布隆过滤器在处理海量数据时,提供了高效且灵活的解决方案。哈希算法确保快速查找,而布隆过滤器则在空间效率和判断准确性之间找到了平衡。了解并掌握这些技术,对于优化大数据处理和分布式系统的...
首先,我们要理解什么是布隆过滤器(Bloom Filter)。布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会误判,即可能将不存在的元素判断为存在,但不会漏掉真正存在的...
布隆过滤器(Bloom Filter)作为一种高效的空间优化随机数据结构,在支持成员查询方面表现卓越,尤其在数据集庞大时能显著节省存储空间。然而,布隆过滤器存在假阳性的可能性,即可能错误地报告某个元素属于一个集合...
逆布隆过滤器逆布隆过滤器,或“布隆过滤器的反面”,是一种并发的概率数据结构,用于测试一个项目是否被观察到。 这是一个 Go 实现,,它用非加密 FNV-1a 函数代替了 MD5 散列的使用。 反向过滤器可能会报告误报,...
因为他是一个概率型的算法,所以会存在一定的误差,如果传入一个值去布隆过 滤器中检索,可能会出现检测存在的结果但是实际上可能是不存在的,但是肯定不会出现实际上不存在然后反馈存 在的结果。因此,Bloom Filter...
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远超过一般的算法,...