In computing, a Bloom filter is a space-efficient probabilisticdata structure, conceived by Burton Howard Bloom in 1970, that is used to test whether an element is a member of a set. False positive matches are possible, but false negatives are not – in other words, a query returns either "possibly in set" or "definitely not in set". Elements can be added to the set, but not removed (though this can be addressed with the counting Bloom filter variant); the more items added, the larger the probability of false positives.
Bloom proposed the technique for applications where the amount of source data would require an impractically large amount of memory if "conventional" error-free hashing techniques were applied. He gave the example of a hyphenation algorithm for a dictionary of 500,000 words, out of which 90% follow simple hyphenation rules, but the remaining 10% require expensive disk accesses to retrieve specific hyphenation patterns. With sufficient memory, an error-free hash could be used to eliminate all unnecessary disk accesses; on the other hand, with limited memory, Bloom's technique uses a smaller hash area but still eliminates most unnecessary accesses. For example, a hash area only 18% of the size needed by an ideal error-free hash still eliminates 87% of the disk accesses.[1]
More generally, fewer than 10 bits per element are required for a 1% false positive probability, independent of the size or number of elements in the set.[2]
Algorithm description

Un filtro Bloom vacío es una matriz de m bits, todos a 0. Está equipado con k funciones hash diferentes , que asignan los elementos del conjunto a una de las m posiciones posibles de la matriz. Para que sea óptimo, las funciones hash deben estar distribuidas uniformemente y ser independientes . Normalmente, k es una pequeña constante que depende de la tasa de falsos positivos deseada ε , mientras que m es proporcional a k y al número de elementos que se van a añadir.
Para agregar un elemento, páselo a cada una de las k funciones hash para obtener k posiciones en el array. Establezca los bits en todas estas posiciones a 1.
Para comprobar si un elemento pertenece al conjunto, se introduce en cada una de las k funciones hash para obtener k posiciones en el array. Si alguno de los bits en estas posiciones es 0, el elemento definitivamente no pertenece al conjunto; si lo perteneciera, todos los bits se habrían establecido en 1 al insertarlo. Si todos son 1, entonces o bien el elemento pertenece al conjunto, o bien los bits se han establecido en 1 por casualidad durante la inserción de otros elementos, lo que resulta en un falso positivo . En un filtro Bloom simple, no hay forma de distinguir entre ambos casos, pero técnicas más avanzadas pueden solucionar este problema.
El requisito de diseñar k funciones hash independientes diferentes puede resultar prohibitivo para valores grandes de k . Para una buena función hash con una salida amplia, debería existir poca o ninguna correlación entre los diferentes campos de bits de dicha función, por lo que este tipo de hash puede utilizarse para generar múltiples funciones hash "diferentes" dividiendo su salida en múltiples campos de bits. Alternativamente, se pueden pasar k valores iniciales diferentes (como 0, 1, ..., k − 1) a una función hash que acepte un valor inicial; o bien, añadir (o concatenar) estos valores a la clave. Para valores mayores de m y/o k , la independencia entre las funciones hash puede relajarse con un aumento insignificante en la tasa de falsos positivos. [ 3 ] (En concreto, Dillinger y Manolios (2004b) demuestran la eficacia de derivar los índices k utilizando el doble hash mejorado y el triple hash , variantes del doble hash que son, en la práctica, generadores de números aleatorios simples inicializados con los dos o tres valores hash).
Eliminar un elemento de este sencillo filtro de Bloom es imposible porque no hay forma de saber cuál de los k bits a los que se asigna debe borrarse. Si bien basta con poner a cero cualquiera de esos k bits para eliminar el elemento, también se eliminarían otros elementos que se asignen a ese bit. Dado que el sencillo algoritmo no permite determinar si se han añadido otros elementos que afecten a los bits del elemento que se va a eliminar, borrar cualquiera de ellos introduciría la posibilidad de falsos negativos.
La eliminación puntual de un elemento de un filtro Bloom se puede simular mediante un segundo filtro que contenga los elementos eliminados. Sin embargo, los falsos positivos en el segundo filtro se convierten en falsos negativos en el filtro compuesto, lo cual puede resultar indeseable. Con este método, no es posible volver a añadir un elemento previamente eliminado, ya que habría que eliminarlo del filtro de elementos eliminados.
A menudo, todas las claves están disponibles, pero su enumeración resulta costosa (por ejemplo, requiere numerosas lecturas de disco). Cuando la tasa de falsos positivos es demasiado alta, se puede regenerar el filtro; esto debería ocurrir con relativa poca frecuencia.
Ventajas de espacio y tiempo

Aunque conllevan el riesgo de falsos positivos, los filtros de Bloom ofrecen una ventaja espacial considerable respecto a otras estructuras de datos para la representación de conjuntos, como árboles de búsqueda binaria autoequilibrados , tries , tablas hash o simples arreglos o listas enlazadas de las entradas. La mayoría de estas requieren almacenar al menos los propios elementos de datos, lo que puede suponer desde un número reducido de bits, para enteros pequeños, hasta un número arbitrario de bits, como en el caso de cadenas ( los tries son una excepción, ya que pueden compartir almacenamiento entre elementos con prefijos iguales). Sin embargo, los filtros de Bloom no almacenan los elementos de datos, por lo que se debe proporcionar una solución independiente para su almacenamiento. Las estructuras enlazadas conllevan una sobrecarga espacial lineal adicional debido a los punteros. Un filtro de Bloom con un error del 1 % y un valor óptimo de k , en cambio, requiere solo unos 9,6 bits por elemento, independientemente del tamaño de los elementos. Esta ventaja se debe en parte a su compacidad, heredada de los arreglos, y en parte a su naturaleza probabilística. La tasa de falsos positivos del 1% se puede reducir en un factor de diez añadiendo tan solo unos 4,8 bits por elemento.
Sin embargo, si el número de valores potenciales es pequeño y muchos de ellos pueden estar en el conjunto, el filtro de Bloom es fácilmente superado por la matriz de bits determinista , que requiere solo un bit para cada elemento potencial. Las tablas hash obtienen una ventaja en espacio y tiempo si comienzan a ignorar las colisiones y almacenan solo si cada cubeta contiene una entrada; en este caso, se han convertido efectivamente en filtros de Bloom con k = 1. [ 4 ]
Los filtros de Bloom también poseen la peculiaridad de que el tiempo necesario para añadir elementos o comprobar si un elemento pertenece al conjunto es una constante fija, O( k ) , totalmente independiente del número de elementos que ya contiene. Ninguna otra estructura de datos de conjunto de espacio constante presenta esta propiedad, pero el tiempo de acceso promedio de las tablas hash dispersas puede hacerlas más rápidas en la práctica que algunos filtros de Bloom. Sin embargo, en una implementación de hardware, el filtro de Bloom destaca porque sus k búsquedas son independientes y pueden paralelizarse.
Para comprender su eficiencia espacial, es instructivo comparar el filtro de Bloom general con su caso especial cuando k = 1. Si k = 1 , para mantener la tasa de falsos positivos suficientemente baja, se debe establecer una pequeña fracción de bits, lo que significa que el arreglo debe ser muy grande y contener largas secuencias de ceros. El contenido de información del arreglo en relación con su tamaño es bajo. El filtro de Bloom generalizado ( k mayor que 1) permite establecer muchos más bits manteniendo una baja tasa de falsos positivos; si los parámetros ( k y m ) se eligen bien, aproximadamente la mitad de los bits se establecerán, [ 5 ] y estos serán aparentemente aleatorios, minimizando la redundancia y maximizando el contenido de información.
Probabilidad de falsos positivos

