Introducción al filtro Bloom

¿Qué es el filtro de floración?

El uso de filtros Bloom puede lograr la deduplicación.

Ventajas: La memoria ocupada es mucho menor que con HashSet, y también es adecuada para operaciones de deduplicación de grandes cantidades de datos.

Desventajas: Existe la posibilidad de un error de juicio. Ningún duplicado puede considerarse duplicado, pero los datos duplicados definitivamente se considerarán duplicados.

El filtro Bloom fue propuesto por Burton Howard Bloom en 1970. Es una estructura de datos probabilística eficiente en el espacio que se utiliza para determinar si un elemento está en un conjunto. A menudo se utiliza en el método de lista en blanco y negro de filtrado de spam, módulo de evaluación de URL del rastreador (Crawler), etc.

La tabla hash también se puede usar para determinar si un elemento está en el conjunto, pero el filtro Bloom solo necesita 1/8 o 1/4 de la complejidad del espacio de la tabla hash para completar el mismo problema.

Los filtros Bloom pueden insertar elementos, pero no pueden eliminar elementos existentes. Cuantos más elementos contenga, mayor será la tasa de falsos positivos, pero los falsos negativos son imposibles.

Por lo tanto, Bloom Filter no es adecuado para esas aplicaciones de "error cero". En aplicaciones donde se pueden tolerar bajas tasas de error, Bloom Filter ha logrado grandes ahorros en espacio de almacenamiento con muy pocos errores.

principio

Idea central: cuando se agrega un elemento al conjunto, asigne este elemento a K puntos en una matriz de bits a través de K funciones hash y configúrelos en 1. Al buscar, solo necesitamos comprobar si estos puntos son todos 1 (aproximadamente) para saber si hay alguno de ellos en el conjunto: si estos puntos tienen algún 0, el elemento marcado no debe estar allí; si son todos 1, el elemento marcado Puede ser. Esta es la idea básica del filtro Bloom.

Descripción detallada:

Lo que necesita el filtro Bloom es una matriz de bits (similar a un mapa de bits) y funciones de mapeo K (similar a una tabla Hash). En el estado inicial, para una matriz de matriz de bits de longitud m, todos sus bits se establecen en 0.

Inserte la descripción de la imagen aquí

Para un conjunto S = {S1, S2 ... Sn} con n elementos, mediante k funciones de mapeo {f1, f2, ... fk}, se mapea cada elemento Sj (1 <= j <= n) en el conjunto S Son K valores {g1, g2… gk}, y luego establezca la matriz correspondiente [g1], matriz [g2]… matriz [gk] en la matriz de bits a 1:

Inserte la descripción de la imagen aquí

Si desea averiguar si un elemento determinado está en S, obtenga k valores {g1, g2 ... gk} a través de la función de mapeo {f1, f2, ... fk}, y luego juzgue matriz [g1], matriz [g2] ... matriz Si [gk] es todo 1, si es todo 1, entonces el elemento está en S, de lo contrario el elemento no está en S.

El filtro Bloom provocará cierto error de juicio, porque los valores obtenidos al mapear varios elementos del conjunto incluyen g1, g2, ... gk En este caso, puede causar errores de juicio, pero la probabilidad es muy pequeña.

Supongo que te gusta

Origin blog.csdn.net/kaihuishang666/article/details/105034231
Recomendado
Clasificación