Alex lo ha explicado bastante bien. Para aquellos que aún no lo entendieron bien, con suerte este ejemplo los ayudará a comprender:
Digamos que trabajo para Google, en el equipo de Chrome, y quiero agregar una función al navegador que notifica al usuario si la URL que ingresó es una URL maliciosa. Así que tengo un conjunto de datos de aproximadamente 1 millón de URL maliciosas, el tamaño de este archivo es de alrededor de 25 MB. Dado que el tamaño es bastante grande (grande en comparación con el tamaño del navegador en sí), almaceno estos datos en un servidor remoto.
Caso 1: uso una función hash con una tabla hash. Decido una función hash eficiente y ejecuto todos los 1 millón de URL a través de la función hash para obtener claves hash. Luego hago una tabla hash (una matriz), donde la clave hash me daría el índice para colocar esa URL. Así que ahora, una vez que he realizado el hash y llenado la tabla hash, verifico su tamaño. He almacenado los 1 millón de URL en la tabla hash junto con sus claves. Entonces, el tamaño es de al menos 25 MB. Esta tabla hash, debido a su tamaño, se almacenará en un servidor remoto. Cuando aparece un usuario e ingresa una URL en la barra de direcciones, necesito verificar si es maliciosa. Por lo tanto, ejecuto la URL a través de la función hash (el propio navegador puede hacer esto) y obtengo una clave hash para esa URL. Ahora tengo que hacer una solicitud a mi servidor remoto con esa clave hash, para verificar si la URL particular en mi tabla hash con esa clave en particular, es la misma que la que ingresó el usuario. Si es así, entonces es malicioso y si no, entonces no es malicioso. Por lo tanto, cada vez que el usuario ingresa una URL, se debe realizar una solicitud al servidor remoto para verificar si es una URL maliciosa. Esto llevaría mucho tiempo y, por lo tanto, ralentizaría mi navegador.
Caso 2: uso un filtro de floración. La lista completa de 1 millón de URL se ejecuta a través del filtro de floración utilizando múltiples funciones hash y las posiciones respectivas se marcan como 1, en una gran variedad de 0. Digamos que queremos una tasa de falsos positivos del 1%, utilizando una calculadora de filtro de floración ( http://hur.st/bloomfilter?n=1000000&p=0.01), obtenemos el tamaño del filtro de floración requerido de solo 1,13 MB. Se espera este tamaño pequeño ya que, aunque el tamaño de la matriz es enorme, solo estamos almacenando 1 o 0 y no las URL como en el caso de la tabla hash. Esta matriz se puede tratar como una matriz de bits. Es decir, dado que solo tenemos dos valores 1 y 0, podemos establecer bits individuales en lugar de bytes. Esto reduciría el espacio ocupado en 8 veces. ¡Este filtro de floración de 1,13 MB, debido a su pequeño tamaño, se puede almacenar en el propio navegador web! Por lo tanto, cuando un usuario ingresa e ingresa una URL, simplemente aplicamos las funciones hash requeridas (en el propio navegador) y verificamos todas las posiciones en el filtro de floración (que se almacena en el navegador). Un valor de 0 en cualquiera de las posiciones nos dice que esta URL DEFINITIVAMENTE NO está en la lista de URL maliciosas y el usuario puede proceder libremente. Por lo tanto, no hicimos una llamada al servidor y, por lo tanto, ahorramos tiempo. Un valor de 1 nos dice que la URL PODRÍA estar en la lista de URL maliciosas. En estos casos, hacemos una llamada al servidor remoto y allí podemos usar alguna otra función hash con alguna tabla hash como en el primer caso para recuperar y verificar si la URL está realmente presente. Dado que la mayoría de las veces, no es probable que una URL sea maliciosa, el pequeño filtro de floración en el navegador se da cuenta de eso y, por lo tanto, ahorra tiempo al evitar las llamadas al servidor remoto. Solo en algunos casos, si el filtro bloom nos dice que la URL PODRÍA ser maliciosa, solo en esos casos hacemos una llamada al servidor. Ese 'PODER' es 99% correcto. En estos casos, hacemos una llamada al servidor remoto y allí podemos usar alguna otra función hash con alguna tabla hash como en el primer caso para recuperar y verificar si la URL está realmente presente. Dado que la mayoría de las veces, no es probable que una URL sea maliciosa, el pequeño filtro de floración en el navegador se da cuenta de eso y, por lo tanto, ahorra tiempo al evitar las llamadas al servidor remoto. Solo en algunos casos, si el filtro bloom nos dice que la URL PODRÍA ser maliciosa, solo en esos casos hacemos una llamada al servidor. Ese 'PODER' es 99% correcto. En estos casos, hacemos una llamada al servidor remoto y allí podemos usar alguna otra función hash con alguna tabla hash como en el primer caso para recuperar y verificar si la URL está realmente presente. Dado que la mayoría de las veces, no es probable que una URL sea maliciosa, el pequeño filtro de floración en el navegador se da cuenta de eso y, por lo tanto, ahorra tiempo al evitar las llamadas al servidor remoto. Solo en algunos casos, si el filtro bloom nos dice que la URL PODRÍA ser maliciosa, solo en esos casos hacemos una llamada al servidor. Ese 'PODER' es 99% correcto. el pequeño filtro de floración en el navegador se da cuenta de eso y, por lo tanto, ahorra tiempo al evitar llamadas al servidor remoto. Solo en algunos casos, si el filtro bloom nos dice que la URL PODRÍA ser maliciosa, solo en esos casos hacemos una llamada al servidor. Ese 'PODER' es 99% correcto. el pequeño filtro de floración en el navegador se da cuenta de eso y, por lo tanto, ahorra tiempo al evitar llamadas al servidor remoto. Solo en algunos casos, si el filtro bloom nos dice que la URL PODRÍA ser maliciosa, solo en esos casos hacemos una llamada al servidor. Ese 'PODER' es 99% correcto.
Entonces, al usar un pequeño filtro de floración en el navegador, hemos ahorrado mucho tiempo, ya que no necesitamos hacer llamadas al servidor para cada URL ingresada.
Podemos ver que la tabla hash con una sola función hash se usa para un propósito completamente diferente al de un filtro de floración. Ojalá esto aclare tus dudas :)
editar :
Implementé un filtro de floración para la tarea de pruebas de URL maliciosas en Python. El código se puede encontrar aquí: https://github.com/tarunsharma1/Bloom-Filter
El código es muy simple de entender y se proporciona una descripción detallada en el archivo Léame.