Articulo de referencia

Filtro de cuco

Un filtro cuco es una estructura de datos probabilística que optimiza el espacio y se utiliza para comprobar si un elemento pertenece a un conjunto , al igual que un filtro Bloo...

Un filtro cuco es una estructura de datos probabilística que optimiza el espacio y se utiliza para comprobar si un elemento pertenece a un conjunto , al igual que un filtro Bloom . Son posibles los falsos positivos , pero no los falsos negativos ; en otras palabras, una consulta devuelve "posiblemente en el conjunto" o "definitivamente no en el conjunto". Un filtro cuco también puede eliminar elementos existentes, función que no admiten los filtros Bloom. Además, para aplicaciones que almacenan muchos elementos y buscan tasas de falsos positivos moderadamente bajas, los filtros cuco pueden lograr una menor sobrecarga de espacio que los filtros Bloom optimizados para el espacio. [ 1 ]

Los filtros Cuckoo se describieron por primera vez en 2014. [ 2 ]

Descripción del algoritmo

Un filtro cuco utiliza una tabla hash basada en el hash cuco para almacenar las huellas digitales de los elementos. [ 2 ] La estructura de datos se divide en cubos de cierto tamaño.b{\displaystyle b}Para insertar la huella digital de un artículoincógnita{\displaystyle x}, primero se calculan dos posibles cubetash1(incógnita){\displaystyle h_{1}(x)}yh2(incógnita){\displaystyle h_{2}(x)}dóndeincógnita{\displaystyle x}podrían ir. Estos cubos se calculan utilizando la fórmula

h1(incógnita)=picadillo(incógnita){\displaystyle h_{1}(x)={\text{hash}}(x)}
h2(incógnita)=h1(incógnita)picadillo(huella dactilar(incógnita)){\displaystyle h_{2}(x)=h_{1}(x)\oplus {\text{hash}}({\text{huella digital}}(x))}

Nótese que, debido a la simetría de la operación XOR , se puede calcularh2(incógnita){\displaystyle h_{2}(x)}deh1(incógnita){\displaystyle h_{1}(x)}, yh1(incógnita){\displaystyle h_{1}(x)}deh2(incógnita){\displaystyle h_{2}(x)}. Como se definió anteriormente,h2(incógnita)=h1(incógnita)picadillo(huella dactilar(incógnita)){\displaystyle h_{2}(x)=h_{1}(x)\oplus {\text{hash}}({\text{huella digital}}(x))}; de ello se deduce queh1(incógnita)=h2(incógnita)picadillo(huella dactilar(incógnita)){\displaystyle h_{1}(x)=h_{2}(x)\oplus {\text{hash}}({\text{huella digital}}(x))}Estas propiedades son las que permiten almacenar las huellas digitales con el algoritmo de hash Cuckoo.

La huella dactilar deincógnita{\displaystyle x}se coloca en uno de los cubosh1(incógnita){\displaystyle h_{1}(x)}yh2(incógnita){\displaystyle h_{2}(x)}Si los depósitos están llenos, una de las huellas digitales del depósito se elimina mediante el algoritmo de hash Cuckoo y se coloca en otro depósito donde pueda ir. Si ese depósito también está lleno, puede desencadenarse otra eliminación, y así sucesivamente.

La tabla hash puede lograr tanto una alta utilización (gracias al hash cuckoo ) como compacidad, ya que solo se almacenan huellas digitales. Las operaciones de búsqueda y eliminación de un filtro cuckoo son sencillas. [ 2 ]

Hay un máximo de dos cubos para revisarh1(incógnita){\displaystyle h_{1}(x)}yh2(incógnita){\displaystyle h_{2}(x)}. Si se encuentra, se puede realizar la operación de búsqueda o eliminación correspondiente enO(b){\displaystyle O(b)}tiempo. A menudo, en la práctica,b{\displaystyle b}es una constante.

Para que la tabla hash ofrezca garantías teóricas, el tamaño de la huella digitalF{\displaystyle f}debe ser al menosΩ((registronorte)/b){\displaystyle \Omega ((\log n)/b)}bits. [ 2 ] [ 3 ] [ 4 ] Sujeto a esta restricción, los filtros cuckoo garantizan una tasa de falsos positivos de como máximoϵb/2F1{\displaystyle \epsilon \leq b/2^{f-1}}. [ 2 ]

Comparación con los filtros Bloom

Un filtro cuco es similar a un filtro Bloom en el sentido de que ambos son rápidos y compactos, y ambos pueden devolver falsos positivos como respuestas a consultas de pertenencia a conjuntos:

  • Los filtros Bloom de uso óptimo del espacio1.44registro2(1/ϵ){\displaystyle 1.44\log _{2}(1/\epsilon )}bits de espacio por tecla insertada, dondeϵ{\displaystyle \epsilon }es la tasa de falsos positivos. Un filtro de cuco requiere(registro2(1/ϵ)+1+registro2b)/α{\displaystyle (\log _{2}(1/\epsilon )+1+\log _{2}b)/\alpha }espacio por clave [ 2 ] dondeα{\displaystyle \alpha }es el factor de carga de la tabla hash, que puede ser95.5%{\displaystyle 95.5\%}basado en la configuración del filtro cuco. Tenga en cuenta que el límite inferior teórico de la información requiereregistro2(1/ϵ){\displaystyle \log _{2}(1/\epsilon )}bits para cada elemento. Tanto los filtros Bloom como los filtros Cuckoo con baja carga se pueden comprimir cuando no se utilizan.
  • En una búsqueda positiva, un filtro Bloom óptimo en cuanto al espacio requiere una constanteregistro2(1/ϵ){\displaystyle \log _{2}(1/\epsilon )}accesos a la memoria en la matriz de bits , mientras que un filtro cuco requiere como máximo2b{\displaystyle 2b}accesos a la memoria, que pueden ser una constante en la práctica.
  • Los filtros Cuckoo presentan una velocidad de inserción reducida tras alcanzar un umbral de carga, momento en el que se recomienda expandir la tabla. En cambio, los filtros Bloom pueden seguir insertando nuevos elementos a costa de una mayor tasa de falsos positivos antes de la expansión.
  • Los filtros Bloom ofrecen operaciones rápidas de unión e intersección aproximada mediante operaciones bit a bit económicas, que también se pueden aplicar a filtros Bloom comprimidos si se utiliza compresión de flujo.

Limitaciones

  • Un filtro Cuckoo solo puede eliminar elementos que se sabe que se insertaron previamente.
  • La inserción puede fallar y se requiere un rehash como en otras tablas hash de Cuckoo. Tenga en cuenta que la complejidad de inserción amortizada sigue siendoO(1){\displaystyle O(1)}. [ 5 ]
  • Los filtros Cuckoo requieren un tamaño de huella dactilar.F{\displaystyle f}de al menosΩ((registronorte)/b){\displaystyle \Omega ((\log n)/b)}bits. Esto significa que el espacio por clave debe ser al menos(registronorte)/b{\displaystyle (\log n)/b}bits, incluso siϵ{\displaystyle \epsilon }es grande. En la práctica,b{\displaystyle b}se elige que sea lo suficientemente grande como para que esto no sea un problema importante. [ 2 ]

Referencias

  1. Michael D. Mitzenmacher . "Filtros de Bloom, Hashing de Cuckoo, Filtros de Cuckoo, Filtros de Cuckoo Adaptativos y Filtros de Bloom Aprendidos" .
  2. 1 2 3 4 5 6 7 Fan, Bin; Andersen, Dave G.; Kaminsky, Michael; Mitzenmacher, Michael D. (2014). Filtro Cuckoo: Prácticamente mejor que Bloom . Actas de la 10.ª Conferencia Internacional ACM sobre Experimentos y Tecnologías de Redes Emergentes (CoNEXT '14). Sídney, Australia. págs. 75–88 . doi : 10.1145/2674005.2674994 . ISBN  9781450332798.
  3. Eppstein, David (22 de junio de 2016). Filtro Cuckoo: Simplificación y análisis . Actas del XV Simposio y Talleres Escandinavos sobre Teoría de Algoritmos (SWAT 2016). Actas Internacionales Leibniz en Informática (LIPIcs). Vol. 53. Reikiavik, Islandia. pp. 8:1–8:12. arXiv : 1604.06067 . doi : 10.4230/LIPIcs.SWAT.2016.8 .  
  4. Fleming, Noah (17 de mayo de 2018). Cuckoo Hashing y Cuckoo Filters (PDF) (Informe técnico). Universidad de Toronto.
  5. ^ Pagh, Rasmus ; Rodler, Flemming Friche (2001). "Hashing de cuco". Proc. Noveno Simposio Europeo Anual sobre Algoritmos (ESA 2001) . Apuntes de conferencias sobre informática. vol. 2161. Århus, Dinamarca. págs. 121-133 . doi : 10.1007/3-540-44676-1_10 . ISBN   978-3-540-42493-2.
  • Filtros probabilísticos mediante ejemplos: un tutorial que compara los filtros Cuckoo y Bloom.