Supongamos que una función hash selecciona cada posición del array con igual probabilidad. Si m es el número de bits del array, la probabilidad de que un determinado bit no se establezca en 1 por una determinada función hash durante la inserción de un elemento es
Si k es el número de funciones hash y cada una no tiene una correlación significativa entre sí, entonces la probabilidad de que el bit no esté establecido en 1 por ninguna de las funciones hash es
Podemos utilizar la identidad bien conocida para e − 1
para concluir que, para m grande ,
Si hemos insertado n elementos, la probabilidad de que un determinado bit siga siendo 0 es
la probabilidad de que sea 1 es, por lo tanto
Ahora comprobemos la pertenencia de un elemento que no está en el conjunto. Cada una de las k posiciones de la matriz calculadas por las funciones hash es 1 con una probabilidad como la anterior. La probabilidad de que todas sean 1, lo que haría que el algoritmo afirmara erróneamente que el elemento está en el conjunto, se suele dar como
Esto no es del todo correcto, ya que presupone independencia en las probabilidades de que cada bit esté activado. Sin embargo, si se trata de una aproximación cercana, tenemos que la probabilidad de falsos positivos disminuye a medida que m (el número de bits en el array) aumenta, y aumenta a medida que n (el número de elementos insertados) aumenta.
La verdadera probabilidad de un falso positivo, sin asumir independencia, es
donde las {corchetes} denotan números de Stirling de segundo tipo . [ 6 ]
Mitzenmacher y Upfal proporcionan un análisis alternativo que llega a la misma aproximación sin la suposición de independencia. [ 7 ] Después de que se hayan agregado todos los n elementos al filtro de Bloom, sea q la fracción de los m bits que se establecen en 0. (Es decir, el número de bits que aún se establecen en 0 es qm .) Entonces, al probar la pertenencia de un elemento que no está en el conjunto, para la posición de la matriz dada por cualquiera de las k funciones hash, la probabilidad de que el bit se encuentre establecido en 1 es. Por lo tanto, la probabilidad de que todas las k funciones hash encuentren su bit establecido en 1 esAdemás , el valor esperado de q es la probabilidad de que una posición dada de la matriz quede sin tocar por cada una de las k funciones hash para cada uno de los n elementos, que es (como se indicó anteriormente)
- .
Es posible demostrar, sin la suposición de independencia, que q está muy fuertemente concentrado alrededor de su valor esperado. En particular, a partir de la desigualdad de Azuma-Hoeffding , demuestran que [ 8 ]
Por ello, podemos decir que la probabilidad exacta de falsos positivos es
como antes.
Número óptimo de funciones hash
El número de funciones hash, k , debe ser un entero positivo. Dejando de lado esta restricción, para un m y n dados , el valor de k que minimiza la probabilidad de falso positivo es
El número de bits requerido, m , dado n (el número de elementos insertados) y una probabilidad de falso positivo deseada ε (y suponiendo que se utiliza el valor óptimo de k ) se puede calcular sustituyendo el valor óptimo de k en la expresión de probabilidad anterior:
que se puede simplificar a:
Esto da como resultado:
Por lo tanto, el número óptimo de bits por elemento es
con el número correspondiente de funciones hash k (ignorando la integralidad):
Esto significa que para una probabilidad de falso positivo dada ε , la longitud de un filtro Bloom m es proporcional al número de elementos que se filtran n y el número requerido de funciones hash solo depende de la probabilidad de falso positivo objetivo ε . [ 9 ]
La fórmulaes aproximado por tres razones. Primero, y lo que menos preocupa, se aproxima a como, que es una buena aproximación asintótica (es decir, que se cumple cuando m →∞). En segundo lugar, y lo que es más preocupante, supone que durante la prueba de pertenencia el evento de que un bit probado se establezca en 1 es independiente del evento de que cualquier otro bit probado se establezca en 1. En tercer lugar, y lo que es más preocupante, supone quees fortuitamente integral.
Goel y Gupta, [ 10 ] sin embargo, dan una cota superior rigurosa que no hace aproximaciones y no requiere suposiciones. Demuestran que la probabilidad de falso positivo para un filtro Bloom finito con m bits (), n elementos y k funciones hash es como máximo
Este límite puede interpretarse como que la fórmula aproximadase puede aplicar con una penalización de como máximo medio elemento adicional y como máximo un bit menos.
Aproximación del número de elementos en un filtro de Bloom
El número de elementos en un filtro Bloom se puede aproximar con la siguiente fórmula:
dóndees una estimación del número de elementos en el filtro, m es la longitud (tamaño) del filtro, k es el número de funciones hash y X es el número de bits establecidos a uno. [ 11 ]
La unión e intersección de conjuntos
Los filtros de Bloom son una forma de representar de manera compacta un conjunto de elementos. Es común intentar calcular el tamaño de la intersección o unión entre dos conjuntos. Los filtros de Bloom se pueden usar para aproximar el tamaño de la intersección y unión de dos conjuntos. Para dos filtros de Bloom de longitud m , sus recuentos, respectivamente, se pueden estimar como
y
El tamaño de su unión se puede estimar como
dóndees el número de bits establecidos a uno en cualquiera de los dos filtros de Bloom. Finalmente, la intersección se puede estimar como
utilizando las tres fórmulas juntas. [ 11 ]
Propiedades
- A diferencia de una tabla hash estándar que utiliza direccionamiento abierto para la resolución de colisiones , un filtro Bloom de tamaño fijo puede representar un conjunto con un número arbitrariamente grande de elementos; agregar un elemento nunca falla debido a que la estructura de datos se "llene". Sin embargo, la tasa de falsos positivos aumenta constantemente a medida que se agregan elementos hasta que todos los bits del filtro se establecen en 1, momento en el que todas las consultas arrojan un resultado positivo. Con el hashing de direccionamiento abierto, nunca se producen falsos positivos, pero el rendimiento se deteriora progresivamente hasta aproximarse a la búsqueda lineal .
- La unión e intersección de filtros Bloom del mismo tamaño y conjunto de funciones hash se pueden implementar mediante operaciones OR y AND a nivel de bits , respectivamente. La operación de unión en filtros Bloom no implica pérdida de información, ya que el filtro resultante es idéntico al filtro creado desde cero mediante la unión de ambos conjuntos. La operación de intersección cumple una propiedad menos estricta: la probabilidad de falso positivo en el filtro resultante es, como máximo, igual a la probabilidad de falso positivo en uno de los filtros constituyentes, pero puede ser mayor que la probabilidad de falso positivo en el filtro creado desde cero mediante la intersección de ambos conjuntos.
- Algunos tipos de código superpuesto pueden considerarse como un filtro de Bloom implementado con tarjetas físicas con muescas en los bordes . Un ejemplo es Zatocoding , inventado por Calvin Mooers en 1947, en el que el conjunto de categorías asociadas a una información se representa mediante muescas en una tarjeta, con un patrón aleatorio de cuatro muescas para cada categoría.
Ejemplos
- Las moscas de la fruta utilizan un mecanismo similar a los filtros de Bloom para detectar la novedad de los olores, con las principales diferencias en pruebas de estado como la similitud de un olor con el de olores experimentados previamente o el tiempo transcurrido desde la experiencia previa del mismo olor. [ 12 ]
- Los servidores de Akamai Technologies , un proveedor de distribución de contenido , utilizan filtros Bloom para evitar que los objetos web de un solo uso se almacenen en sus cachés de disco. Estos objetos son aquellos que los usuarios solicitan solo una vez, algo que Akamai descubrió que ocurría en casi tres cuartas partes de su infraestructura de almacenamiento en caché. El uso de un filtro Bloom para detectar la segunda solicitud de un objeto web y almacenarlo en caché únicamente en esa segunda solicitud evita que los objetos de un solo uso entren en la caché de disco, lo que reduce significativamente la carga de trabajo del disco y aumenta la tasa de aciertos de la caché. [ 13 ]
- Google Bigtable , Apache HBase , Apache Cassandra , ScyllaDB y PostgreSQL [ 14 ] utilizan filtros Bloom para reducir las búsquedas en disco de filas o columnas inexistentes. Evitar búsquedas costosas en disco aumenta considerablemente el rendimiento de una operación de consulta de base de datos. [ 15 ]
- El navegador web Google Chrome utilizaba anteriormente un filtro Bloom para identificar URL maliciosas . Cada URL se comprobaba primero con un filtro Bloom local, y solo si este arrojaba un resultado positivo se realizaba una comprobación completa de la URL (y se advertía al usuario si también se obtenía un resultado positivo). [ 16 ] [ 17 ]
- Mozilla Firefox utiliza filtros Bloom en cascada para la revocación de certificados [ 18 ] [ 19 ] y para bloquear complementos maliciosos. [ 20 ]
- Microsoft Bing (motor de búsqueda) utiliza filtros Bloom jerárquicos multinivel para su índice de búsqueda, BitFunnel . Los filtros Bloom proporcionaron un costo menor que el índice Bing anterior, que se basaba en archivos invertidos . [ 21 ]
- La caché del proxy web Squid utiliza filtros Bloom para los resúmenes de caché. [ 22 ]
- Bitcoin utilizó filtros Bloom para acelerar la sincronización de la billetera hasta que se descubrieron vulnerabilidades de privacidad en la implementación de los filtros Bloom. [ 23 ]
- El sistema de almacenamiento de archivos Venti utiliza filtros Bloom para detectar datos almacenados previamente. [ 24 ]
- El verificador de modelos SPIN utiliza filtros de Bloom para rastrear el espacio de estados alcanzables para problemas de verificación grandes. [ 25 ]
- El marco de análisis en cascada utiliza filtros de Bloom para acelerar las uniones asimétricas, donde uno de los conjuntos de datos unidos es significativamente mayor que el otro (a menudo llamado unión de Bloom en la literatura de bases de datos). [ 26 ]
- El agente de transferencia de correo (MTA) de Exim utiliza filtros Bloom en su función de limitación de velocidad.
- Medium utiliza filtros Bloom para evitar recomendar artículos que un usuario haya leído previamente. [ 27 ]
- Ethereum utiliza filtros Bloom para encontrar rápidamente registros en la cadena de bloques de Ethereum .
- Grafana Tempo utiliza filtros Bloom para mejorar el rendimiento de las consultas almacenando filtros Bloom para cada bloque del backend. Se accede a estos en cada consulta para determinar los bloques que contienen datos que cumplen con los criterios de búsqueda proporcionados [ 28 ].
Alternativas
Los filtros Bloom clásicos utilizanbits de espacio por tecla insertada, dondees la tasa de falsos positivos del filtro de Bloom. Sin embargo, el espacio que es estrictamente necesario para cualquier estructura de datos que desempeñe el mismo papel que un filtro de Bloom es solopor clave. [ 29 ] Por lo tanto, los filtros de Bloom utilizan un 44 % más de espacio que una estructura de datos óptima equivalente.
Pagh et al. proporcionan una estructura de datos que utilizabits mientras admite operaciones de tiempo esperado amortizado constante. [ 30 ] Su estructura de datos es principalmente teórica, pero está estrechamente relacionada con el filtro de cociente ampliamente utilizado , que puede parametrizarse para usarbits de espacio, para un parámetro arbitrario, mientras apoyaba-operaciones de tiempo. [ 31 ] Las ventajas del filtro de cociente, en comparación con el filtro de Bloom, incluyen su localidad de referencia y la capacidad de admitir eliminaciones.
Otra alternativa al filtro Bloom clásico es el filtro cuco , basado en variantes de hashing cuco que optimizan el uso del espacio . En este caso, se construye una tabla hash que no almacena ni claves ni valores, sino huellas digitales cortas (hashes pequeños) de las claves. Si al buscar la clave se encuentra una huella digital coincidente, entonces es probable que la clave esté en el conjunto. Los filtros cuco admiten eliminaciones y tienen una mejor localidad de referencia que los filtros Bloom. [ 32 ] Además, en ciertos regímenes de parámetros, los filtros cuco pueden parametrizarse para ofrecer garantías de espacio casi óptimas. [ 32 ]
Muchas alternativas a los filtros de Bloom, incluidos los filtros de cociente y los filtros de cuco , se basan en la idea de aplicar funciones hash a las claves para generar números aleatorios.huellas digitales de bits y luego almacenar esas huellas digitales en una tabla hash compacta. Esta técnica, que fue introducida por primera vez por Carter et al. en 1978, [ 29 ] se basa en el hecho de que las tablas hash compactas se pueden implementar para usar aproximadamentebits menos espacio que sus contrapartes no compactas. Usando tablas hash concisas , el uso de espacio se puede reducir a tan solobits [ 33 ] al tiempo que admite operaciones de tiempo constante en una amplia variedad de regímenes de parámetros.
Putze, Sanders y Singler (2007) estudiaron algunas variantes de filtros Bloom que son más rápidas o utilizan menos espacio que los filtros Bloom clásicos. La idea básica de la variante rápida es ubicar los k valores hash asociados a cada clave en uno o dos bloques del mismo tamaño que los bloques de caché de memoria del procesador (generalmente 64 bytes). Esto presumiblemente mejorará el rendimiento al reducir el número de posibles fallos de caché de memoria . Sin embargo, las variantes propuestas tienen el inconveniente de utilizar aproximadamente un 32 % más de espacio que los filtros Bloom clásicos.
La variante eficiente en espacio se basa en el uso de una única función hash que genera para cada clave un valor en el rangodóndees la tasa de falsos positivos solicitada. La secuencia de valores se ordena y comprime utilizando codificación Golomb (o alguna otra técnica de compresión) para ocupar un espacio cercano aPara consultar el filtro Bloom con una clave determinada, basta con comprobar si su valor correspondiente está almacenado en él. Descomprimir todo el filtro Bloom para cada consulta haría que esta variante fuera totalmente inutilizable. Para solucionar este problema, la secuencia de valores se divide en pequeños bloques de igual tamaño que se comprimen por separado. En el momento de la consulta, solo será necesario descomprimir la mitad de un bloque, en promedio. Debido a la sobrecarga de la descompresión, esta variante puede ser más lenta que los filtros Bloom clásicos, pero esto se compensa con el hecho de que solo se necesita calcular una función hash.
Graf y Lemire (2020) describen un enfoque llamado filtro xor , donde almacenan huellas digitales en un tipo particular de tabla hash perfecta , produciendo un filtro que es más eficiente en memoria (bits por clave) y más rápido que los filtros Bloom o Cuckoo. (El ahorro de tiempo se debe a que una búsqueda requiere exactamente tres accesos a memoria, que pueden ejecutarse en paralelo). Sin embargo, la creación de filtros es más compleja que la de los filtros Bloom y Cuckoo, y no es posible modificar el conjunto después de su creación.
Extensiones y aplicaciones
There are over 60 variants of Bloom filters, many surveys of the field, and a continuing churn of applications (see e.g., Luo, et al[34]). Some of the variants differ sufficiently from the original proposal to be breaches from or forks of the original data structure and its philosophy.[34] A treatment which unifies Bloom filters with other work on random projections, compressive sensing, and locality sensitive hashing remains to be done (though see Dasgupta, et al[35] for one attempt inspired by neuroscience).
Cache filtering

