A Bloom - szűrő egy Burton Bloom által 1970-ben feltalált valószínűségi adatstruktúra [ 1] , amely lehetővé teszi annak ellenőrzését, hogy egy elem egy halmazhoz tartozik-e . Ebben az esetben lehet hamis pozitív eredményt kapni (nincs elem a halmazban, de az adatstruktúra jelzi, hogy igen), de nem téves negatív .
A Bloom-szűrő tetszőleges , a felhasználó által előre beállított memóriát használhatja, és minél nagyobb, annál kisebb az esélye, hogy hamis pozitív legyen. A készlethez új elemek hozzáadásának művelete támogatott, de a meglévők törlése nem (kivéve, ha számlálókkal történő módosítást alkalmazunk).
A Bloom szűrő egy m bites bittérkép . Kezdetben, amikor az adatstruktúra tárolja az üres halmazt , minden m bit nullára lesz állítva. A felhasználónak k független h 1 , …, h k hash függvényt kell definiálnia , amelyek mindegyike egy elemhalmazt képez le egy m hatványhalmazba . (Más szóval a hash függvény minden elemhez 1-től m-ig terjedő számot rendel.) Minden e elemnél a tömb h 1 ( e ), ..., h k ( e ) számú bitjei megegyeznek a a hash függvények értéke 1.
Annak ellenőrzéséhez, hogy az e elem a tárolt elemek halmazához tartozik-e, ellenőrizni kell a h 1 ( e ) , …, h k ( e ) bitek állapotát. Ha ezek közül legalább az egyik egyenlő nullával, akkor az elem nem tartozhat a halmazhoz (ellenkező esetben az összeadáskor ezek a bitek mindegyike beállna). Ha mindegyik egyenlő eggyel, akkor az adatstruktúra szerint e tartozhat a halmazhoz. Ebben az esetben két helyzet adódhat: vagy az elem valóban a halmazhoz tartozik, vagy ezek a bitek véletlenül lettek beállítva más elemek hozzáadásakor, ami ebben az adatszerkezetben a hamis pozitívumok forrása.
A hash függvények függetlensége biztosítja a h k ( e ) indexek minimális ismétlődési valószínűségét azáltal, hogy többször minimalizálja az 1-re beállított bitek számát. (És ez a hamis pozitív eredmények fő forrása.)
Legyen a bittömb mérete egyenlő m bittel és k hash függvényt adunk meg. Tegyük fel, hogy a hash függvények halmazát véletlenszerűen választjuk ki, és bármely x elemhez minden h i hash függvény hozzárendel egy helyet a bittérképen egyenlő valószínűséggel
és ezen felül az értékek együttesen független valószínűségi változók (a későbbi elemzés egyszerűsítése érdekében).
Ekkor annak a valószínűsége , hogy a következő elem beszúrása során egy egység nem lesz beírva valamelyik p -edik bitbe, egyenlő
És annak a valószínűsége, hogy a p -edik bit nulla marad, miután n különböző x 1 , ..., x n elemet beszúrunk az eredetileg üres Bloom-szűrőbe, egyenlő
kellően nagy m -re tekintettel a második figyelemre méltó határértékre .
Hamis pozitív eredmény, ha olyan y elemnél , amely nem egyenlő a beillesztett elemek egyikével sem, minden k bit h i ( y ) számmal nem nulla lesz, és a Bloom szűrő hibásan azt válaszolja, hogy y benne van a halmazban. beillesztett elemek közül. Egy ilyen esemény valószínűsége megközelítőleg egyenlő
Nyilvánvaló, hogy ez a valószínűség csökken m növekedésével (a bittömb mérete), és növekszik, ha n (a beillesztett elemek száma) nő. Fix m és n esetén az optimális k szám (a hash függvények száma), amely minimalizálja
Ebben az esetben a hamis pozitív eredmény valószínűsége egyenlő
Következésképpen vegye figyelembe, hogy ahhoz, hogy a Bloom szűrő támogassa az adott korlátos hamis pozitív valószínűséget, a bittérkép méretének lineárisan arányosnak kell lennie a beillesztett elemek számával.
A hash táblákhoz képest a Bloom szűrő több nagyságrenddel kevesebb memóriát tud kezelni, feláldozva a determinizmust. Jellemzően a drágább hozzáférésű (például merevlemezen vagy hálózati adatbázison elhelyezkedő) adatstruktúrában a nem létező adatokra vonatkozó kérések számának csökkentésére, vagyis az arra irányuló kérések „szűrésére” szolgál.
Példák gyakorlati alkalmazásra: