En informática, el problema de conteo de elementos distintos [ 1 ] (también conocido en matemáticas aplicadas como problema de estimación de cardinalidad ) consiste en encontrar el número de elementos distintos en un flujo de datos con elementos repetidos. Este es un problema bien conocido con numerosas aplicaciones. Los elementos pueden representar direcciones IP de paquetes que pasan por un enrutador , visitantes únicos a un sitio web, elementos en una gran base de datos, motivos en una secuencia de ADN o elementos de redes RFID / sensores .
Definición formal
- Instancia : Consideremos una secuencia de elementos.con repeticiones. Dejadenota el número de elementos distintos en el flujo, con el conjunto de elementos distintos representado como.
- Objetivo : Encontrar una estimacióndeutilizando únicamenteunidades de almacenamiento, donde.
Un ejemplo de instancia para el problema de estimación de cardinalidad es el siguiente flujo:. Por este caso,.
Solución ingenua
La solución ingenua al problema es la siguiente:
Inicializa un contador, c , a cero,. Inicialice una estructura de datos de diccionario eficiente , D , como una tabla hash o un árbol de búsqueda en la que la inserción y la pertenencia se puedan realizar rápidamente. Para cada elemento, se emite una consulta de membresía. Sino es miembro de D () Agregarpara D Aumentar c en uno, De lo contrario () no hacer nada. Salida.
Siempre que el número de elementos distintos no sea demasiado grande, D cabe en la memoria principal y se puede recuperar una respuesta exacta. Sin embargo, este enfoque no es escalable para almacenamiento limitado, o si el cálculo se realiza para cada elemento.debe minimizarse. En tal caso, se han propuesto varios algoritmos de transmisión que utilizan un número fijo de unidades de almacenamiento.
Algoritmo HyperLogLog
Algoritmos de transmisión
Para manejar la restricción de almacenamiento limitado, los algoritmos de transmisión utilizan una aleatorización para producir una estimación no exacta del número distinto de elementos,Los estimadores de última generación aplican una función hash a cada elemento .en un esquema de datos de baja dimensión utilizando una función hash,Las diferentes técnicas se pueden clasificar según los esquemas de datos que almacenan.
bocetos mínimos/máximos
Los bocetos min/max [ 2 ] [ 3 ] almacenan únicamente los valores hash mínimos/máximos. Ejemplos de estimadores de bocetos min/max conocidos: Chassaing et al. [ 4 ] presentan el boceto max, que es el estimador insesgado de mínima varianza para el problema. El estimador de bocetos max continuos [ 5 ] es el estimador de máxima verosimilitud . El estimador de elección en la práctica es el algoritmo HyperLogLog . [ 6 ]
La intuición detrás de estos estimadores es que cada boceto contiene información sobre la cantidad deseada. Por ejemplo, cuando cada elementoestá asociado con un RV uniforme ,, el valor mínimo esperado deesLa función hash garantiza quees idéntico para todas las apariencias dePor lo tanto, la existencia de duplicados no afecta el valor de las estadísticas de orden extremo .
Existen otras técnicas de estimación además de los bocetos min/max. El primer artículo sobre estimación de conteo distinto [ 7 ] describe el algoritmo de Flajolet-Martin , un boceto de patrón de bits. En este caso, los elementos se codifican mediante una función hash en un vector de bits y el boceto contiene la operación lógica OR de todos los valores codificados. El primer algoritmo asintóticamente óptimo en espacio y tiempo para este problema fue presentado por Daniel M. Kane , Jelani Nelson y David P. Woodruff [ 8 ] .
Bocetos de la parte inferior
Los bocetos Bottom -m [ 9 ] son una generalización de los bocetos min, que mantienen elvalores mínimos, donde. Véase Cosma et al. [ 2 ] para una descripción general teórica de los algoritmos de estimación de recuento distinto, y Metwally [ 10 ] para una descripción general práctica con resultados de simulación comparativos.
Implementación en Python del algoritmo CVM de Knuth
def algorithm_d ( stream , s : int ):p = 1,0búfer = {}para un flujo en :si a en el búfer :buffer.pop ( a )u = uniforme ( 0 , 1 )si u < p :si len ( buffer ) < s :buffer [ a ] = udemás :a_p , u_p = max ( buffer.items ( ), key = lambda x : x [ 1 ] )si u > u_p :p = udemás :buffer.pop ( a_p )buffer [ a ] = up = u_pdevolver len ( buffer ) / pAlgoritmo CVM
En comparación con otros algoritmos de aproximación para el problema de conteo de elementos distintos, el algoritmo CVM [ 11 ] (nombrado por Donald Knuth a partir de las iniciales de Sourav Chakraborty, NV Vinodchandran y Kuldeep S. Meel) utiliza muestreo en lugar de hash. El algoritmo CVM proporciona un estimador insesgado para el número de elementos distintos en una secuencia [ 12 ] , además de las garantías estándar (ε-δ). A continuación se muestra el algoritmo CVM, incluyendo la ligera modificación de Donald Knuth [ 12 ] .
Inicializar Inicializar tamaño máximo del búfer, dónde Inicializa un búfer vacío, B Para cada elementoen el flujo de datosde tamañohacer: SiSi está en B , entonces eliminar.de Bnúmero aleatorio enSientonces siluego insertaren B demás de tal manera que/*cuyoes máximo en B */ Sientonces demás ReemplazarconFin Para regresar.
La versión anterior del algoritmo CVM se mejora con la siguiente modificación de Donald Knuth, que añade el bucle while para asegurar que B se reduzca. [ 12 ]
Inicializar Inicializar tamaño máximo del búfer, dónde Inicializa un búfer vacío, B Para cada elementoen el flujo de datosde tamañohacer: SiSi está en B , entonces eliminar.de Bnúmero aleatorio enSiluego insertaren B MientrasLuego, elimine todos los elementos dede B conFin Mientras Sientonces Insertaren B Fin Para regresar.
Problema de conteo distinto ponderado
En su versión ponderada, cada elemento está asociado con un peso y el objetivo es estimar la suma total de pesos. Formalmente,
- Instancia : Una secuencia de elementos ponderadoscon repeticiones y un número entero. Dejarsea el número de elementos distintos, a saber:y que estos elementos sean. Finalmente, dejemossea el peso de.
- Objetivo : Encontrar una estimacióndeutilizando únicamenteunidades de almacenamiento, donde.
Un ejemplo de instancia para el problema ponderado es:. Por este caso,, los pesos sony.
Como ejemplo de aplicación,podrían ser paquetes IP recibidos por un servidor. Cada paquete pertenece a uno deflujos IPEl pesopuede ser la carga impuesta por el flujoen el servidor. Por lo tanto,representa la carga total impuesta al servidor por todos los flujos a los que se envían paquetespertenecer.
Resolver el problema de conteo distinto ponderado
Cualquier estimador de estadísticas de orden extremo (bocetos min/max) para el problema no ponderado puede generalizarse a un estimador para el problema ponderado. [ 13 ] Por ejemplo, el estimador ponderado propuesto por Cohen et al. [ 5 ] se puede obtener cuando el estimador de bocetos máximos continuos se extiende para resolver el problema ponderado. En particular, el algoritmo HyperLogLog [ 6 ] puede extenderse para resolver el problema ponderado. El algoritmo HyperLogLog extendido ofrece el mejor rendimiento, en términos de precisión estadística y uso de memoria, entre todos los demás algoritmos conocidos para el problema ponderado.
Véase también
Referencias
- ^ Ullman, Jeff ; Rajaraman, Anand; Leskovec, Jure . "Minería de flujos de datos" (PDF) .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - 1 2 Cosma, Ioana A.; Clifford, Peter (2011). "Un análisis estadístico de algoritmos de conteo probabilístico". Scandinavian Journal of Statistics . arXiv : 0801.3552 .
- ↑ Giroire, Frederic; Fusy, Eric (2007). Actas del Cuarto Taller sobre Algorítmica Analítica y Combinatoria (ANALCO) de 2007. págs. 223–231 . CiteSeerX 10.1.1.214.270 . doi : 10.1137/1.9781611972979.9 . ISBN 978-1-61197-297-9.
- ↑ Chassaing, Philippe; Gerin, Lucas (2006). "Estimación eficiente de la cardinalidad de grandes conjuntos de datos". Actas del 4.º Coloquio sobre Matemáticas e Informática . arXiv : math/0701347 . Bibcode : 2007math......1347C .
- 1 2 Cohen, Edith (1997). "Marco de estimación de tamaño con aplicaciones al cierre transitivo y la alcanzabilidad" . J. Comput. Syst. Sci . 55 (3): 441– 453. doi : 10.1006/jcss.1997.1534 .
- 1 2 Flajolet, Philippe ; Fusy, Eric; Gandouet, Olivier; Meunier, Frederic (2007). "HyperLoglog: análisis de un algoritmo de estimación de cardinalidad casi óptimo" (PDF) . Análisis de algoritmos .
- ↑ Flajolet, Philippe ; Martin, G. Nigel (1985). "Algoritmos de conteo probabilístico para aplicaciones de bases de datos" (PDF) . J. Comput. Syst. Sci . 31 (2): 182– 209. doi : 10.1016/0022-0000(85)90041-8 .
- ↑ Kane, Daniel M.; Nelson , Jelani ; Woodruff, David P. (2010). "Un algoritmo óptimo para el problema de elementos distintos" . Actas del vigésimo noveno simposio ACM SIGMOD-SIGACT-SIGART sobre principios de sistemas de bases de datos . págs. 41–52 . doi : 10.1145/1807085.1807094 . ISBN 978-1-4503-0033-9.
- ↑ Cohen, Edith ; Kaplan, Haim (2008). "Estimación más precisa mediante bocetos de k inferiores" (PDF) . PVLDB .
- ↑ Metwally, Ahmed; Agrawal, Divyakant; Abbadi, Amr El (2008), ¿ Por qué usar logaritmo si podemos usar lineal?: Hacia un conteo distinto efectivo del tráfico de búsqueda , Actas de la 11.ª conferencia internacional sobre extensión de la tecnología de bases de datos: avances en tecnología de bases de datos, págs. 618–629 , CiteSeerX 10.1.1.377.4771
- ^ Chakraborty, Sourav; Vinodchandran, Nevada; Meel, Kuldeep S. (2022). Elementos distintos en secuencias: un algoritmo para el libro (de texto) . Procedimientos internacionales de informática de Leibniz (LIPIcs). vol. 244. Schloss Dagstuhl – Leibniz-Zentrum für Informatik. págs.6 páginas, 727571 bytes. arXiv : 2301.10191 . doi : 10.4230/LIPIcs.ESA.2022.34 . ISBN 978-3-95977-247-1ISSN 1868-8969
- 1 2 3 Knuth, Donald (mayo de 2023). "El algoritmo CVM para estimar elementos distintos en flujos" (PDF) .
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - ↑ Cohen, Reuven ; Katzir, Liran; Yehezkel, Aviv (2014). "Un esquema unificado para generalizar los estimadores de cardinalidad a la agregación de sumas". Information Processing Letters . 115 (2): 336– 342. doi : 10.1016/j.ipl.2014.10.009 .
- Algoritmos estadísticos
