¿Qué es un filtro de floración y para qué se utilizan?

Los filtros Bloom se utilizan para verificar rápidamente si un valor es:

  • definitivamente no en una colección, o
  • posiblemente está en una colección.

La forma de hacerlo es con múltiples funciones hash. En lo que respecta a los filtros de floración, una función hash es algo que toma un valor y escupe un índice que generalmente cambiará cuando cambie el valor de entrada.

Digamos que tiene dos de estas funciones hash.

La función hash uno, cuando se le da “A”, escupe 2.
La función hash uno, cuando se le da “B”, escupe 3.
La función hash uno, cuando se le da “C”, escupe 0.
La función hash uno, cuando se le da “D”, escupe 1.

La función hash dos, cuando se le da “A”, escupe 0.
La función hash dos, cuando se le da “B”, escupe 2.
La función hash dos, cuando se le da “C”, escupe 2.
La función hash dos, cuando se le da “D”, escupe 2.

Entonces digamos que tenías una lista:

[“A”, “B”]

Luego realizó un preprocesamiento y ejecutó cada uno de sus valores a través de estas dos funciones hash, luego estableció los bits correspondientes a las salidas en 1.

Diremos que el bit 0 está a la derecha … Terminas con esto:

1101

Entonces, ¿qué te dice esto?

¿Puedo determinar si “A” estaba en mi colección?

Bueno, no, pero puede ser.
Ejecute “A” a través de ambas funciones hash. Apunta a los bits 0 y 2.
Es posible que esos mismos bits se hayan invertido debido a que “C” está en la colección, para que pueda ver la ambigüedad y por qué no lo sabemos con certeza.

¿Está “B” en mi colección?

Las funciones hash, para B, habilitan los bits 2 y 3.
Bueno, podría ser, porque los bits 2 y 3 están configurados en 1. De hecho, podríamos descubrir que B está realmente en la colección, porque nada más puede ser responsable de configurar el bit 3 a 1, pero los filtros de floración no se usan para eso. camino. Tome el valor que desea verificar, vea qué bits se voltea y luego verifique esos bits. Hacer eso es lo que hace que los filtros de floración sean muy rápidos (tan rápido como ejecutar sus funciones hash una vez).

¿Está “C” en mi colección?

No sabemos, por la misma razón que no estamos seguros acerca de “A”. Aunque podría ser.

¿Está “D” en mi colección?

Las funciones hash generan 1 y 2.

Vemos que el 1 bit no está habilitado. Por lo tanto, podemos determinar que “D” definitivamente NO está en mi colección.

¿Ves cómo funciona? En este ejemplo, la probabilidad de que un valor esté realmente en la colección si se invierten los bits es mucho menor de lo que desea. Las posibilidades se pueden aumentar si tiene funciones hash que tienen muchas menos colisiones y genera valores en un rango más amplio de bits.

Si la probabilidad de inclusión de un elemento es lo suficientemente alta, entonces es potencialmente lo suficientemente buena para algunos propósitos. Si el filtro de floración dice que un valor “posiblemente está” en la colección, con un 90% de posibilidades de ser cierto, entonces podría ser una forma fácil de decidir si actuar sobre ese valor presente, entonces, en el improbable caso de que sea no, sufriendo el costo (superado en gran medida por el beneficio potencial) de deshacer la acción.

Bloom Filter es una estructura de datos compacta para la representación probabilística de un conjunto de variables para garantizar si los elementos del conjunto están ciertamente presentes o definitivamente no presentes en el conjunto.

Utiliza una matriz de bits para mayor certeza junto con algunas funciones hash. Se necesitan múltiples funciones hash para garantizar que no se produzca una colisión para dos entradas al mismo hash. El dosificador Bloom Filter mantiene el hash de la entrada en su lugar, genera un hash (valor numérico) con un rango limitado dentro de la matriz de bits. luego establece ese índice en una matriz de bits. así que para n hashes genera n valores y su índice correspondiente se establece en “1”. Entonces “0” significa que no hay entrada cuyo hash se calcule para ese índice por ninguna de las funciones hash. Como un hash definitivamente genera algo dentro de un rango, entonces “0” significa que la entrada definitivamente no está presente.

Para “1” puede existir la posibilidad de que alguna otra entrada establezca ese índice (colisión dentro de la función hash) pero más de 1 función hash genera menos colisiones.

Matemáticamente
Si m es el número de bits en la matriz, 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, la probabilidad de que el bit no esté establecido en 1 por ninguna de las funciones hash es

Un filtro Bloom con 1% de error y un valor óptimo de k , en contraste, requiere solo alrededor de 9.6 bits por elemento, independientemente del tamaño de los elementos. Esta ventaja proviene en parte de su compacidad, heredada de las matrices, y en parte de su naturaleza probabilística. La tasa de falsos positivos del 1% se puede reducir en un factor de diez agregando solo alrededor de 4.8 bits por elemento.

fuente Bloom filtro

Por lo tanto, no podemos estar seguros de que 1 significa que el valor está presente, pero indica la probabilidad de presencia de esa entrada

Para dos hashes, puede verificarlo manualmente en los filtros Bloom por ejemplo
Utiliza soplo y fnv como hash

Aplicaciones

Es ampliamente utilizado en bases de datos distribuidas como casandra. En cassandra hay una estrategia “NetworkToplogy” que divide los datos originales y los almacena en trozos en diferentes servidores. ahora cuando llamamos para obtener ese valor internamente, tiene RPC en otros servidores para los fragmentos apropiados. Cada nodo en el clúster tiene un filtro de floración en memoria que indica si el hash de valores dados está presente en la base de datos o no si es “1” (índice de filtro de floración), entonces solo va al disco para buscarlo dependiendo del valor de probabilidad . Como la E / S del disco es lenta, el filtro de floración se usa para disminuir la latencia.

