Articulo de referencia

Agrupamiento primario

En programación informática , el agrupamiento primario es un fenómeno que causa degradación del rendimiento en tablas hash de sondeo lineal . El fenómeno establece que, a medida...

En programación informática , el agrupamiento primario es un fenómeno que causa degradación del rendimiento en tablas hash de sondeo lineal . El fenómeno establece que, a medida que se agregan elementos a una tabla hash de sondeo lineal, estos tienden a agruparse en secuencias largas (es decir, regiones largas y contiguas de la tabla hash que no contienen espacios libres). Si la tabla hash tiene un factor de carga de11/incógnita{\displaystyle 1-1/x}para algún parámetroincógnita2{\displaystyle x\geq 2}, entonces la longitud esperada de la secuencia que contiene un elemento dado{\displaystyle u}esΘ(incógnita2){\displaystyle \Theta (x^{2})}Esto provoca que las inserciones y las consultas negativas tarden el tiempo esperado.Θ(incógnita2){\displaystyle \Theta (x^{2})}en una tabla hash de sondeo lineal.

Causas de la agrupación primaria

La agrupación primaria tiene dos causas:

  • El ganador sigue ganando: cuanto más larga sea una racha, mayor será la probabilidad de que acumule elementos adicionales. Esto genera un ciclo de retroalimentación positiva que contribuye al efecto de agrupamiento. Sin embargo, esto por sí solo no causaría la explosión cuadrática. [ 1 ] [ 2 ]
  • Unión de secuencias: Una sola inserción no solo puede aumentar la longitud de la secuencia en la que se encuentra en una unidad, sino que también puede conectar dos secuencias que ya eran relativamente largas. Esto es lo que provoca el crecimiento cuadrático en la longitud esperada de la secuencia. [ 1 ]

Otra forma de entender la agrupación primaria es examinando la desviación estándar del número de elementos que se asignan a una región determinada dentro de la tabla hash. [ 2 ] Consideremos una subregión de la tabla hash de tamañoincógnita2{\displaystyle x^{2}}. El número esperado de elementos que se codifican en la región es(11/incógnita)incógnita2=incógnita2incógnita{\displaystyle (1-1/x)x^{2}=x^{2}-x}Por otro lado, la desviación estándar del número de dichos elementos esΘ(incógnita){\displaystyle \Theta (x)}De ello se deduce que, con probabilidadΩ(1){\displaystyle \Omega (1)}, el número de elementos que se asignan a la región excederá el tamañoincógnita2{\displaystyle x^{2}}de la región. Intuitivamente, esto significa que regiones de tamañoΘ(incógnita2){\displaystyle \Theta (x^{2})}A menudo se producirá un desbordamiento, mientras que las regiones más grandes generalmente no lo harán. Esta intuición se utiliza a menudo como punto de partida para análisis formales de agrupamiento primario. [ 2 ] [ 3 ] [ 4 ]

Efecto en el rendimiento

La agrupación primaria provoca una degradación del rendimiento tanto para las inserciones como para las consultas en una tabla hash de sondeo lineal. Las inserciones deben llegar hasta el final de una ejecución y, por lo tanto, tardan el tiempo esperado.Θ(incógnita2){\displaystyle \Theta (x^{2})}. [ 1 ] Las consultas negativas (es decir, las consultas que buscan un elemento que resulta no estar presente) también deben llegar al final de una ejecución y, por lo tanto, también toman el tiempo esperado.Θ(incógnita2){\displaystyle \Theta (x^{2})}. [ 1 ] Las consultas positivas pueden terminar tan pronto como encuentren el elemento que están buscando. Como resultado, el tiempo esperado para consultar un elemento aleatorio en la tabla hash esΘ(incógnita){\displaystyle \Theta (x)}. [ 1 ] Sin embargo, las consultas positivas a elementos insertados recientemente (por ejemplo, un elemento que acaba de ser insertado) tardan el tiempo esperado.Θ(incógnita2){\displaystyle \Theta (x^{2})}. [ 1 ]

Estos límites también se cumplen para el sondeo lineal con eliminaciones perezosas (es decir, usando marcadores de eliminación para las eliminaciones), siempre que la tabla hash se reconstruya (y los marcadores de eliminación se vacíen) con cierta frecuencia. Basta con realizar dicha reconstrucción al menos una vez cadanorte/(2incógnita){\displaystyle n/(2x)}inserciones. [ 2 ]

conceptos erróneos comunes

Muchos libros de texto describen el efecto de que el ganador sigue ganando (en el que cuanto más larga es una racha, más probable es que acumule elementos adicionales) como la única causa de la agrupación primaria. [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] Sin embargo, como señaló Knuth, [ 1 ] esta no es la causa principal de la agrupación primaria.

Algunos libros de texto afirman que el tiempo esperado para una consulta positiva esΘ(incógnita){\displaystyle \Theta (x)}, [ 11 ] [ 12 ] citando típicamente a Knuth. [ 1 ] Esto es cierto para una consulta a un elemento aleatorio . Sin embargo, algunas consultas positivas pueden tener tiempos de ejecución esperados mucho mayores. Por ejemplo, si se inserta un elemento y luego se consulta inmediatamente ese elemento, la consulta tomará la misma cantidad de tiempo que la inserción, que esΘ(incógnita2){\displaystyle \Theta (x^{2})}con expectativa.