Content delivery networks deploy web caches around the world to cache and serve web content to users with greater performance and reliability. A key application of Bloom filters is their use in efficiently determining which web objects to store in these web caches. Nearly three-quarters of the URLs accessed from a typical web cache are "one-hit-wonders" that are accessed by users only once and never again. It is clearly wasteful of disk resources to store one-hit-wonders in a web cache, since they will never be accessed again. To prevent caching one-hit-wonders, a Bloom filter is used to keep track of all URLs that are accessed by users. A web object is cached only when it has been accessed at least once before, i.e., the object is cached on its second request. The use of a Bloom filter in this fashion significantly reduces the disk write workload, since most one-hit-wonders are not written to the disk cache. Further, filtering out the one-hit-wonders also saves cache space on disk, increasing the cache hit rates.[13]
Avoiding false positives in a finite universe
Kiss et al described a new construction for the Bloom filter that avoids false positives in addition to the typical non-existence of false negatives.[36] The construction applies to a finite universe from which set elements are taken. It relies on existing non-adaptive combinatorial group testing scheme by Eppstein, Goodrich and Hirschberg. Unlike the typical Bloom filter, elements are hashed to a bit array through deterministic, fast and simple-to-calculate functions. The maximal set size for which false positives are completely avoided is a function of the universe size and is controlled by the amount of allocated memory.
Alternativamente, se puede construir un filtro Bloom inicial de la forma estándar y luego, con un dominio finito y enumerable, se pueden encontrar exhaustivamente todos los falsos positivos y, a partir de esa lista, se construye un segundo filtro Bloom; los falsos positivos en el segundo filtro se manejan de manera similar construyendo un tercero, y así sucesivamente. Como el universo es finito y el conjunto de falsos positivos se reduce estrictamente con cada paso, este procedimiento da como resultado una cascada finita de filtros Bloom que (en este dominio cerrado y finito) producirá solo verdaderos positivos y verdaderos negativos. Para verificar la pertenencia a la cascada de filtros, se consulta el filtro inicial y, si el resultado es positivo, se consulta el segundo filtro, y así sucesivamente. Esta construcción se utiliza en CRLite , un mecanismo propuesto de distribución del estado de revocación de certificados para la PKI web , y se aprovecha la Transparencia de Certificados para cerrar el conjunto de certificados existentes. [ 37 ]
Conteo de filtros Bloom
Los filtros de conteo permiten implementar una operación de eliminación en un filtro Bloom sin necesidad de recrearlo. En un filtro de conteo, las posiciones de la matriz (cubetas) se extienden de un solo bit a un contador multibit. De hecho, los filtros Bloom convencionales pueden considerarse filtros de conteo con un tamaño de cubeta de un bit. Los filtros de conteo fueron introducidos por Fan et al. (2000) .
La operación de inserción se extiende para incrementar el valor de los depósitos, y la operación de búsqueda verifica que cada uno de los depósitos requeridos sea distinto de cero. La operación de eliminación consiste entonces en decrementar el valor de cada uno de los depósitos correspondientes.
El desbordamiento aritmético de los cubetas es un problema, y estas deben ser lo suficientemente grandes para que este caso sea poco frecuente. Si se produce, las operaciones de incremento y decremento deben dejar el conjunto de cubetas con el valor máximo posible para conservar las propiedades de un filtro Bloom.
El tamaño de los contadores suele ser de 3 o 4 bits. Por lo tanto, los filtros Bloom de conteo utilizan de 3 a 4 veces más espacio que los filtros Bloom estáticos. En contraste, las estructuras de datos de Pagh, Pagh y Rao (2005) y Fan et al. (2014) también permiten eliminaciones, pero utilizan menos espacio que un filtro Bloom estático.
Otro problema de los filtros de conteo es su limitada escalabilidad . Dado que la tabla del filtro Bloom de conteo no se puede ampliar, es necesario conocer de antemano el número máximo de claves que se pueden almacenar simultáneamente en el filtro. Una vez superada la capacidad de la tabla, la tasa de falsos positivos aumentará rápidamente a medida que se inserten más claves.
Bonomi et al. (2006) introdujeron una estructura de datos basada en el hash d-izquierdo que es funcionalmente equivalente, pero utiliza aproximadamente la mitad del espacio que los filtros de Bloom convencionales. El problema de escalabilidad no se presenta en esta estructura de datos. Una vez superada la capacidad de diseño, las claves se pueden reinsertar en una nueva tabla hash del doble de tamaño.
La variante que optimiza el uso del espacio, propuesta por Putze, Sanders y Singler (2007), también podría utilizarse para implementar filtros de conteo, permitiendo inserciones y eliminaciones.
Rottenstreich, Kanizo y Keslassy (2012) introdujeron un nuevo método general basado en incrementos de variables que mejora significativamente la probabilidad de falsos positivos al contar filtros de Bloom y sus variantes, sin dejar de admitir eliminaciones. A diferencia del conteo de filtros de Bloom, en cada inserción de elemento, los contadores hash se incrementan mediante un incremento de variable hash en lugar de un incremento unitario. Para consultar un elemento, se consideran los valores exactos de los contadores y no solo su positividad. Si la suma representada por un valor de contador no puede componerse con el incremento de variable correspondiente para el elemento consultado, se puede devolver una respuesta negativa a la consulta.
Kim et al. (2019) muestran que el falso positivo del filtro Counting Bloom disminuye de k=1 a un punto definidoy aumenta desdehasta el infinito positivo, y encuentraen función del umbral de recuento. [ 38 ]
Agregación descentralizada
Los filtros de Bloom pueden organizarse en estructuras de datos distribuidas para realizar cálculos totalmente descentralizados de funciones agregadas . La agregación descentralizada permite que las mediciones colectivas estén disponibles localmente en cada nodo de una red distribuida sin necesidad de una entidad computacional centralizada para este fin. [ 39 ]
Filtros Bloom distribuidos

