Filtr Blooma to probabilistyczna struktura danych zaprojektowana w celu wydajnego testowania, czy dany element jest częścią zbioru. Został wynaleziony przez Burtona Howarda Blooma w 1970 roku i stał się podstawowym narzędziem w informatyce ze względu na jego zdolność do zarządzania dużymi zbiorami danych przy minimalnym zużyciu pamięci. W przeciwieństwie do tradycyjnych struktur danych, takich jak tablice hash lub drzewa wyszukiwania binarnego, filtr Blooma może dostarczyć ostatecznej odpowiedzi, gdy elementu nie ma w zbiorze, ale tylko probabilistyczną odpowiedź, gdy element jest. Oznacza to, że choć możliwe są wyniki fałszywie dodatnie, to fałszywie ujemne już nie.
Podstawowa koncepcja filtra Blooma opiera się na tablicy bitów, z których wszystkie są początkowo ustawione na 0, oraz serii funkcji hashowych. Gdy element jest dodawany do filtra Blooma, jest on przekazywany przez każdą z funkcji hashowej w celu wygenerowania wielu pozycji w tablicy bitów. Bity w tych pozycjach są następnie ustawiane na 1. Aby sprawdzić, czy element znajduje się w zbiorze, jest on ponownie hashowany przy użyciu tych samych funkcji i sprawdzane są odpowiednie bity. Jeśli wszystkie bity na tych pozycjach mają wartość 1, element jest uważany za możliwy w zbiorze; jeśli którykolwiek z bitów ma wartość 0, element zdecydowanie nie znajduje się w zbiorze.
Jedną z istotnych zalet filtrów Blooma jest ich wydajność przestrzenna. Wymagają one znacznie mniej pamięci w porównaniu do innych struktur danych dla tego samego zadania, zwłaszcza gdy liczba elementów wzrasta. Na przykład, mniej niż 10 bitów na element jest potrzebnych do osiągnięcia 1% prawdopodobieństwa fałszywego wyniku pozytywnego, niezależnie od liczby elementów w zestawie. Sprawia to, że filtry Blooma są szczególnie przydatne w aplikacjach, w których zużycie pamięci ma krytyczne znaczenie, takich jak routery sieciowe, systemy baz danych i systemy rozproszone.
Filtry Blooma mają jednak pewne ograniczenia. Brak możliwości usunięcia elementów z zestawu jest podstawową wadą, ponieważ wyczyszczenie bitów, które zostały ustawione przez wiele elementów, wprowadziłoby fałszywe negatywy. Warianty takie jak zliczanie filtrów Blooma zostały opracowane w celu rozwiązania tego problemu, umożliwiając usuwanie elementów poprzez utrzymywanie liczby razy, gdy każdy bit został ustawiony. Dodatkowo, współczynnik wyników fałszywie dodatnich wzrasta wraz z dodawaniem kolejnych elementów, co oznacza, że rozmiar tablicy bitów i liczba funkcji hashowych muszą być starannie dobrane w oparciu o oczekiwaną liczbę elementów i akceptowalny współczynnik wyników fałszywie dodatnich.
W praktycznych zastosowaniach filtry Blooma znalazły szerokie zastosowanie w różnych dziedzinach. Na przykład w Bitcoinie są one wykorzystywane do zwiększenia prywatności dla klientów uproszczonej weryfikacji płatności (Simplified Payment Verification – SPV), umożliwiając użytkownikom wyszukiwanie transakcji bez ujawniania ich adresów. Sieci dostarczania treści, takie jak Akamai, wykorzystują filtry Blooma do efektywnego zarządzania pamięcią podręczną, zmniejszając obciążenie serwerów poprzez unikanie niepotrzebnego pobierania danych. Pomimo swojej probabilistycznej natury i ograniczeń, filtry Blooma pozostają nieocenionym narzędziem w projektowaniu wydajnych i skalowalnych systemów.