Articulo de referencia

Problema de conteo distinto

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...

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.incógnita1,incógnita2,,incógnitas{\displaystyle x_{1},x_{2},\ldots ,x_{s}}con repeticiones. Dejanorte{\displaystyle n}denota el número de elementos distintos en el flujo, con el conjunto de elementos distintos representado como{mi1,mi2,,minorte}{\displaystyle \{e_{1},e_{2},\ldots ,e_{n}\}}.
Objetivo : Encontrar una estimaciónnorte^{\displaystyle {\widehat {n}}}denorte{\displaystyle n}utilizando únicamentemetro{\displaystyle m}unidades de almacenamiento, dondemetronorte{\displaystyle m\ll n}.

Un ejemplo de instancia para el problema de estimación de cardinalidad es el siguiente flujo:a,b,a,do,d,b,d{\displaystyle a,b,a,c,d,b,d}. Por este caso,norte=|{a,b,do,d}|=4{\displaystyle n=|\left\{{a,b,c,d}\right\}|=4}.

Solución ingenua

La solución ingenua al problema es la siguiente:

Inicializa un contador, c , a cero,do0{\displaystyle c\leftarrow 0}. 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 elementoincógnitai{\displaystyle x_{i}}, se emite una consulta de membresía. Siincógnitai{\displaystyle x_{i}}no es miembro de D (incógnitaiD{\displaystyle x_{i}\notin D}) Agregarincógnitai{\displaystyle x_{i}}para D Aumentar c en uno,dodo+1{\displaystyle c\leftarrow c+1} De lo contrario (incógnitaiD{\displaystyle x_{i}\in D}) no hacer nada. Salidanorte=do{\displaystyle n=c}.

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.incógnitai{\displaystyle x_{i}}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,norte{\displaystyle n}Los estimadores de última generación aplican una función hash a cada elemento .mij{\displaystyle e_{j}}en un esquema de datos de baja dimensión utilizando una función hash,h(mij){\displaystyle h(e_{j})}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 elementomij{\displaystyle e_{j}}está asociado con un RV uniforme ,h(mij)U(0,1){\displaystyle h(e_{j})\sim U(0,1)}, el valor mínimo esperado deh(mi1),h(mi2),,h(minorte){\displaystyle h(e_{1}),h(e_{2}),\ldots ,h(e_{n})}es1/(norte+1){\displaystyle 1/(n+1)}La función hash garantiza queh(mij){\displaystyle h(e_{j})}es idéntico para todas las apariencias demij{\displaystyle e_{j}}Por 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 elmetro{\displaystyle m}valores mínimos, dondemetro1{\displaystyle m\geq 1}. 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 ) / p

Algoritmo 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 ] .

Inicializarpag1{\displaystyle p\leftarrow 1} Inicializar tamaño máximo del búfers{\displaystyle s}, dóndes1{\displaystyle s\geq 1} Inicializa un búfer vacío, B Para cada elementoat{\displaystyle a_{t}}en el flujo de datosA{\displaystyle A}de tamañonorte{\displaystyle n}hacer: Si(at,),{\displaystyle (a_{t},u),\forall u}Si está en B , entonces eliminar.(at,){\displaystyle (a_{t},u)}de B{\displaystyle u\leftarrow }número aleatorio en[0,1){\displaystyle [0,1)}Si<pag{\displaystyle u<p}entonces si|B|<s{\displaystyle |B|<s}luego insertar(at,){\displaystyle (a_{t},u)}en B demás (a,){\displaystyle (a',u')}de tal manera que=máximo{:(a,)B,a}{\displaystyle u'=\max\{u'':(a'',u'')\in B,\forall a''\}}/*(a,){\displaystyle (a',u')}cuyo{\displaystyle u'}es máximo en B */ Si>{\displaystyle u>u'}entonces pag{\displaystyle p\leftarrow u} demás Reemplazar(a,){\displaystyle (a',u')}con(at,){\displaystyle (a_{t},u)}pag{\displaystyle p\flecha izquierda u'}Fin Para regresar|B|/pag{\displaystyle |B|/p}.

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 ]