Los filtros Bloom paralelos pueden implementarse para aprovechar los múltiples elementos de procesamiento (PE) presentes en las máquinas paralelas sin recursos compartidos . Uno de los principales obstáculos para un filtro Bloom paralelo es la organización y comunicación de los datos no ordenados que, en general, se distribuyen uniformemente entre todos los PE al inicio o en las inserciones por lotes. Para ordenar los datos se pueden utilizar dos enfoques, ya sea que el filtro Bloom sobre todos los datos se almacene en cada PE, llamado filtro Bloom replicante, o que el filtro Bloom sobre todos los datos se divida en partes iguales, almacenando cada PE una parte de él. [ 40 ] Para ambos enfoques se utiliza un filtro Bloom de "disparo único" que solo calcula un hash, lo que resulta en un bit invertido por elemento, para reducir el volumen de comunicación.
Los filtros Bloom distribuidos se inician aplicando primero un hash a todos los elementos en su PE local y luego ordenándolos localmente por sus hashes. Esto se puede hacer en tiempo lineal utilizando, por ejemplo, el algoritmo de ordenación por cubetas y también permite la detección local de duplicados. La ordenación se utiliza para agrupar los hashes con su PE asignado como separador para crear un filtro Bloom para cada grupo. Después de codificar estos filtros Bloom utilizando, por ejemplo, la codificación Golomb, cada filtro Bloom se envía como un paquete al PE responsable de los valores hash que se insertaron en él. Un PE p es responsable de todos los hashes entre los valoresydonde s es el tamaño total del filtro de Bloom sobre todos los datos. Debido a que cada elemento se aplica una sola función hash y, por lo tanto, solo se activa un bit, para verificar si un elemento se insertó en el filtro de Bloom, solo es necesario operar sobre el PE responsable del valor hash del elemento. Las operaciones de inserción únicas también se pueden realizar de manera eficiente porque solo se debe cambiar el filtro de Bloom de un PE, en comparación con los filtros de Bloom replicados, donde cada PE tendría que actualizar su filtro de Bloom. Al distribuir el filtro de Bloom global entre todos los PE en lugar de almacenarlo por separado en cada PE, el tamaño de los filtros de Bloom puede ser mucho mayor, lo que resulta en una mayor capacidad y una menor tasa de falsos positivos. Los filtros de Bloom distribuidos se pueden utilizar para mejorar los algoritmos de detección de duplicados [ 41 ] al filtrar los elementos más "únicos". Estos se pueden calcular comunicando solo los hashes de los elementos, no los elementos mismos, que son mucho más grandes en volumen, y eliminándolos del conjunto, lo que reduce la carga de trabajo para el algoritmo de detección de duplicados utilizado posteriormente.
Durante la comunicación de los hashes, los PE buscan bits que estén activados en más de uno de los paquetes recibidos, ya que esto significaría que dos elementos tienen el mismo hash y, por lo tanto, podrían ser duplicados. Si esto ocurre, se envía un mensaje que contiene el índice del bit, que también es el hash del elemento que podría ser un duplicado, a los PE que enviaron un paquete con el bit activado. Si un remitente envía varios índices al mismo PE, puede ser ventajoso codificar también los índices. Todos los elementos que no recibieron su hash de vuelta ahora tienen la garantía de no ser duplicados y no se evaluarán más; para los elementos restantes se puede utilizar un algoritmo de Reparticionamiento [ 42 ] . Primero, todos los elementos que recibieron su valor hash de vuelta se envían al PE responsable de su hash. Ahora se garantiza que cualquier elemento y su duplicado estén en el mismo PE. En el segundo paso, cada PE utiliza un algoritmo secuencial para la detección de duplicados en los elementos recibidos, que son solo una fracción de la cantidad de elementos iniciales. Al permitir una tasa de falsos positivos para los duplicados, se puede reducir aún más el volumen de comunicación, ya que los procesadores no tienen que enviar elementos con hashes duplicados; en su lugar, cualquier elemento con un hash duplicado se puede marcar como duplicado. Como resultado, la tasa de falsos positivos para la detección de duplicados es la misma que la del filtro Bloom utilizado.
El proceso de filtrado de los elementos más singulares puede repetirse varias veces modificando la función hash en cada paso. Si se utiliza un único paso de filtrado, se obtiene una baja tasa de falsos positivos; sin embargo, si se repite una vez, el primer paso puede generar una tasa de falsos positivos mayor, mientras que el segundo, aunque también mayor, procesa menos elementos, ya que muchos se han eliminado en el paso anterior. Si bien el uso de más de dos repeticiones puede reducir aún más el volumen de comunicación si el número de duplicados en un conjunto es pequeño, la ventaja de estas complicaciones adicionales es mínima.
Los filtros de Bloom replicantes organizan sus datos utilizando un algoritmo de hipercubo bien conocido para el intercambio de información, por ejemplo [ 43 ]. Primero, cada PE calcula el filtro de Bloom sobre todos los elementos locales y lo almacena. Al repetir un bucle donde en cada paso i los PE envían su filtro de Bloom local sobre la dimensión i y fusionan el filtro de Bloom que reciben sobre la dimensión con su filtro de Bloom local, es posible duplicar los elementos que contiene cada filtro de Bloom en cada iteración. Después de enviar y recibir filtros de Bloom sobre todosLas dimensiones de cada PE contienen el filtro Bloom global sobre todos los elementos.
Replicating Bloom filters are more efficient when the number of queries is much larger than the number of elements that the Bloom filter contains, the break even point compared to Distributed Bloom filters is approximately after accesses, with as the false positive rate of the bloom filter.
Data synchronization
Bloom filters can be used for approximate data synchronization as in Byers et al. (2004). Counting Bloom filters can be used to approximate the number of differences between two sets and this approach is described in Agarwal & Trachtenberg (2006).
Bloom filters for streaming data
Bloom filters can be adapted to the context of streaming data. For instance, Deng & Rafiei (2006) proposed Stable Bloom filters, which consist of a counting Bloom filter where insertion of a new element sets the associated counters to a value c, and then only a fixed amount s of counters are decreased by 1, hence the memory mostly contains information about recent elements (intuitively, one could assume that the lifetime of an element inside a SBF of N counters is around ). Another solution is the Aging Bloom filter, that consists of two Bloom filter each occupying half the total available memory: when one filter is full, the second filter is erased and newer elements are then added to this newly empty filter.[44]
However, it has been shown[45] that no matter the filter, after n insertions, the sum of the false positive and false negative probabilities is bounded below by where L is the amount of all possible elements (the alphabet size), m the memory size (in bits), assuming . This result shows that for L big enough and n going to infinity, then the lower bound converges to , which is the characteristic relation of a random filter. Hence, after enough insertions, and if the alphabet is too big to be stored in memory (which is assumed in the context of probabilistic filters), it is impossible for a filter to perform better than randomness. This result can be leveraged by only expecting a filter to operate on a sliding window rather than the whole stream. In this case, the exponent n in the formula above is replaced by w, which gives a formula that might deviate from 1, if w is not too small.
Bloomier filters
Chazelle et al. (2004) diseñaron una generalización de los filtros de Bloom que podía asociar un valor a cada elemento insertado, implementando un array asociativo . Al igual que los filtros de Bloom, estas estructuras logran una sobrecarga de espacio mínima al aceptar una pequeña probabilidad de falsos positivos. En el caso de los "filtros Bloomier", un falso positivo se define como la devolución de un resultado cuando la clave no está presente en el mapa. El mapa nunca devolverá un valor incorrecto para una clave que sí está presente.
Aproximadores compactos
Boldi y Vigna (2005) propusieron una generalización de los filtros de Bloom basada en retículos . Un aproximador compacto asocia a cada clave un elemento de un retículo (los filtros de Bloom estándar son el caso del retículo booleano de dos elementos). En lugar de un arreglo de bits, utilizan un arreglo de elementos del retículo. Al agregar una nueva asociación entre una clave y un elemento del retículo, calculan el máximo de los valores actuales de las k posiciones del arreglo asociadas a la clave con el elemento del retículo. Al leer el valor asociado a una clave, calculan el mínimo de los valores encontrados en las k posiciones asociadas a la clave. El valor resultante se aproxima por encima del valor original.
Filtros de Bloom con partición paralela
Esta implementación utilizó un arreglo separado para cada función hash. Este método permite cálculos hash paralelos tanto para inserciones como para consultas. [ 46 ]
Filtros Bloom escalables
Almeida et al. (2007) propusieron una variante de los filtros de Bloom que se adapta dinámicamente al número de elementos almacenados, garantizando una probabilidad mínima de falsos positivos. La técnica se basa en secuencias de filtros de Bloom estándar con capacidad creciente y probabilidades de falsos positivos más estrictas, de modo que se pueda establecer de antemano una probabilidad máxima de falsos positivos, independientemente del número de elementos que se vayan a insertar.
Filtros Bloom espaciales
Los filtros espaciales de Bloom (SBF) fueron propuestos originalmente por Palmieri, Calderoni y Maio (2014) como una estructura de datos diseñada para almacenar información de ubicación , especialmente en el contexto de protocolos criptográficos para la privacidad de la ubicación . Sin embargo, la característica principal de los SBF es su capacidad para almacenar múltiples conjuntos en una sola estructura de datos, lo que los hace adecuados para una serie de escenarios de aplicación diferentes. [ 47 ] Se puede consultar la pertenencia de un elemento a un conjunto específico, y la probabilidad de falso positivo depende del conjunto: los primeros conjuntos que se ingresan en el filtro durante la construcción tienen mayores probabilidades de falso positivo que los conjuntos ingresados al final. [ 48 ] Esta propiedad permite una priorización de los conjuntos, donde se pueden preservar los conjuntos que contienen elementos más "importantes".
Filtros Bloom en capas
Un filtro Bloom por capas consta de múltiples capas de filtro Bloom. Los filtros Bloom por capas permiten realizar un seguimiento de cuántas veces se agregó un elemento al filtro Bloom, comprobando en cuántas capas se encuentra dicho elemento. Con un filtro Bloom por capas, una operación de comprobación normalmente devolverá el número de la capa más profunda en la que se encontró el elemento. [ 49 ]
Filtros Bloom atenuados

