Bir elemanın kümede kesinlikle olmadığını veya muhtemelen olduğunu söyleyen bellek verimli olasılıksal yapıdır.
Bloom filter, k adet hash fonksiyonuyla m bitlik bir dizi üzerinde çalışır. Ekleme sırasında her hash sonucu ilgili biti 1 yapar; sorgu sırasında tüm ilgili bitler 1 ise sonuç “muhtemelen var”, herhangi biri 0 ise “kesinlikle yok” olur.
False positive mümkündür çünkü farklı elemanlar aynı bitleri ayarlayabilir; false negative normal Bloom filter için mümkün değildir.
Aşağıdaki uygulamalar PDF kaynaklarındaki pseudo kod akışını modern veri yapılarıyla ifade eder. Kenar durumları görünür bırakıldığı için örnekler doğrudan test edilebilir.
1class BloomFilter {2 private bits: boolean[];3 constructor(private size: number) { this.bits = Array(size).fill(false); }4 private hash(value: string): number {5 let hash = 0;6 for (let i = 0; i < value.length; i++) { hash = (hash * 31 + value.charCodeAt(i)) >>> 0; }7 return hash;8 }9 add(value: string) {10 for (const index of this.indexes(value)) { this.bits[index] = true; }11 }12 mightContain(value: string): boolean {13 return this.indexes(value).every((index) => this.bits[index]);14 }15 private indexes(value: string): number[] {16 const h1 = this.hash(value) % this.size;17 const h2 = this.hash(value + ':salt') % this.size || 1;18 return [h1, (h1 + h2) % this.size, (h1 + 2 * h2) % this.size];19 }20}Eklenecekleri ve sorguları noktalı virgülle ayırın. Örnek: alice,bob,carol; alice,dave
Eklenecekleri ve sorguları noktalı virgülle ayırın. Örnek: alice,bob,carol; alice,dave
En İyi Durum: O(k)
Ortalama Durum: O(k)
En Kötü Durum: O(k)
O(m) - Bu algoritmanın karmaşıklığı belirtilmemiş.
Bloom Filter Algoritması ile benzer veya alternatif olarak değerlendirilebilecek diğer başlıklar:
Kesin üyelik ve değer saklama sağlar.
Bit yerine sayaç kullanarak silme işlemini destekleyen varyanttır.
Kesin set işlemleri için alternatif veri modeli sunar.