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.Para insertar la huella digital de un artículo, primero se calculan dos posibles cubetasydóndepodrían ir. Estos cubos se calculan utilizando la fórmula
Nótese que, debido a la simetría de la operación XOR , se puede calcularde, yde. Como se definió anteriormente,; de ello se deduce queEstas propiedades son las que permiten almacenar las huellas digitales con el algoritmo de hash Cuckoo.
La huella dactilar dese coloca en uno de los cubosySi 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 revisary. Si se encuentra, se puede realizar la operación de búsqueda o eliminación correspondiente entiempo. A menudo, en la práctica,es una constante.
Para que la tabla hash ofrezca garantías teóricas, el tamaño de la huella digitaldebe ser al menosbits. [ 2 ] [ 3 ] [ 4 ] Sujeto a esta restricción, los filtros cuckoo garantizan una tasa de falsos positivos de como máximo. [ 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 espaciobits de espacio por tecla insertada, dondees la tasa de falsos positivos. Un filtro de cuco requiereespacio por clave [ 2 ] dondees el factor de carga de la tabla hash, que puede serbasado en la configuración del filtro cuco. Tenga en cuenta que el límite inferior teórico de la información requierebits 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 constanteaccesos a la memoria en la matriz de bits , mientras que un filtro cuco requiere como máximoaccesos 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 siendo. [ 5 ]
- Los filtros Cuckoo requieren un tamaño de huella dactilar.de al menosbits. Esto significa que el espacio por clave debe ser al menosbits, incluso sies grande. En la práctica,se elige que sea lo suficientemente grande como para que esto no sea un problema importante. [ 2 ]
Referencias
- ↑ Michael D. Mitzenmacher . "Filtros de Bloom, Hashing de Cuckoo, Filtros de Cuckoo, Filtros de Cuckoo Adaptativos y Filtros de Bloom Aprendidos" .
- 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.
- ↑ 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 .
- ↑ Fleming, Noah (17 de mayo de 2018). Cuckoo Hashing y Cuckoo Filters (PDF) (Informe técnico). Universidad de Toronto.
- ^ 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.
Enlaces externos
- Filtros probabilísticos mediante ejemplos: un tutorial que compara los filtros Cuckoo y Bloom.
- Estructuras de datos probabilísticas
- Algoritmos de compresión con pérdida
- Estructuras de datos basadas en hash