Un filtro Bloom atenuado de profundidad D puede considerarse como una matriz de D filtros Bloom normales. En el contexto del descubrimiento de servicios en una red, cada nodo almacena localmente filtros Bloom regulares y atenuados. El filtro Bloom regular o local indica qué servicios ofrece el propio nodo. El filtro atenuado de nivel i indica qué servicios se pueden encontrar en nodos que se encuentran a i saltos del nodo actual. El valor i se construye tomando la unión de los filtros Bloom locales para los nodos que se encuentran a i saltos del nodo. [ 50 ]
Por ejemplo, consideremos una red pequeña, como se muestra en el gráfico a continuación. Supongamos que buscamos un servicio A cuyo ID se codifica mediante hashes a los bits 0, 1 y 3 (patrón 11010). Sea el nodo n1 el punto de partida. Primero, verificamos si n1 ofrece el servicio A consultando su filtro local. Dado que los patrones no coinciden, consultamos el filtro Bloom atenuado para determinar qué nodo debería ser el siguiente salto. Observamos que n2 no ofrece el servicio A, pero se encuentra en la ruta hacia nodos que sí lo ofrecen. Por lo tanto, nos movemos a n2 y repetimos el mismo procedimiento. Rápidamente encontramos que n3 ofrece el servicio y, por lo tanto, se localiza el destino. [ 51 ]
Al utilizar filtros Bloom atenuados que constan de múltiples capas, se pueden descubrir servicios a más de una distancia de salto, evitando la saturación del filtro Bloom mediante la atenuación (desplazamiento) de los bits establecidos por fuentes más lejanas. [ 50 ]
Búsqueda de estructuras químicas
Los filtros de Bloom se utilizan a menudo para buscar en grandes bases de datos de estructuras químicas (véase similitud química ). En el caso más simple, los elementos añadidos al filtro (denominado huella digital en este campo) son simplemente los números atómicos presentes en la molécula, o un hash basado en el número atómico de cada átomo y el número y tipo de sus enlaces. Este caso es demasiado simple para ser útil. Los filtros más avanzados también codifican recuentos de átomos, características de subestructuras más grandes como grupos carboxilo y propiedades de grafos como el número de anillos. En las huellas digitales basadas en hash, se utiliza una función hash basada en propiedades de átomos y enlaces para convertir un subgrafo en una semilla de PRNG , y los primeros valores de salida se utilizan para establecer bits en el filtro de Bloom.
Las huellas moleculares surgieron a finales de la década de 1940 como una forma de buscar estructuras químicas en tarjetas perforadas. Sin embargo, no fue hasta alrededor de 1990 que Daylight Chemical Information Systems, Inc. introdujo un método basado en hash para generar los bits, en lugar de utilizar una tabla precalculada. A diferencia del enfoque de diccionario, el método hash puede asignar bits a subestructuras que no se habían visto previamente. A principios de la década de 1990, el término "huella molecular" se consideraba distinto de "claves estructurales", pero desde entonces ha evolucionado para abarcar la mayoría de las características moleculares que se pueden utilizar para una comparación de similitud, incluidas las claves estructurales, las huellas moleculares de conteo disperso y las huellas moleculares 3D. A diferencia de los filtros Bloom, el método hash de Daylight permite que el número de bits asignados por característica sea una función del tamaño de la característica, pero la mayoría de las implementaciones de huellas moleculares tipo Daylight utilizan un número fijo de bits por característica, lo que las convierte en un filtro Bloom. Las huellas moleculares originales de Daylight podían utilizarse tanto para la comparación de similitud como para el cribado. Muchos otros tipos de huellas dactilares, como la popular ECFP2, pueden utilizarse para la detección de similitudes, pero no para el cribado, ya que incluyen características ambientales locales que generan falsos negativos al usarse como método de cribado. Aunque se construyan con el mismo mecanismo, no son filtros de Bloom porque no pueden utilizarse para filtrar.
Véase también
- Esquema de conteo-min : estructura de datos probabilística en informática
- Hashing de características : Vectorización de características mediante una función hash
- MinHash – Técnica de minería de datos
- Filtro de cociente
- Lista de saltos – Estructura de datos probabilística
- Filtros de Bloom en bioinformática
- Filtro de cuco : estructura de datos para la pertenencia aproximada a un conjunto.
Referencias
Citas
- ↑ Bloom (1970) .
- ↑ Bonomi et al. (2006) .
- ↑ Dillinger y Manolios (2004a) ; Kirsch y Mitzenmacher (2006) .
- ↑ Mitzenmacher y Upfal (2005) .
- ^ Blustein y El-Maazawi (2002) , págs. 21-22
- ↑ Gopinathan, Kiran; Sergey, Ilya (21 de julio de 2020). «Certificación de certeza e incertidumbre en estructuras de consulta de pertenencia aproximada». Verificación asistida por computadora . Notas de clase en ciencias de la computación. Vol. 12225. Springer, Cham. págs. 279–303 . doi : 10.1007/978-3-030-53291-8_16 . ISBN 978-3-030-53290-1. PMC 7363400 .
- ↑ Mitzenmacher y Upfal (2005) , págs. 109–111, 308.
- ↑ Mitzenmacher y Upfal (2005) , pág. 308.
- ↑ Starobinski, Trachtenberg y Agarwal (2003)
- ↑ Goel y Gupta (2010)
- 1 2 Swamidass, S. Joshua; Baldi, Pierre (2007). "Corrección matemática para medidas de similitud de huellas dactilares para mejorar la recuperación química". Journal of Chemical Information and Modeling . 47 (3): 952– 964. doi : 10.1021/ci600526a . PMID 17444629 .
- ↑ Dasgupta, Sanjoy; Sheehan, Timothy C.; Stevens, Charles F.; Navlakha, Saket (2018-12-18). "Una estructura de datos neuronal para la detección de novedades" . Actas de la Academia Nacional de Ciencias . 115 (51): 13093– 13098. Bibcode : 2018PNAS..11513093D . doi : 10.1073/pnas.1814448115 . ISSN 0027-8424 . PMC 6304992. PMID 30509984 .
- ^ Maggs y Sitaraman (2015 ) .
- ↑ "Módulo contrib de índice Bloom" . Postgresql.org. 1 de abril de 2016. Archivado del original el 9 de septiembre de 2018. Consultado el 18 de junio de 2016 .
- ↑ Chang et al. (2006) ; Apache Software Foundation (2012) .
- ↑ Yakunin, Alex (25 de marzo de 2010). "Blog de Alex Yakunin: Buena aplicación de filtro Bloom" . Blog.alexyakunin.com. Archivado del original el 27 de octubre de 2010. Consultado el 31 de mayo de 2014 .
- ↑ "Problema 10896048: Transición de la navegación segura del filtro bloom al conjunto de prefijos. - Revisión de código" . Chromiumcodereview.appspot.com . Consultado el 3 de julio de 2014 .
- ↑ Jones, JC (09/01/2020). "Presentamos CRLite: Todas las revocaciones de la PKI web, comprimidas" . Blog de seguridad de Mozilla . Consultado el 12/01/2026 .
- ↑ Jones, JC (2020-01-09). "El diseño integral de CRLite" . Blog de seguridad de Mozilla . Recuperado el 2026-01-12 .
- ↑ Colville, Stuart (24 de agosto de 2020). "Introducción a una lista de bloqueo de complementos escalable" . Blog de la comunidad de complementos de Mozilla . Recuperado el 12 de enero de 2026 .
- ↑ Goodwin, Bob; Hopcroft, Michael; Luu, Dan; Clemmer, Alex; Curmei, Mihaela; Elnikety, Sameh; Yuxiong, He (2017). "BitFunnel: Revisando las firmas para la búsqueda" (PDF) . Actas de la 40.ª Conferencia Internacional ACM SIGIR sobre Investigación y Desarrollo en Recuperación de Información . págs. 605–614 . doi : 10.1145/3077136.3080789 . ISBN 978-1-4503-5022-8. S2CID 20123252 .
- ↑ Wessels (2004) .
- ↑ "Filtro Bloom | Glosario de River" . River Financial . Consultado el 14 de noviembre de 2020 .
- ↑ "Plan 9 /sys/man/8/venti" . Plan9.bell-labs.com. Archivado del original el 28 de agosto de 2014. Consultado el 31 de mayo de 2014 .
- ↑ "Spin - Verificación formal" .
- ↑ Mullin (1990) .
- ↑ "¿Qué son los filtros Bloom?" . Medium. 15 de julio de 2015. Consultado el 1 de noviembre de 2015 .
- ↑ "Documentación de Grafana Tempo - Almacenamiento en caché" . Grafana . Consultado el 16 de noviembre de 2022 .
- 1 2 Carter, Larry; Floyd, Robert; Gill, John; Markowsky, George; Wegman, Mark (1978). "Probadores de pertenencia exactos y aproximados" . Actas del décimo simposio anual de la ACM sobre Teoría de la Computación - STOC '78 . Nueva York, Nueva York, EE. UU.: ACM Press. págs. 59–65 . doi : 10.1145/800133.804332 . S2CID 6465743 .
- ↑ Pagh, Pagh y Rao (2005) .
- ↑ Bender, Michael A.; Farach-Colton, Martin; Johnson, Rob; Kraner, Russell; Kuszmaul, Bradley C.; Medjedovic, Dzejla; Montes, Pablo; Shetty, Pradeep; Spillane, Richard P.; Zadok, Erez (julio de 2012). "No te descontroles" . Actas de la Fundación VLDB . 5 (11): 1627– 1637. doi : 10.14778/2350229.2350275 . ISSN 2150-8097 . S2CID 47180056 .
- 1 2 Even, Tomer; Even, Guy; Morrison, Adam (marzo de 2022). "Filtro de prefijo" . Actas de la Fundación VLDB . 15 (7): 1311– 1323. doi : 10.14778/3523210.3523211 . ISSN 2150-8097 .
- ↑ Bender, Michael A.; Farach-Colton, Martín; Kuszmaul, John; Kuszmaul, William; Liu, Mingmou (2022-06-09). "Sobre el equilibrio óptimo tiempo/espacio para tablas hash" . Actas del 54.º Simposio Anual ACM SIGACT sobre Teoría de la Computación . Nueva York, NY, EE. UU.: ACM. págs. 1284–1297 . arXiv : 2111.00602 . doi : 10.1145/3519935.3519969 . hdl : 1721.1/146419 . ISBN 9781450392648. S2CID 240354692 .
- 1 2 Luo, Lailong; Guo, Deke; Ma, Richard TB; Rottenstreich, Ori; Luo, Xueshan (13 de abril de 2018). "Optimización del filtro de Bloom: desafíos, soluciones y comparaciones". arXiv : 1804.04777 [ cs.DS ].
- ↑Dasgupta, Sanjoy; Sheehan, Timothy C.; Stevens, Charles F.; Navlakhae, Saket (2018). "A neural data structure for novelty detection". Proceedings of the National Academy of Sciences. 115 (51): 13093–13098. Bibcode:2018PNAS..11513093D. doi:10.1073/pnas.1814448115. PMC 6304992. PMID 30509984.
- ↑Kiss, S. Z.; Hosszu, E.; Tapolcai, J.; Rónyai, L.; Rottenstreich, O. (2018). "Bloom filter with a false positive free zone"(PDF). IEEE Proceedings of INFOCOM. Retrieved 4 December 2018.
- ↑Larisch, James; Choffnes, David; Levin, Dave; Maggs, Bruce M.; Mislove, Alan; Wilson, Christo (2017). "CRLite: A Scalable System for Pushing All TLS Revocations to All Browsers". 2017 IEEE Symposium on Security and Privacy (SP). pp. 539–556. doi:10.1109/sp.2017.17. ISBN 978-1-5090-5533-3. S2CID 3926509.
- ↑Kim, Kibeom; Jeong, Yongjo; Lee, Youngjoo; Lee, Sunggu (2019-07-11). "Analysis of Counting Bloom Filters Used for Count Thresholding". Electronics. 8 (7): 779. doi:10.3390/electronics8070779. ISSN 2079-9292.
- ↑Pournaras, Warnier & Brazier (2013).
- ↑Sanders, Peter; Schlag, Sebastian; Müller, Ingo (2013). "Communication efficient algorithms for fundamental big data problems". 2013 IEEE International Conference on Big Data. pp. 15–23. doi:10.1109/BigData.2013.6691549. ISBN 978-1-4799-1293-3. S2CID 15968541.
- ↑Schlag, Sebastian (2013). "Distributed duplicate removal". Karlsruhe Institute of Technology.
- ↑Shatdal, Ambuj; Jeffrey F. Naughton (1994). "Processing aggregates in parallel database systems". University of Wisconsin-Madison Department of Computer Sciences: 8.
- ↑V. Kumar; A. Grama; A. Gupta; G. Karypis (1994). Introduction to Parallel Computing. Design and Analysis of Algorithms. Benjamin/Cummings.
- ↑ Yoon, MyungKeun (2010). "Filtro Bloom de envejecimiento con dos búferes activos para conjuntos dinámicos". IEEE Transactions on Knowledge and Data Engineering . 22 (1): 134– 138. Bibcode : 2010ITKDE..22..134Y . doi : 10.1109/TKDE.2009.136 . S2CID 15922054 .
- ↑ Géraud-Stewart, Rémi; Lombard-Platet, Marius; Naccache, David (2020). "Aproximación a la detección óptima de duplicados en una ventana deslizante". Computing and Combinatorics . Lecture Notes in Computer Science. Vol. 12273. pp. 64–84 . arXiv : 2005.04740 . doi : 10.1007/978-3-030-58150-3_6 . ISBN 978-3-030-58149-7. S2CID 218581915 .
- ↑ Kirsch, Adam; Mitzenmacher†, Michael. "Menos hash, mismo rendimiento: Construyendo un mejor filtro Bloom" (PDF) . Escuela de Ingeniería y Ciencias Aplicadas de Harvard . Wiley InterScience.
- ↑ Calderoni, Palmieri & Maio (2015) .
- ↑ Calderoni, Palmieri & Maio (2018) .
- ↑ Zhiwang, Jungang y Jian (2010) .
- ^ Koucheryavy y col. (2009) .
- ↑ Kubiatowicz y otros. (2000) .
Obras citadas
- Agarwal, Sachin; Trachtenberg, Ari (2006). "Aproximación del número de diferencias entre conjuntos remotos". 2006 IEEE Information Theory Workshop (PDF) . Punta del Este, Uruguay. p. 217. CiteSeerX 10.1.1.69.1033 . doi : 10.1109/ITW.2006.1633815 . ISBN 978-1-4244-0035-5. S2CID 2048278 .
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - Ahmadi, Mahmood; Wong, Stephan (2007), "Una arquitectura de caché para el conteo de filtros de Bloom", XV Conferencia Internacional sobre Redes (ICON-2007) , pág. 218, CiteSeerX 10.1.1.125.2470 , doi : 10.1109/ICON.2007.4444089 , ISBN 978-1-4244-1229-7, S2CID 2967865
- Almeida, Paulo; Baquero, Carlos; Preguica, Nuño; Hutchison, David (2007), "Filtros de floración escalables" (PDF) , Cartas sobre procesamiento de información , 101 (6): 255– 261, doi : 10.1016/j.ipl.2006.10.007 , hdl : 1822/6627
- Apache Software Foundation (2012), "11.6. Diseño de esquemas" , Guía de referencia de Apache HBase, Revisión 0.94.27
- Bloom, Burton H. (1970), "Compromisos espacio-tiempo en la codificación hash con errores permitidos", Communications of the ACM , 13 (7): 422– 426, CiteSeerX 10.1.1.641.9096 , doi : 10.1145/362686.362692 , S2CID 7931252
- Blustein, James; El-Maazawi, Amal (2002), "caso óptimo para filtros de Bloom generales", Filtros de Bloom: un tutorial, análisis y revisión , Facultad de Ciencias de la Computación de la Universidad de Dalhousie, págs . 1–31
- Boldi, Paolo; Vigna, Sebastiano (2005), "Cadenas mutables en Java: diseño, implementación y algoritmos ligeros de búsqueda de texto" , Science of Computer Programming , 54 (1): 3–23 , doi : 10.1016/j.scico.2004.05.003 , archivado del original el 7 de febrero de 2025
- Bonomi, Flavio; Mitzenmacher, Michael ; Panigrahy, Rina; Singh, Sushil; Varghese, George (2006), "Una construcción mejorada para el conteo de filtros de Bloom", Algoritmos – ESA 2006, 14.º Simposio Europeo Anual (PDF) , Lecture Notes in Computer Science , vol. 4168, pp. 684–695 , doi : 10.1007/11841036_61 , ISBN 978-3-540-38875-3
- Broder, Andrei ; Mitzenmacher, Michael (2005), "Aplicaciones de red de los filtros de Bloom: una revisión" (PDF) , Internet Mathematics , 1 (4): 485–509 , doi : 10.1080/15427951.2004.10129096 , S2CID 1560675
- Byers, John W.; Considine, Jeffrey; Mitzenmacher, Michael ; Rost, Stanislav (2004), "Entrega de contenido informado a través de redes superpuestas adaptativas", IEEE/ACM Transactions on Networking , 12 (5): 767, Bibcode : 2004ITNet..12..767B , CiteSeerX 10.1.1.207.1563 , doi : 10.1109/TNET.2004.836103 , S2CID 47088273
- Calderoni, Luca; Palmieri, Paolo; Maio, Dario (2015), "Privacidad de la ubicación sin confianza mutua: El filtro espacial de Bloom" (PDF) , Computer Communications , 68 : 4–16 , doi : 10.1016/j.comcom.2015.06.011 , hdl : 10468/4762 , ISSN 0140-3664
- Calderoni, Luca; Palmieri, Paolo; Maio, Dario (2018), "Propiedades probabilísticas de los filtros Bloom espaciales y su relevancia para los protocolos criptográficos", IEEE Transactions on Information Forensics and Security , 13 (7): 1710– 1721, Bibcode : 2018ITIF...13.1710C , doi : 10.1109/TIFS.2018.2799486 , hdl : 10468/5767 , ISSN 1556-6013 , S2CID 3693354
- Chang, Fay; Dean, Jeffrey; Ghemawat, Sanjay; Hsieh, Wilson; Wallach, Deborah; Burrows, Mike; Chandra, Tushar; Fikes, Andrew; Gruber, Robert (2006), "Bigtable: Un sistema de almacenamiento distribuido para datos estructurados", Séptimo Simposio sobre Diseño e Implementación de Sistemas Operativos
- Charles, Denis Xavier; Chellapilla, Kumar (2008), "Filtros Bloomier: Una segunda mirada", en Halperin, Dan; Mehlhorn, Kurt (eds.), Algoritmos: ESA 2008, 16.º Simposio Europeo Anual, Karlsruhe, Alemania, 15-17 de septiembre de 2008, Actas , Lecture Notes in Computer Science, vol. 5193, Springer, pp. 259-270 , arXiv : 0807.0928 , doi : 10.1007/978-3-540-87744-8_22 , ISBN 978-3-540-87743-1, S2CID 643445
- Chazelle, Bernard ; Kilian, Joe; Rubinfeld, Ronitt ; Tal, Ayellet (2004), "El filtro Bloomier: una estructura de datos eficiente para tablas de búsqueda de soporte estático", Actas del decimoquinto simposio anual ACM-SIAM sobre algoritmos discretos (PDF) , págs. 30-39 .
- Cohen, Saar; Matias, Yossi (2003), "Filtros de Bloom espectrales", Actas de la Conferencia Internacional ACM SIGMOD de 2003 sobre Gestión de Datos (PDF) , págs. 241–252 , doi : 10.1145/872757.872787 , ISBN 978-1581136340, S2CID 1058187 , archivado del original (PDF) el 10-03-2021 , recuperado el 24-10-2019
- Deng, Fan; Rafiei, Davood (2006), "Detección aproximada de duplicados para datos en tiempo real mediante filtros Bloom estables", Actas de la Conferencia ACM SIGMOD (PDF) , págs. 25–36
- Dharmapurikar, Sarang; Song, Haoyu; Turner, Jonathan; Lockwood, John (2006), "Clasificación rápida de paquetes mediante filtros de Bloom", Actas del Simposio ACM/IEEE de 2006 sobre Arquitectura para Sistemas de Redes y Comunicaciones (PDF) , págs. 61–70 , CiteSeerX 10.1.1.78.9584 , doi : 10.1145/1185347.1185356 , ISBN 978-1595935809, S2CID 7848110 , archivado del original (PDF) el 2 de febrero de 2007
- Dietzfelbinger, Martin; Pagh, Rasmus (2008), "Estructuras de datos sucintas para recuperación y pertenencia aproximada", en Aceto, Luca; Damgård, Ivan; Goldberg, Leslie Ann; Halldórsson, Magnús M.; Ingólfsdóttir, Anna; Walukiewicz, Igor (eds.), Autómatas, lenguajes y programación: 35.º Coloquio Internacional, ICALP 2008, Reikiavik, Islandia, 7-11 de julio de 2008, Actas, Parte I, Pista A: Algoritmos, autómatas, complejidad y juegos , Lecture Notes in Computer Science, vol. 5125, Springer, págs. 385–396 , arXiv : 0803.3693 , doi : 10.1007/978-3-540-70575-8_32 , ISBN 978-3-540-70574-1, S2CID 1699996
- Dillinger, Peter C.; Manolios, Panagiotis (2004a), "Verificación rápida y precisa del estado de bits para SPIN", Actas del 11.º Taller Internacional de SPIN sobre Software de Verificación de Modelos , Springer-Verlag, Lecture Notes in Computer Science 2989
- Dillinger, Peter C.; Manolios, Panagiotis (2004b), "Filtros de Bloom en la verificación probabilística", Actas de la 5.ª Conferencia Internacional sobre Métodos Formales en Diseño Asistido por Computadora , 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, archived from the original on 2009-05-17
- 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, Lecture Notes in Computer Science, vol. 4619, Springer-Verlag, pp. 637–648, arXiv:0704.3313, Bibcode:2007arXiv0704.3313E
- Fan, Bin; Andersen, Dave G.; Kaminsky, Michael; Mitzenmacher, Michael D. (2014), "Cuckoo filter: Practically better than Bloom", Proceedings of the 10th ACM International on Conference on emerging Networking Experiments and Technologies, pp. 75–88, doi:10.1145/2674005.2674994, ISBN 9781450332798. Open source implementation available on github.
- Fan, Li; Cao, Pei; Almeida, Jussara; Broder, Andrei (2000), "Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol"(PDF), IEEE/ACM Transactions on Networking, 8 (3): 281–293, Bibcode:2000ITNet...8..281L, CiteSeerX 10.1.1.41.1487, doi:10.1109/90.851975, S2CID 4779754, archived from the original(PDF) on 2017-09-22, retrieved 2018-07-30. A preliminary version appeared at SIGCOMM '98.
- Goel, Ashish; Gupta, Pankaj (2010), "Small subset queries and bloom filters using ternary associative memories, with applications"(PDF), ACM SIGMETRICS Performance Evaluation Review, 38: 143, CiteSeerX 10.1.1.296.6513, doi:10.1145/1811099.1811056
- Graf, Thomas Mueller; Lemire, Daniel (2020), "Filtros XOR", ACM Journal of Experimental Algorithmics , 25 : 1–16 , arXiv : 1912.08258 , Bibcode : 2019arXiv191208258M , doi : 10.1145/3376122 , S2CID 209405019
- Grandi, Fabio (2018), "Sobre el análisis de los filtros de Bloom" (PDF) , Information Processing Letters , 129 : 35–39 , doi : 10.1016/j.ipl.2017.09.004
- Kirsch, Adam; Mitzenmacher, Michael (2006), "Menos hashing, mismo rendimiento: Construyendo un mejor filtro de Bloom", en Azar, Yossi; Erlebach, Thomas (eds.), Algorithms – ESA 2006, 14th Annual European Symposium (PDF) , Lecture Notes in Computer Science, vol. 4168, Springer-Verlag, Lecture Notes in Computer Science 4168, pp. 456–467 , doi : 10.1007/11841036 , ISBN 978-3-540-38875-3Archivado del original (PDF) el 31/01/2009
- Koucheryavy, Y.; Giambene, G.; Staehle, D.; Barceló-Arroyo, F.; Braun, T.; Siris, V. (2009), "Gestión de tráfico y QoS en redes multimedia inalámbricas", Informe final COST 290 : 111
- Kubiatowicz, J.; Bindel, D.; Czerwinski, Y.; Geels, S.; Eaton, D.; Gummadi, R.; Rhea, S.; Weatherspoon, H.; et al. (2000), "Oceanstore: Una arquitectura para almacenamiento persistente a escala global" (PDF) , ACM SIGPLAN Notices : 190–201 , archivado del original (PDF) el 11 de marzo de 2012 , recuperado el 1 de diciembre de 2011 .
- Maggs, Bruce M.; Sitaraman , Ramesh K. (julio de 2015), "Algorithmic nuggets in content delivery" (PDF) , ACM SIGCOMM Computer Communication Review , 45 (3): 52–66 , CiteSeerX 10.1.1.696.9236 , doi : 10.1145/2805789.2805800 , S2CID 65760 , archivado del original (PDF) el 14 de agosto de 2021.
- Mitzenmacher, Michael ; Upfal, Eli (2005), Probabilidad y computación: algoritmos aleatorios y análisis probabilístico , Cambridge University Press, pp. 107–112 , ISBN 9780521835404
- Mortensen, Christian Worm; Pagh, Rasmus ; Pătrașcu, Mihai (2005), "Sobre la presentación de informes de rango dinámico en una dimensión", Actas del Trigésimo Séptimo Simposio Anual de la ACM sobre Teoría de la Computación , págs. 104–111 , arXiv : cs/0502032 , doi : 10.1145/1060590.1060606 , ISBN 978-1581139600, S2CID 56473
- Mullin, James K. (1990), "Semijoins óptimos para sistemas de bases de datos distribuidas", IEEE Transactions on Software Engineering , 16 (5): 558– 560, Bibcode : 1990ITSEn..16..558M , doi : 10.1109/32.52778
- Pagh, Anna; Pagh, Rasmus ; Rao, S. Srinivasa (2005), "Un reemplazo óptimo del filtro de Bloom", Actas del decimosexto simposio anual ACM-SIAM sobre algoritmos discretos (PDF) , págs. 823–829
- Palmieri, Paolo; Calderoni, Luca; Maio, Dario (2014), "Filtros Bloom espaciales: Habilitando la privacidad en aplicaciones con conocimiento de la ubicación", Actas de la 10.ª Conferencia Internacional sobre Seguridad de la Información y Criptología (Inscrypt 2014) , vol. 8957, Springer-Verlag, Lecture Notes in Computer Science, pp. 16–36 , CiteSeerX 10.1.1.471.4759 , doi : 10.1007/978-3-319-16745-9_2 , ISBN 978-3-319-16744-2
- Porat, Ely (2009), "Un reemplazo óptimo del filtro de Bloom basado en la resolución de matrices", en Frid, Anna E.; Morozov, Andrey; Rybalchenko, Andrey; Wagner, Klaus W. (eds.), Ciencias de la Computación, Teoría y Aplicaciones: Cuarto Simposio Internacional de Ciencias de la Computación en Rusia, CSR 2009, Novosibirsk, Rusia, 18-23 de agosto de 2009, Actas , Lecture Notes in Computer Science, vol. 5675, Springer, pp. 263-273 , arXiv : 0804.1845 , doi : 10.1007/978-3-642-03351-3_25 , ISBN 978-3-642-03350-6, S2CID 3205108
- Pournaras, E.; Warnier, M.; Brazier, FMT (2013), "Un servicio de agregación genérico y adaptativo para redes descentralizadas a gran escala", Complex Adaptive Systems Modeling , 1 (19): 19, doi : 10.1186/2194-3206-1-19Implementación de prototipo disponible en GitHub .
- Putze, F.; Sanders, P .; Singler, J. (2007), "Filtros Bloom eficientes en caché, hash y espacio", en Demetrescu, Camil (ed.), Algoritmos experimentales, 6.º Taller Internacional, WEA 2007 (PDF) , Lecture Notes in Computer Science, vol. 4525, Springer-Verlag, Lecture Notes in Computer Science 4525, pp. 108–121 , doi : 10.1007/978-3-540-72845-0 , ISBN 978-3-540-72844-3Archivado desde el original (PDF) el 23/06/2007 , consultado el 18/07/2007.
- Rottenstreich, Ori; Kanizo, Yossi; Keslassy, Isaac (2012), "El filtro Bloom de conteo de incremento variable", 31.ª Conferencia Internacional Anual IEEE sobre Comunicaciones Informáticas, 2012, Infocom 2012 (PDF) , págs. 1880–1888 , CiteSeerX 10.1.1.174.7165 , doi : 10.1109/INFCOM.2012.6195563 , ISBN 978-1-4673-0773-4
- Sethumadhavan, Simha; Desikan, Rajagopalan; Burger, Doug; Moore, Charles R.; Keckler, Stephen W. (2003), "Desambiguación de memoria de hardware escalable para procesadores con alto ILP", 36.º Simposio Internacional Anual IEEE/ACM sobre Microarquitectura, 2003, MICRO-36 (PDF) , págs. 399–410 , CiteSeerX 10.1.1.229.1254 , doi : 10.1109/MICRO.2003.1253244 , ISBN 978-0-7695-2043-8, S2CID 195881068 , archivado del original (PDF) el 14/01/2007
- Starobinski, David; Trachtenberg, Ari; Agarwal, Sachin (2003), "Sincronización eficiente de PDA" (PDF) , IEEE Transactions on Mobile Computing , 2 (1): 40, Bibcode : 2003ITMC....2...40S , CiteSeerX 10.1.1.71.7833 , doi : 10.1109/TMC.2003.1195150
- Stern, Ulrich; Dill, David L. (1996), "Un nuevo esquema para la verificación probabilística con uso eficiente de memoria", Actas de la Conferencia Internacional Conjunta IFIP TC6/WG6.1 sobre Técnicas de Descripción Formal para Sistemas Distribuidos y Protocolos de Comunicación, y Especificación, Pruebas y Verificación de Protocolos , Chapman & Hall, Actas de la Conferencia IFIP, págs. 333–348 , CiteSeerX 10.1.1.47.4101
- Wessels, Duane (enero de 2004), "10.7 Cache Digests", Squid: The Definitive Guide (1.ª ed.), O'Reilly Media, pág. 172, ISBN 978-0-596-00162-9Los
resúmenes de caché se basan en una técnica publicada por primera vez por Pei Cao , llamada Summary Cache. La idea fundamental es utilizar un filtro Bloom para representar el contenido de la caché.
- Tarkoma, Sasu; Rothenberg, Christian Esteve; Lagerspetz, Eemil (2012), "Teoría y práctica de los filtros Bloom para sistemas distribuidos", IEEE Communications Surveys & Tutorials, n.º 1. (PDF) , vol. 14, pp. 131–155
- Zhiwang, Cen; Jungang, Xu; Jian, Sun (2010), "Un filtro Bloom multicapa para la detección de URL duplicadas", Actas de la 3.ª Conferencia Internacional sobre Teoría e Ingeniería Informática Avanzada (ICACTE 2010) , vol. 1, págs. V1–586–V1–591, doi : 10.1109/ICACTE.2010.5578947 , ISBN 978-1-4244-6539-2, S2CID 3108985
Enlaces externos
- "Uso de filtros de Bloom": Explicación detallada de los filtros de Bloom usando Perl.
- Por qué los filtros Bloom funcionan como lo hacen (Michael Nielsen, 2012)
- Filtros de Bloom: un tutorial, análisis y estudio (Blustein y El-Maazawi, 2002) en la Universidad de Dalhousie.
- Tabla de tasas de falsos positivos para diferentes configuraciones de un sitio web de la Universidad de Wisconsin-Madison.
- "Filtros Bloom más óptimos", Ely Porat (noviembre de 2007), vídeo de Google TechTalk en YouTube.
- Hashing
- Estructuras de datos probabilísticas
- Algoritmos de compresión con pérdida
- Estructuras de datos basadas en hash
- 1970 en informática