Add Bloom Filter (#3042)

This commit is contained in:
Omar 2022-05-04 09:24:19 +03:00 committed by GitHub
parent 00c758a299
commit f272d8a949
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 87 additions and 0 deletions

View File

@ -0,0 +1,59 @@
package com.thealgorithms.datastructures.bloomfilter;
public class BloomFilter<T> {
private int numberOfHashFunctions;
private int [] bitArray;
private Hash<T>[] hashFunctions;
public BloomFilter(int numberOfHashFunctions, int n) {
this.numberOfHashFunctions = numberOfHashFunctions;
hashFunctions = new Hash[numberOfHashFunctions];
bitArray = new int[n];
insertHash();
}
private void insertHash() {
for (int i = 0; i < numberOfHashFunctions; i++) {
hashFunctions[i] = new Hash(i);
}
}
public void insert(T key) {
for (Hash<T> hash : hashFunctions){
bitArray[hash.compute(key) % bitArray.length] = 1;
}
}
public boolean contains(T key) {
for (Hash<T> hash : hashFunctions){
if (bitArray[hash.compute(key) % bitArray.length] == 0){
return false;
}
}
return true;
}
private class Hash<T> {
int index;
public Hash(int index){
this.index = index;
}
public int compute(T key){
return index * asciiString(String.valueOf(key));
}
private int asciiString(String word){
int number = 0;
for (int i=0;i<word.length();i++){
number += word.charAt(i);
}
return number;
}
}
}

View File

@ -0,0 +1,28 @@
package com.thealgorithms.datastructures.bloomfilter;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class BloomFilterTest {
@Test
public void test1(){
BloomFilter<Integer> bloomFilter = new BloomFilter<>(3,10);
bloomFilter.insert(3);
bloomFilter.insert(17);
Assertions.assertTrue(bloomFilter.contains(3));
Assertions.assertTrue(bloomFilter.contains(17));
}
@Test
public void test2(){
BloomFilter<String> bloomFilter = new BloomFilter<>(4,20);
bloomFilter.insert("omar");
bloomFilter.insert("mahamid");
Assertions.assertTrue(bloomFilter.contains("omar"));
Assertions.assertTrue(bloomFilter.contains("mahamid"));
}
}