From 53cfce612c05cde86437cc165ab047eb832cf663 Mon Sep 17 00:00:00 2001 From: Omar Date: Wed, 4 May 2022 07:53:16 +0300 Subject: [PATCH 1/2] Create BloomFilter Create BloomFilter dataStructure --- .../bloomfilter/BloomFilter.java | 59 +++++++++++++++++++ .../datastructures/BloomFilterTest.java | 28 +++++++++ 2 files changed, 87 insertions(+) create mode 100644 src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java create mode 100644 src/test/java/com/thealgorithms/datastructures/BloomFilterTest.java diff --git a/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java b/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java new file mode 100644 index 000000000000..cdd55c28973b --- /dev/null +++ b/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java @@ -0,0 +1,59 @@ +package com.thealgorithms.datastructures.bloomfilter; + + +public class BloomFilter { + + private int numberOfHashFunctions; + private int [] bitArray; + private Hash[] 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 hash : hashFunctions){ + bitArray[hash.compute(key) % bitArray.length] = 1; + } + } + + public boolean contains(T key) { + for (Hash hash : hashFunctions){ + if (bitArray[hash.compute(key) % bitArray.length] == 0){ + return false; + } + } + return true; + } + + public class Hash { + + 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 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 bloomFilter = new BloomFilter<>(4,20); + bloomFilter.insert("omar"); + bloomFilter.insert("mahamid"); + + Assertions.assertTrue(bloomFilter.contains("omar")); + Assertions.assertTrue(bloomFilter.contains("mahamid")); + } +} From bc87bd76022769e742dffefb527985f3d03419a3 Mon Sep 17 00:00:00 2001 From: Omar Date: Wed, 4 May 2022 08:01:32 +0300 Subject: [PATCH 2/2] private hash private hash --- .../thealgorithms/datastructures/bloomfilter/BloomFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java b/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java index cdd55c28973b..ed77bb3c64a7 100644 --- a/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java +++ b/src/main/java/com/thealgorithms/datastructures/bloomfilter/BloomFilter.java @@ -35,7 +35,7 @@ public boolean contains(T key) { return true; } - public class Hash { + private class Hash { int index;