Õppetund
Teooria — Bloomi filter: kindel „ei” või tõenäoline „jah”
Bloomi filter vastab küsimusele, kas element kuulub hulka. Selleks kasutab ta m bitist koosnevat rida ja k räsifunktsiooni. Elemendi lisamisel seatakse need k bitti, millele selle räsid osutavad. Otsing kontrollib samu k bitti: kui mõne väärtus on 0, siis element kindlasti ei kuulu hulka; kui kõik on 1, kuulub see hulka tõenäoliselt. Vale vastus „tõenäoliselt jah” on valepositiivne tulemus. Kui lisatud on n elementi, on valepositiivsete tulemuste osakaalu standardhinnang (1 − e−kn/m)k. See on Bloomi 1970. aasta valemi eksponentsiaalne lähendus, mille vähim väärtus saavutatakse, kui k = (m/n) ln 2.
Mida iga sümbol tähendab
m- bittide arv filtris
k- räsifunktsioonide arv ehk bittide arv, mida iga sõna seab ja iga otsing kontrollib
n- lisatud sõnade arv
X- väärtusega 1 bittide arv pärast kõigi n sõna lisamist
- Eeldab
- Sõna k asukohta saadakse kahest räsist topelträsimise teel: asukoht i on (h₁ + i·h₂) mod m. Siin on h₁ sõna FNV-1a räsi, h₂ täiendavalt segatud ja paarituks muudetud djb2 räsi ning m arvu 2 aste. Seetõttu on sõna k asukohta alati erinevad. Standardhinnang käsitleb kõiki kn asukohta sõltumatute juhuvalikutena. Topelträsimise ja väikese m tõttu erineb see eeldus tegeliku filtri tööst. Valepositiivsete osakaalu mõõdetakse 10 000 sõne hulgas vahemikus 0 kuni 9999. Tulemus on täpne nende sõnede jaoks, kuid ei kehti täpse osakaaluna kõigi võimalike sõnade kohta.
Ülesanne täielikult lahendatud
-
Kui väike võis olla Bloomi 1970. aasta poolitusfilter? 4 sammu
Burton Bloom tõi 1970. aastal näiteks 500 000 sõnaga poolitusprogrammi. Mõne lihtsa reegli abil saab poolitada neist 450 000; ülejäänud 50 000 tuleb otsida kettal olevast sõnastikust. Ta soovitas hoida nende 50 000 sõna filtrit põhimälus ja leppida sellega, et iga 16 lihtsa sõna kohta suunab 1 programmi asjatult kettale. Mitut bitti ja räsifunktsiooni filter vajab? Mitu kettalt lugemist jääb alles? Seejärel vali siin lehel sama bittide arv sõna kohta ja mõõda tulemust.
-
Parima k korral vajab filter standardhinnangu järgi log₂(1/p) / ln 2 bitti sõna kohta. Kui p = 1/16, saame 4 / 0,6931 = 5,77 bitti. Filtri maht on seega 50 000 × 5,77 = 288 539 bitti; Bloom ise kirjutas „vähem kui 300 000 bitti”. Parim k on 5,77 × ln 2 = 4. 4 räsifunktsiooni korral on hinnangu järgi poolte bittide väärtus 1.
-
Kõik 50 000 keerulist sõna tuleb endiselt kettalt otsida. Lisaks läheb kettale iga 16 lihtsa sõna kohta 1, mis annab 450 000 / 16 = 28 125 lugemist juurde. Kokku on see 78 125 kettalt lugemist 500 000-st ehk 15,6%. Bloom ümardas tulemuse 78 000-ni: võrreldes iga sõna kettalt otsimisega jääb ära 84% lugemistest.
-
Sõna pikkus neis arvutustes ei esine. Filter vajab sõna kohta 5,77 bitti, olgu sõnaks „cat” või „incomprehensibilities”. Tavaline räsitabel vajas Bloomi hinnangul iga sõna esitamiseks keskmiselt vähemalt 19 bitti. Iga p vähendamine poole võrra lisab sõna kohta 1 / ln 2 = 1,44 bitti. Tõenäosuse 1/64 korral oleks vaja 6 / 0,6931 = 8,66 bitti.
-
Sellel lehel saab kasutada kõige rohkem 64 sõna, kuid hinnang sõltub ainult suhtest m/n ja k väärtusest. Vali m = 256, n = 44 (5,82 bitti sõna kohta) ja k = 4. 256 bitist on 122 väärtusega 1 ehk 47,7%. Filtrisse lisamata 10 000 sõnest saab 535 vastuseks „tõenäoliselt jah”: 5,35%, vähem kui filtri kavandamisel sihiks võetud 1/16 = 6,25%. Selle filtri standardhinnang on 6,11%.
Vastus
288 539 bitti ja 4 räsifunktsiooni; alles jääb 78 125 kettalt lugemist 500 000-st. Lehe 44 sõnaga 256-bitise filtri mõõdetud osakaal on 5,35%, mis jääb sihist allapoole. See tulemus käib ühe konkreetse 44 sõnaga filtri kohta. Kas 50 000 sõna 288 539 bitis annaks sama lähedase tulemuse väärtusele 1/16, ei saa siin kontrollida: lehel on piiriks 64 sõna.
-
Õpitee
Mida andmestruktuur võimaldab odavalt teha
Allikad (1)
- The method itself, the turning point at half the bits set in the first insight, and the hyphenation example the worked problem recomputes: Burton H. Bloom, "Space/time trade-offs in hash coding with allowable errors," Communications of the ACM 13(7), July 1970, pp. 422–426.