Inicializarpag1{\displaystyle p\leftarrow 1} Inicializar tamaño máximo del búfers{\displaystyle s}, dóndes1{\displaystyle s\geq 1} Inicializa un búfer vacío, B Para cada elementoat{\displaystyle a_{t}}en el flujo de datosA{\displaystyle A}de tamañonorte{\displaystyle n}hacer: Siat{\displaystyle a_{t}}Si está en B , entonces eliminar.at{\displaystyle a_{t}}de B{\displaystyle u\leftarrow }número aleatorio en[0,1){\displaystyle [0,1)}Sipag{\displaystyle u\leq p}luego insertar(at,){\displaystyle (a_{t},u)}en B Mientras|B|=s<pag{\displaystyle |B|=s\wedge u<p}Luego, elimine todos los elementos de(a,){\displaystyle (a',u')}de B con>pag2{\displaystyle u'>{\frac {p}{2}}}pagpag2{\displaystyle p\leftarrow {\frac {p}{2}}}Fin Mientras Si<pag{\displaystyle u<p}entonces Insertar(at,){\displaystyle (a_{t},u)}en B Fin Para regresar|B|/pag{\displaystyle |B|/p}.

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 ponderadosincógnita1,incógnita2,,incógnitas{\displaystyle x_{1},x_{2},\ldots ,x_{s}}con repeticiones y un número enterometro{\displaystyle m}. Dejarnorte{\displaystyle n}sea ​​el número de elementos distintos, a saber:norte=|{incógnita1,incógnita2,,incógnitas}|{\displaystyle n=|\left\{{x_{1},x_{2},\ldots ,x_{s}}\right\}|}y que estos elementos sean{mi1,mi2,,minorte}{\displaystyle \left\{{e_{1},e_{2},\ldots ,e_{n}}\right\}}. Finalmente, dejemoswj{\displaystyle w_{j}}sea ​​el peso demij{\displaystyle e_{j}}.
Objetivo : Encontrar una estimaciónw^{\displaystyle {\widehat {w}}}dew=j=1nortewj{\displaystyle w=\sum _{j=1}^{n}w_{j}}utilizando únicamentemetro{\displaystyle m}unidades de almacenamiento, dondemetronorte{\displaystyle m\ll n}.

Un ejemplo de instancia para el problema ponderado es:a(3),b(4),a(3),do(2),d(3),b(4),d(3){\displaystyle a(3),b(4),a(3),c(2),d(3),b(4),d(3)}. Por este caso,mi1=a,mi2=b,mi3=do,mi4=d{\displaystyle e_{1}=a,e_{2}=b,e_{3}=c,e_{4}=d}, los pesos sonw1=3,w2=4,w3=2,w4=3{\displaystyle w_{1}=3,w_{2}=4,w_{3}=2,w_{4}=3}ywj=12{\displaystyle \sum {w_{j}}=12}.

Como ejemplo de aplicación,incógnita1,incógnita2,,incógnitas{\displaystyle x_{1},x_{2},\ldots ,x_{s}}podrían ser paquetes IP recibidos por un servidor. Cada paquete pertenece a uno denorte{\displaystyle n}flujos IPmi1,mi2,,minorte{\displaystyle e_{1},e_{2},\ldots ,e_{n}}El pesowj{\displaystyle w_{j}}puede ser la carga impuesta por el flujomij{\displaystyle e_{j}}en el servidor. Por lo tanto,j=1nortewj{\displaystyle \sum _{j=1}^{n}{w_{j}}}representa la carga total impuesta al servidor por todos los flujos a los que se envían paquetesincógnita1,incógnita2,,incógnitas{\displaystyle x_{1},x_{2},\ldots ,x_{s}}pertenecer.

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

  1. ^ Ullman, Jeff ; Rajaraman, Anand; Leskovec, Jure . "Minería de flujos de datos" (PDF) .{{cite journal}}: Para citar una revista se requiere |journal=( ayuda )
  2. 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 .
  3. 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.
  4. 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 .
  5. 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 .
  6. 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 .
  7. 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 .
  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.
  9. Cohen, Edith ; Kaplan, Haim (2008). "Estimación más precisa mediante bocetos de k inferiores" (PDF) . PVLDB .
  10. 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  
  11. ^ 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 
  12. 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 )
  13. 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 .