package org.jf.alg;
import java.util.BitSet;
/**
*
*
*
* @author chenjf
*
*/
public class BloomFilter
{
private BitSet bit_array ;
private final int MAX_SIZE ;
public BloomFilter(int size)
{
this(size,2000000000);
}
public BloomFilter(int size,int max)
{
bit_array = new BitSet(size);
if(max % 8 ==0)
MAX_SIZE = max / 8;
else
MAX_SIZE = max / 8 +1;
}
public boolean filter(String value)
{
int hash1 = this.hashCode1(value);
int hash2 = this.hashCode2(value);
int hash3 = this.hashCode3(value);
int hash4 = this.hashCode4(value);
if(this.bit_array.get(hash1) &&
this.bit_array.get(hash2) &&
this.bit_array.get(hash3) &&
this.bit_array.get(hash4))
return true;
else
{
this.bit_array.set(hash1);
this.bit_array.set(hash2);
this.bit_array.set(hash3);
this.bit_array.set(hash4);
return false;
}
}
public boolean contains(String value)
{
int hash1 = this.hashCode1(value);
int hash2 = this.hashCode2(value);
int hash3 = this.hashCode3(value);
int hash4 = this.hashCode4(value);
if(this.bit_array.get(hash1) &&
this.bit_array.get(hash2) &&
this.bit_array.get(hash3) &&
this.bit_array.get(hash4))
return true;
return false;
}
private int hash(String value/*,int cap*/,int seed)
{
int result = 0;
int len = value.length();
for(int i =0 ;i<len;i++)
{
result = seed*result + value.charAt(i);
}
return /*Math.abs((cap - 1) & result )*/ Math.abs( result % this.MAX_SIZE );
}
private int hashCode1(String value)
{
return hash(value,13);
}
private int hashCode2(String value)
{
return hash(value,17);
}
private int hashCode3(String value)
{
return hash(value,31);
}
private int hashCode4(String value)
{
return hash(value,41);
}
}
分享到:
相关推荐
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。在Go语言中实现一个简单的布隆过滤器可以帮助我们高效地处理大数据集,尤其是在内存有限的情况下。以下是对这个主题的详细...
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否在一个集合中。它可能会误判,但不会漏判,即如果它说一个元素在集合中,那可能是错误的,但如果它说一个元素不在集合中,那么...
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它是由 Burton Howard Bloom 在1970年提出的,主要应用于大数据存储和检索,尤其在数据库、缓存系统和网络搜索等领域有广泛...
根据给定的信息,本文将详细解释布隆过滤器的基本概念、工作原理以及通过提供的C/C++实现代码来深入了解其实际应用。 ### 布隆过滤器简介 布隆过滤器是一种空间效率极高的概率型数据结构,用于测试一个元素是否在...
布隆过滤器,大家学过数据结构的应该都清楚,一般的字典树要实现嵌入和查找都内存的消耗非常大,布隆过滤器有BloomFilter,string, BKDRHash, APHash, DJBHash> bf五个参数你要查找的元素个数,查找元素类型,三个...
C++实现的布隆过滤器,其中使用到的bitset也是自己简单实现的一个BitContainer。可以处理千万条到亿条记录的存在性判断。做成dll可以在很多场合使用,如自己写爬虫,要判断一个url是否已经访问过,判断一个单词是否...
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它是由 Burton Howard Bloom 在1970年提出的,主要应用于大数据和分布式系统中,以减少内存消耗并提高查询效率。在C语言实现...
布隆过滤器是一种高效的空间节省的数据结构,用于判断一个元素是否可能在一个集合中,但可能会产生一定的误判率。它由一个很长的二进制向量和多个独立的哈希函数组成。布隆过滤器的基本原理是,当一个元素被添加到...
布隆过滤器是一种概率数据结构,用于判断一个元素是否可能在一个集合中存在。它通过使用位数组和几个独立的哈希函数来实现,具有高效、节省空间的特点,但可能会产生假阳性错误,即误判一个不在集合中的元素为在集合...
布隆过滤器是一种概率型数据结构,用于判断一个元素是否可能在一个集合中。它是由Burton Howard Bloom在1970年提出的,主要用于解决大数据集的存储和查询问题,尤其在空间效率上有着显著优势。在数据库、搜索引擎、...
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。在Java开发中,特别是在处理大数据、内存限制或需要快速查询是否存在某个元素的场景下,布隆过滤器是一个...
Redis布隆过滤器插件是Redis数据库中一个非常实用的扩展功能,主要用于高效地判断一个元素是否可能存在于集合中。由于其独特的数据结构和算法,它在存储空间和查询效率之间取得了良好的平衡,尤其适用于大数据场景下...
布隆过滤器是一种概率型数据结构,用于判断一个元素是否可能在一个集合中存在。它在处理大量数据时,能够高效地进行存在性查询,而牺牲一定的误判率。在PHP和Redis结合应用中,布隆过滤器常被用来解决缓存穿透问题,...
布隆过滤器是一种高效的概率型数据结构,它用于判断一个元素是否在一个集合中,具有空间效率和时间效率高的优点。在字符串模糊匹配算法中,布隆过滤器能够用来快速排除那些肯定不匹配的字符串,从而减少不必要的精确...
布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。它可能会产生误报(false positive),但绝不会产生漏报(false negative)。这种特性使得它在大数据处理、缓存、数据库等...
布隆过滤器(Bloom Filter)是一种空间效率极高的概率型数据结构,用于判断一个元素是否可能在一个集合中。由布隆在1970年提出,它不像传统的数据结构如哈希表那样保证不误判,而是允许有一定的错误率。这种特性使得...
布隆过滤器详解 布隆过滤器是一种空间效率高、查询效率高的数据结构,用于判断某个元素是否存在于一个大型集合中。它由一个二进制向量(位数组)和一系列随机映射函数(哈希函数)组成。布隆过滤器的原理是将元素...
布隆过滤器 源码 java版 /** * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software ...
布隆过滤器在网页去重中的应用 , 海量数据处理中的一个绝好应用