Blumov filter
Blumov filter je prostorno-efikasna probabilistička struktura podataka koja služi za testiranje da li je element član skupa. Osmislio ga je Barton Hauard Blum 1970. godine[1]. Lažni pozitivni rezultati su mogući, ali lažni negativni nisu; to znači da upit vraća ili „jeste u skupu (što može da bude pogrešno)“ ili „definitivno nije u skupu“. Elementi mogu da se dodaju u skup, ali ne mogu da se iz njega izbacuju (mada ovo može da se reši pomoću brojačkog filtera). Što se više elemenata dodaje u skup, veća je verovatnoća lažnih pozitivnih rezultata.
Sadržaj |
Opis algoritma [uredi]
Prazan Blumov filter je bitovski niz od m bitova koji su svi postavljeni na 0. Takođe je potrebno i da bude definisano k različitih heš funkcija, od kojih svaka preslikava neki skup elemenata u jednu od m pozicija sa uniformnom slučajnom distribucijom.
Kako bi se dodao element u filter, potrebno je za njega izračunati svaku od k heš vrednosti. Svaku od dobijenih k pozicija u nizu treba postaviti na 1.
Kako bi se filter pretražio za neki element (testiranje da li je element u skupu), ponovo se za njega računa svaka od k heš vrednosti kako bi se dobilo k pozicija u nizu. Ako je bilo koji bit na nekoj od ovih pozicija jednak 0, element sigurno nije u skupu – jer da jeste, onda bi svi bitovi bili postavljeni na 1 prilikom umetanja. Ako su sve vrednosti jednake 1, onda je ili element u skupu, ili su svi bitovi već postavljeni na 1 tokom umetanja drugih elemenata skupa, što dovodi do lažnog pozitivnog rezultata. U jednostavnom Blumovom filteru ne postoji način da se razlikuju ova dva slučaja, ali naprednije tehnike mogu da se koriste za rešavanje ovog problema.
Zahtev za definisanjem k različitih nezavisnih heš funkcija može da bude nezgodan za veliko k. Kod „dobre“ heš funkcije sa dugačkim izlazom, trebalo bi da ima jako malo ili nimalo korelacija između različitih bitovskih polja takvog heša, tako da ovakva heš funkcija može da se koristi za generisanje više „različitih“ heš funkcija tako što se njen izlaz isecka u više bitovskih nizova. Drugi pristup je da se prosledi k različitih početnih vrednosti (na primer 0, 1, ..., k − 1) heš funkciji koja uzima dva parametra, ili da se ove vrednosti dodaju (dopišu) elementu koji se ubacuje u skup. Za veće m i(li) k, uslov nezavisnosti između heš funkcija može da se relaksira sa zanemarljivim porastom verovatnoće lažnih pozitivnih rezultata (Dillinger & Manolios (2004a), Kirsch & Mitzenmacher (2006)). Specifično, pokazana je (Dillinger & Manolios (2004b)) efektivnost dobijanja k indeksa korišćenjem unapređenog dvostrukog heširanja ili trostrukog heširanja, što su varijante dvostrukog heširanja koje su efektivno jednostavni generatori slučajnih brojeva inicijalizovani sa dve ili tri heš vrednosti.
Uklanjanje elemenata iz jednostavnog Blumovog filtera je nemoguće jer lažni negativni rezultati nisu dozvoljeni. Element se preslikava u k bita, i iako bi postavljanje bilo kog od ovih k bita na nulu bilo dovoljno da se element ukloni, to bi ujedno uklonilo i svaki drugi element koji je preslikan u taj bit. Kako ne postoji način da se utvrdi da li je bilo koji drugi element preslikan u neki od bitova elementa koji se uklanja, postavljanje bilo kog od tih bitova na 0 bi uvelo mogućnost lažnih negativnih rezultata.
Jednokratno brisanje elementa iz Blumovog filtera može da se simulira dodavanjem drugog Blumovog filtera koji bi sadržavao elemente koji su obrisani. Međutim, lažni pozitivni rezultati u drugom filteru bi mogli da proizvedu lažne negativne razultate, što nije dopušteno. U ovom pristupu ne bi bilo moguće ponovno dodavanje prethodno obrisanih elemenata, jer bi oni morali da budu uklonjeni iz drugog filtera.
Međutim, čest je slučaj da su svi elementi skupa dostupni i moguće ih je pobrojati, ali je to skupo (na primer, jer zahteva dosta čitanja sa diska). U ovom slučaju, ako stopa lažnih pozitivnih rezultata postane suviše visoka, filter može da bude regenerisan; to bi trebalo da se dešava relativno retko.
Verovatnoća lažnog pozitivnog rezultata [uredi]
Neka važi pretpostavka da heš funkcija bira svaki element niza sa jednakom verovatnoćom. Ako je m broj bitova u nizu, verovatnoća da određeni bit nije postavljen na jedinicu od strane određene heš funkcije tokom umetanja elementa iznosi
Verovatnoća da taj bit nije postavljen na jedinicu od strane bilo koje heš funkcije prilikom umetanja jednog elementa je
Ako je umetnuto n elemenata, verovatnoća da je određeni bit još uvek jednak nuli je
Iz toga sledi da je verovatnoća da je postavljen na jedinicu jednaka
Neka se testira pripadnost skupu nekog elementa koji nije u skupu. Svaki od k bitova koje daju heš funkcije je 1 sa verovatnoćom datom gore. Verovatnoća da su svi oni jednaki 1, što bi dovelo do toga da algoritam pogrešno vrati da je element u skupu, se često navodi kao
Ovo nije strogo tačno jer podrazumeva nezavisnost verovatnoća postavljanja svakog bita. Međutim ako se pretpostavi da je to bliska aproksimacija, važi da verovatnoća lažnih pozitivnih rezultata opada kako m (broj bitova u nizu) raste, i povećava se kako n (broj umetnutih elemenata) raste. Za dato m i n, vrednost za k (broj heš funkcija) koje minimizuju verovatnoću lažnog pozitivnog rezultata je
što daje verovatnoću lažnog pozitivnog rezultata od
Potreban broj bitova, m za dato n (broj umetnutih elemenata) i traženu verovatnoću lažnog pozitivnog rezultata, p (uz pretpostavku da se koristi optimalna vrednost za k) može da se izračuna zamenom optimalne vrednosti za k u gornjoj jednačini:
što može da se pojednostavi:
a to daje:
Ovo znači da dužina Blumovog filtera mora da raste linearno sa brojem umetnutih elemenata kako bi se održala fiksna verovatnoća lažnih pozitivnih rezultata. Iako je gornja formula asimptotska (to jest, važi za m, n → ∞), sasvim je prihvatljiva i za konačne vrednosti m i n; verovatnoća lažnog pozitivnog rezultata za konačni Blumov filter od m bitova, n elemenata i k heš funkcija je najviše
Reference [uredi]
- ^ Donald Knuth. „The Art of Computer Programming, Errata for Volume 3 (2nd ed.)“
Literatura [uredi]
- Koucheryavy, Y.; Giambene, G.; Staehle, D.; Barcelo-Arroyo, F.; Braun, T.; Siris, V. (2009), „Traffic and QoS Management in Wireless Multimedia Networks“, COST 290 Final Report (USA): 111
- Kubiatowicz, J.; Bindel, D.; Czerwinski, Y.; Geels, S.; Eaton, D.; Gummadi, R.; Rhea, S.; Weatherspoon, H. et al. (2000, VOL 35; PART 11), „Oceanstore: An architecture for global-scale persistent storage“, ACM SIGPLAN NOTICES (USA): 190–201
- Agarwal, Sachin; Trachtenberg, Ari (2006), „Approximating the number of differences between remote sets“, IEEE Information Theory Workshop (Punta del Este, Uruguay): 217, DOI:10.1109/ITW.2006.1633815
- Ahmadi, Mahmood; Wong, Stephan (2007), „A Cache Architecture for Counting Bloom Filters“, 15th international Conference on Netwroks (ICON-2007), pp. 218, DOI:10.1109/ICON.2007.4444089
- Almeida, Paulo; Baquero, Carlos; Preguica, Nuno; Hutchison, David (2007), „Scalable Bloom Filters“, Information Processing Letters 101 (6): 255–261, DOI:10.1016/j.ipl.2006.10.007
- Byers, John W.; Considine, Jeffrey; Mitzenmacher, Michael; Rost, Stanislav (2004), „Informed content delivery across adaptive overlay networks“, IEEE/ACM Transactions on Networking 12 (5): 767, DOI:10.1109/TNET.2004.836103
- Bloom, Burton H. (1970), „Space/time trade-offs in hash coding with allowable errors“, Communications of the ACM 13 (7): 422–426, DOI:10.1145/362686.362692
- Boldi, Paolo; Vigna, Sebastiano (2005), „Mutable strings in Java: design, implementation and lightweight text-search algorithms“, Science of Computer Programming 54 (1): 3–23, DOI:10.1016/j.scico.2004.05.003
- Bonomi, Flavio; Mitzenmacher, Michael; Panigrahy, Rina; Singh, Sushil; Varghese, George (2006), „An Improved Construction for Counting Bloom Filters“, Algorithms – ESA 2006, 14th Annual European Symposium, 4168, pp. 684–695, DOI:10.1007/11841036_61
- Broder, Andrei; Mitzenmacher, Michael (2005), „Network Applications of Bloom Filters: A Survey“, Internet Mathematics 1 (4): 485–509
- Chang, Fay; Dean, Jeffrey; Ghemawat, Sanjay; Hsieh, Wilson; Wallach, Deborah; Burrows, Mike; Chandra, Tushar; Fikes, Andrew et al. (2006), „Bigtable: A Distributed Storage System for Structured Data“, Seventh Symposium on Operating System Design and Implementation
- Charles, Denis; Chellapilla, Kumar (2008), „Bloomier Filters: A second look“, The Computing Research Repository (CoRR), arXiv:0807.0928
- Chazelle, Bernard; Kilian, Joe; Rubinfeld, Ronitt; Tal, Ayellet (2004), „The Bloomier filter: an efficient data structure for static support lookup tables“, Proceedings of the Fifteenth Annual ACM-SIAM Symposium on Discrete Algorithms, pp. 30–39
- Cohen, Saar; Matias, Yossi (2003), „Spectral Bloom Filters“, Proceedings of the 2003 ACM SIGMOD International Conference on Management of Data, pp. 241–252, DOI:10.1145/872757.872787[mrtva veza]
- Deng, Fan; Rafiei, Davood (2006), „Approximately Detecting Duplicates for Streaming Data using Stable Bloom Filters“, Proceedings of the ACM SIGMOD Conference, pp. 25–36
- Dharmapurikar, Sarang; Song, Haoyu; Turner, Jonathan; Lockwood, John (2006), „Fast packet classification using Bloom filters“, Proceedings of the 2006 ACM/IEEE Symposium on Architecture for Networking and Communications Systems, pp. 61–70, DOI:10.1145/1185347.1185356
- Dietzfelbinger, Martin; Pagh, Rasmus (2008), „Succinct Data Structures for Retrieval and Approximate Membership“, The Computing Research Repository (CoRR), arXiv:0803.3693
- Dillinger, Peter C.; Manolios, Panagiotis (2004a), „Fast and Accurate Bitstate Verification for SPIN“, Proceedings of the 11th Internation Spin Workshop on Model Checking Software, Springer-Verlag, Lecture Notes in Computer Science 2989
- Dillinger, Peter C.; Manolios, Panagiotis (2004b), „Bloom Filters in Probabilistic Verification“, Proceedings of the 5th Internation Conference on Formal Methods in Computer-Aided Design, Springer-Verlag, Lecture Notes in Computer Science 3312
- Donnet, Benoit; Baynat, Bruno; Friedman, Timur (2006), „Retouched Bloom Filters: Allowing Networked Applications to Flexibly Trade Off False Positives Against False Negatives“, CoNEXT 06 – 2nd Conference on Future Networking Technologies
- Eppstein, David; Goodrich, Michael T. (2007), „Space-efficient straggler identification in round-trip data streams via Newton's identities and invertible Bloom filters“, Algorithms and Data Structures, 10th International Workshop, WADS 2007, Springer-Verlag, Lecture Notes in Computer Science 4619, pp. 637–648, arXiv:0704.3313
- Fan, Li; Cao, Pei; Almeida, Jussara; Broder, Andrei (2000), „Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol“, IEEE/ACM Transactions on Networking 8 (3): 281–293, DOI:10.1109/90.851975. A preliminary version appeared at SIGCOMM '98.
- Goel, Ashish; Gupta, Pankaj (2010), „Small subset queries and bloom filters using ternary associative memories, with applications“, ACM Sigmetrics 2010 38: 143, DOI:10.1145/1811099.1811056
- Kirsch, Adam; Mitzenmacher, Michael (2006), „Less Hashing, Same Performance: Building a Better Bloom Filter“, in Azar, Yossi; Erlebach, Thomas, Algorithms – ESA 2006, 14th Annual European Symposium, 4168, Springer-Verlag, Lecture Notes in Computer Science 4168, pp. 456–467, DOI:10.1007/11841036
- Mortensen, Christian Worm; Pagh, Rasmus; Pătraşcu, Mihai (2005), „On dynamic range reporting in one dimension“, Proceedings of the Thirty-seventh Annual ACM Symposium on Theory of Computing, pp. 104–111, DOI:10.1145/1060590.1060606
- Pagh, Anna; Pagh, Rasmus; Rao, S. Srinivasa (2005), „An optimal Bloom filter replacement“, Proceedings of the Sixteenth Annual ACM-SIAM Symposium on Discrete Algorithms, pp. 823–829
- Porat, Ely (2008), „An Optimal Bloom Filter Replacement Based on Matrix Solving“, The Computing Research Repository (CoRR), arXiv:0804.1845
- Putze, F.; Sanders, P.; Singler, J. (2007), „Cache-, Hash- and Space-Efficient Bloom Filters“, in Demetrescu, Camil, Experimental Algorithms, 6th International Workshop, WEA 2007, 4525, Springer-Verlag, Lecture Notes in Computer Science 4525, pp. 108–121, DOI:10.1007/978-3-540-72845-0
- Sethumadhavan, Simha; Desikan, Rajagopalan; Burger, Doug; Moore, Charles R.; Keckler, Stephen W. (2003), „Scalable hardware memory disambiguation for high ILP processors“, 36th Annual IEEE/ACM International Symposium on Microarchitecture, 2003, MICRO-36, pp. 399–410, DOI:10.1109/MICRO.2003.1253244
- Shanmugasundaram, Kulesh; Brönnimann, Hervé; Memon, Nasir (2004), „Payload attribution via hierarchical Bloom filters“, Proceedings of the 11th ACM Conference on Computer and Communications Security, pp. 31–41, DOI:10.1145/1030083.1030089
- Starobinski, David; Trachtenberg, Ari; Agarwal, Sachin (2003), „Efficient PDA Synchronization“, IEEE Transactions on Mobile Computing 2 (1): 40, DOI:10.1109/TMC.2003.1195150
- Stern, Ulrich; Dill, David L. (1996), „A New Scheme for Memory-Efficient Probabilistic Verification“, Proceedings of Formal Description Techniques for Distributed Systems and Communication Protocols, and Protocol Specification, Testing, and Verification: IFIP TC6/WG6.1 Joint International Conference, Chapman & Hall, IFIP Conference Proceedings, pp. 333–348
Spoljašnje veze [uredi]
- Tabela udela lažno-pozitivnih rezultata za različite konfiguracije na sajtu Univerziteta u Viskonsinu-Medison
- Blumovi filteri i socijalne mreže, demo java aplet, sajt San mikrosistemsa
- Interaktivna demonstracija procesiranja, ashcan.org
- „Optimalniji Blumovi filteri“, Eli Porat (novembar 2007) Google TechTalk video na Jutubu
- „Korišćenje Blumovih filtera“ detaljno objašnjenje Blumovog filtera pomoću Perla
Implementacije [uredi]
- C implementacija, literateprograms.org
- C++ i Object Pascal implementacija, partow.net
- C# implementacija, codeplex.com
- Erlang implementacija, sites.google.com
- Haskell implementacija, haskell.org
- Java implementacija, tu-dresden.de
- Javascript implementacija, la.ma.la
- Lisp implementacija, lemonodor.com
- Perl implementacija, cpan.org
- PHP implementacija, code.google.com
- Python implementacija skalabilnog Blumovog filtera, pypi.python.org
- Ruby implementacija, rubyinside.com
- Scala implementacija, codecommit.com
- Tcl implementacija, kocjan.org
kao funkcija broja elemenata
u filteru i veličine filtera,
. Podrazumevan je optimalan broj heš funkcija,
.



![\left(1-\left[1-\frac{1}{m}\right]^{kn}\right)^k \approx \left( 1-e^{-kn/m} \right)^k.](http://upload.wikimedia.org/math/2/1/8/2180ac79da81e5b3721963b4d80cf5a6.png)