También se puede usar en hadoop para unir entradas. Si la entrada proviene de diferentes fuentes, en lugar de pasar directamente los valores a la clase Reductor, primero en Mapper genera sus valores de floración, luego pásalo a través de OutPutCollector a la clase Reductor y luego reduce los valores de filtro de floración. Hadoop ya proporcionó la clase BloomFilter en su paquete de utilidades.
ver @BloomJoin: BloomFilter + CoGroup

En el mundo de las redes, un producto exitoso que usa filtros Bloom es el proxy web distribuido de código abierto llamado Squid. Squid almacena en caché contenido web de acceso frecuente para ahorrar ancho de banda y brindar a los usuarios una experiencia web más rápida. En un grupo de servidores Squid, cada uno puede almacenar en caché un conjunto diferente de contenido. Una solicitud entrante debe enrutarse al servidor Squid que contenga una copia del contenido solicitado, o en caso de una pérdida de caché, la solicitud se pasa al servidor de origen.

Además de esto, HashCache utilizará el filtro de floración para el acierto de caché.
fuente @Page en nec-labs.com

El filtro Bloom es una estructura de datos probabilística de espacio eficiente que admite la operación de agregar, buscar y, a veces, eliminar ampliamente utilizada para probar si el elemento está en un conjunto, especialmente si el conjunto es enorme. Probabilista en este caso significa que no hay una garantía del 100% de que encontrar no tendrá un resultado falso positivo. Es una tabla hash como la estructura de datos que utiliza múltiples funciones hash para la misma clave, pero a diferencia de las tablas hash, no almacena el valor de clave real en un depósito, solo marca todos los depósitos para todas las funciones hash aplicadas a una clave tal como se usa. Entonces, obviamente es más eficiente en espacio que la tabla hash ordinaria.

Se puede encontrar una gran fuente de información Filtro de Bloom
Aquí puede encontrar cómo la tasa de falsos positivos depende de los parámetros del filtro de floración (número de funciones hash, número de bits por clave) Filtros de floración: la matemática
Realmente increíble hablar sobre diferentes tipos de filtros de floración por el ingeniero de Google. También fue una primera introducción al hash cuckoo para mí 🙂

En esta publicación discutiremos sobre el filtro de floración y su caso de uso. Primero creemos un escenario como este.
Supongamos que hay un soporte para bicicletas en nuestra universidad. Y el soporte tiene 1000 espacios para estacionar los ciclos. Y por lo general, un espacio puede tener 4 ciclos. Definitivamente ese soporte tiene capacidad para tener 4000 ciclos. Y es muy conocido que el Sr. Akash mantiene su ciclo en el puesto número 1 todos los días.

Entonces, si queremos saber si Akash está presente en la universidad hoy, solo verificamos el espacio no 1 y si hay algún ciclo disponible allí, decimos que sí, Akash está presente en la universidad. Pero no es cien por ciento http: // correcto. Como dijimos anteriormente, cada ranura puede tener cuatro ciclos, es posible que el ciclo presente en la ranura no 1 no pertenezca a Akash.

Entonces, aquí llega un caso, que es falso positivo. Pero si no hay un ciclo en la ranura no 1, decimos que definitivamente Akash está ausente http://today.Así que no hay posibilidad de falso negativo. Eso es que nunca decimos que Akash está ausente hoy en caso de su presencia en la universidad.

Bloom filter es un filtro simple basado en hash que funciona en el mismo http: //principle.Permite almacenar elementos y nos ayuda a identificar rápidamente muchos (no todos) elementos que no están presentes. A veces podemos decir que Akash no está en el universidad (si no hay ciclo en la ranura 1).

Consulte el siguiente enlace para obtener una explicación detallada

Bloom Filters Por Ejemplo

More Interesting

¿Puedo obtener un enlace a algunas buenas preguntas de programación dinámica 3-D?

¿Por qué no se utilizan algoritmos genéticos?

¿Cuál es el algoritmo correcto para realizar la diferenciación usando un programa de computadora para cualquier función ingresada por el usuario?

¿Es la estructura de datos y el conocimiento del algoritmo un requisito previo para los problemas en Topcoder?

¿Cuál es una explicación intuitiva del algoritmo Metropolis-Hastings?

Cómo realizar un recorrido de orden posterior en un árbol binario

¿Cómo se puede implementar un algoritmo de ordenación rápida en el cálculo Lambda?

Cómo entender un algoritmo de búsqueda CSP

¿Cuándo podemos usar la máquina de vectores de soporte básica sobre otros algoritmos de clasificación?

Procesadores de señal digital (DSP): cuando alguien escribe un archivo en una tarjeta SD usando un bus spi, ¿cómo sabe dónde debería estar el comienzo de un nuevo archivo?

¿Cuáles son algunas implementaciones reales de algoritmos altamente utilizados o patrones de diseño que ha utilizado en el desarrollo web front-end?

¿Cómo podemos lograr la inserción en el hash en el peor de los casos en O (1) mediante el uso de la matriz, mientras que las matrices tienen problemas de extensión en filledup?

¿Hay algún algoritmo que sea más rápido que log (n)?

¿Cuál es el enfoque para resolver la interpretación de datos en CAT? ¿Se usa lápiz y papel para dibujar estructuras o se mantiene al mínimo?

Cómo conectar el modelo BPMN con la estructura de datos existente