{ size: number, elements: string[], checkElements: string[] }
1class BloomFilter(size, hashCount):2 bits = array of size bits, all 034 function add(element):5 for each hash function h_i:6 bits[h_i(element) % size] = 178 function check(element):9 for each hash function h_i:10 if bits[h_i(element) % size] == 0:11 return DEFINITELY_NOT_IN_SET12 return POSSIBLY_IN_SET1314 // Note: Cannot delete elements15 // False positive rate ≈ (1-e^(-kn/m))^k
1class BloomFilter {2 private bits: Uint8Array;34 constructor(5 private size: number,6 private hashCount: number7 ) {8 this.bits = new Uint8Array(size);9 }1011 private hash(str: string, seed: number): number {12 let h = seed;13 for (let i = 0; i < str.length; i++)14 h = (h * 31 + str.charCodeAt(i)) & 0x7fffffff;15 return h % this.size;16 }1718 add(element: string): void {19 for (let i = 0; i < this.hashCount; i++)20 this.bits[this.hash(element, (i + 1) * 7919)] = 1;21 }2223 contains(element: string): boolean {24 for (let i = 0; i < this.hashCount; i++)25 if (!this.bits[this.hash(element, (i + 1) * 7919)])26 return false;27 return true; // possibly in set28 }29}