Técnicas para evitar la agrupación primaria

El sondeo lineal ordenado [ 13 ] (a menudo denominado hash Robin Hood [ 14 ] ) es una técnica para reducir los efectos del agrupamiento primario en las consultas. El sondeo lineal ordenado clasifica los elementos dentro de cada ejecución por su hash. Por lo tanto, una consulta puede terminar tan pronto como encuentre cualquier elemento cuyo hash sea mayor que el del elemento consultado. Esto hace que tanto las consultas positivas como las negativas tomen el tiempo esperado.O(incógnita){\displaystyle O(x)}.

El hash de cementerio es una variante del sondeo lineal ordenado que elimina los efectos asintóticos del agrupamiento primario para todas las operaciones. [ 2 ] El hash de cementerio deja estratégicamente huecos dentro de las ejecuciones que las inserciones futuras pueden aprovechar. Estos huecos, que pueden considerarse como lápidas (como las creadas por las eliminaciones perezosas ), se insertan en la tabla durante las reconstrucciones semirregulares. Los huecos aceleran las inserciones que tienen lugar hasta que se produce la siguiente reconstrucción semirregular. Cada operación en una tabla hash de cementerio toma el tiempo esperado.O(incógnita){\displaystyle O(x)}.

Numerosas fuentes recomiendan el uso del sondeo cuadrático como alternativa al sondeo lineal, ya que evita empíricamente los efectos de la agrupación primaria.

Referencias

  1. 1 2 3 4 5 6 7 8 Knuth, Donald Ervin (1997). El arte de la programación informática , volumen 3, ordenación y búsqueda . Reading, Mass.: Addison-Wesley. págs. 527–528 . ISBN  0-201-89683-4OCLC 36241708 
  2. 1 2 3 4 5 Bender, Michael A.; Kuszmaul, Bradley C.; Kuszmaul, William (febrero de 2022). "Revisión del sondeo lineal: las lápidas marcan la desaparición del agrupamiento primario" . Simposio anual IEEE 62.º sobre Fundamentos de la Informática (FOCS) de 2021. IEEE. págs. 1171–1182 . doi : 10.1109/focs52979.2021.00115 . ISBN  978-1-6654-2055-6. S2CID 235731820 . 
  3. Pagh, Anna; Pagh, Rasmus; Ruzic, Milan (11 de junio de 2007). «Sondeo lineal con independencia constante» . Actas del trigésimo noveno simposio anual de la ACM sobre Teoría de la Computación . Nueva York, NY, EE. UU.: ACM. págs. 318–327 . doi : 10.1145/1250790.1250839 . ISBN  9781595936318. S2CID 7523004 . 
  4. Thorup, Mikkel; Zhang, Yin (enero de 2012). "Tabulation-Based 5-Independent Hashing with Applications to Linear Probing and Second Moment Estimation" . SIAM Journal on Computing . 41 (2): 293–331 . doi : 10.1137/100800774 . ISSN 0097-5397 . 
  5. Cormen, Thomas H. (2022). Introducción a los algoritmos . Charles Eric Leiserson, Ronald L. Rivest, Clifford Stein (Cuarta ed.). Cambridge, Massachusetts. ISBN  978-0-262-04630-5OCLC 1264174621 {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  6. Drozdek, Adam (1995). Estructuras de datos en C. PWS Pub. Co. ISBN 0-534-93495-1OCLC 31077222 
  7. Kruse, Robert L. (1987). Estructuras de datos y diseño de programas (2.ª ed.). Englewood Cliffs, NJ: Prentice-Hall. ISBN  0-13-195884-4OCLC 13823328 
  8. McMillan, Michael (2014). Estructuras de datos y algoritmos con JavaScript . Sebastopol, CA: O'Reilly. ISBN 978-1-4493-6493-9OCLC 876268837 
  9. Smith, Peter, 1 de febrero de 2004. Estructuras de datos aplicadas con C++ . Sudbury, Mass.: Jones and Bartlett Publishers. ISBN 0-7637-2562-5OCLC 53138521 {{cite book}}: CS1 maint: nombres múltiples: lista de autores ( enlace ) CS1 maint: nombres numéricos: lista de autores ( enlace )
  10. Tremblay, Jean-Paul (1976). Introducción a las estructuras de datos con aplicaciones . PG Sorenson. Nueva York: McGraw-Hill. ISBN 0-07-065150-7OCLC 1858301 
  11. 1 2 Manual de estructuras de datos y aplicaciones . [Sl]: CRC PRESS. 2020. ISBN 978-0-367-57200-6OCLC 1156995269 .​ 
  12. Sedgewick, Robert (1998). Algoritmos en C (Tercera ed.). Reading, Massachusetts. ISBN  0-201-31452-5OCLC 37141168 {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  13. Amble, Knuth (1974). "Tablas hash ordenadas" . The Computer Journal . 17 (2): 135– 142. doi : 10.1093/comjnl/17.2.135 .
  14. Celis, Pedro, Per-Ake Larson y J. Ian Munro. "Robin Hood Hashing". 26º Simposio Anual sobre Fundamentos de la Informática (sfcs 1985) . IEEE, 1985.