El HAT-trie es un tipo de radix trie que utiliza nodos array para indexar pares clave-valor individuales bajo nodos radix y cubos de hash en un array asociativo. A diferencia de una tabla hash simple, los HAT-tries almacenan los pares clave-valor en una colección ordenada. Los inventores originales fueron Nikolas Askitis y Ranjan Sinha.[1][2]​ Askitis y Zobel demostraron que la creación y el acceso a la colección clave-valor del HAT-trie son considerablemente más rápidos que otros métodos de acceso ordenado y son comparables al array hash, que es una colección desordenada.[3]​ Esto se debe a la amigabilidad con la caché de la estructura de datos, que intenta ofrecer el acceso a los datos en tiempo y espacio dentro del tamaño de línea de caché de 64 bytes de las CPU modernas.

Descripción

editar

Un nuevo trie HAT recién inicializado comienza siendo un puntero nulo que representa un nodo vacío. La primera clave añadida asigna el nodo array más pequeño y copia en él el par clave-valor, que se convierte en la primera raíz del trie. Cada par clave-valor subsiguiente se añade al nodo array inicial hasta alcanzar un tamaño máximo, tras lo cual el nodo se desborda redistribuyendo sus claves en un cubo hash con nuevos nodos array subyacentes, uno por cada ranura hash ocupada en el cubo hash. El cubo hash se convierte en la nueva raíz del trie. Las cadenas de clave se almacenan en los nodos array con un byte de codificación de longitud prefijada a los bytes del valor de la clave. El valor asociado a cada clave puede almacenarse en línea — alternándose con las cadenas de clave — o colocarse en un segundo array — por ejemplo, en la memoria inmediatamente después — y unirse al nodo array.[4]

Una vez que el trie ha crecido hasta su primer nodo de cubo hash, este distribuye nuevas claves según una función hash basada en su valor de la clave en los nodos array contenidos bajo el nodo de cubo de hash. Se siguen añadiendo claves hasta alcanzar el número máximo de claves que puede contener un cubo hash. El contenido del cubo se redistribuye entonces en un nuevo nodo de base según el primer carácter del valor de la clave almacenada, reemplazando al nodo de cubo hash como raíz del trie[5]​ (por ejemplo, véase Burstsort[6]​). Las claves y los valores existentes contenidos en el cubo hash se acortan en un carácter cada uno y se colocan bajo el nuevo nodo radix en un conjunto de nuevos nodos array.

El acceso ordenado a la colección se proporciona enumerando las claves en un cursor mediante el descenso por el trie radix para ensamblar los caracteres iniciales, terminando en un cubo hash o en un nodo array. Los punteros a las claves contenidas en el cubo hash o en el nodo array se ensamblan en una array para ordenación y forman parte del cursor. Dada la existencia de un número máximo de claves en un contenedor hash o nodo de matriz, existe también un límite fijo preestablecido para el tamaño del cursor en todo momento. Una vez que las claves del cubo hash o nodo array se agotan mediante get-next (o get-previous, implementando las funciones de un iterador), el cursor se mueve a la siguiente entrada del nodo de base y el proceso se repite.[7]

Referencias

editar
  1. Askitis, Nikolas; Sinha, Ranjan (2007). «HAT-Trie: A Cache-Conscious Trie-Based Data Structure For Strings». En Gillian Dobbie, ed. Thirtieth Australasian Computer Science Conference (ACSC2007). CRPIT (en inglés) (Ballarat, Australia: ACS) 62: 97-105. 
  2. Askitis, Nikolas; Sinha, Ranjan (2007). «HAT-trie: a cache-conscious trie-based data structure for strings». Proceedings of the Thirtieth Australasian Conference on Computer Science - Volume 62. ACSC '07 (en inglés) (Ballarat, Victoria, Australia: Australian Computer Society, Inc.) 62: 97-105. doi:10.5555/1273749.1273761. 
  3. Askitis, Nikolas; Zobel, Justin (2005). «Cache-Conscious Collision Resolution in String Hash Tables». En Consens, Mariano; Navarro, Gonzalo, eds. String Processing and Information Retrieval (en inglés) (Berlín, Heidelberg: Springer Berlin Heidelberg): 91-102. ISBN 978-3-540-32241-2. 
  4. Askitis, Nikolas; Zobel, Justin (2011). «Redesigning the string hash table, burst trie, and BST to exploit cache». ACM J. Exp. Algorithmics (en inglés) (Nueva York, NY, EE. UU.: Association for Computing Machinery) 15: 1.7. ISSN 1084-6654. doi:10.1145/1671970.1921704. 
  5. Heinz, Steffen; Zobel, Justin; Williams, Hugh E. (2002). «Burst tries: a fast, efficient data structure for string keys». ACM Trans. Inf. Syst. (en inglés) (Nueva York, NY, EE. UU.: Association for Computing Machinery) 20 (2): 192-223. ISSN 1046-8188. doi:10.1145/506309.506312. 
  6. Sinha, Ranjan; Wirth, Anthony (2010). «Engineering burstsort: Toward fast in-place string sorting». ACM J. Exp. Algorithmics (en inglés) (Nueva York, NY, EE. UU.: Association for Computing Machinery) 15: 2.5. ISSN 1084-6654. doi:10.1145/1671970.1671978. 
  7. Sinha, Ranjan; Zobel, Justin (2005). «Cache-conscious sorting of large sets of strings with dynamic tries». ACM J. Exp. Algorithmics (en inglés) (Nueva York, NY, EE. UU.: Association for Computing Machinery) 9: 1.5. ISSN 1084-6654. doi:10.1145/1005813.1041517. 

Enlaces externos

editar

📚 Artikel Terkait di Wikipedia

Fitch Group

Consejero Delegado del Grupo Fitch. Joynt también es consejero delegado de Algorithmics, Inc. y director ejecutivo de Fitch Ratings. Las calificaciones crediticias

Homología persistente

Persistence via Simplicial Batch Collapse». ACM Journal of Experimental Algorithmics 24: 1.5:1-1.5:16. ISSN 1084-6654. doi:10.1145/3284360.  Rote, Günter;

Recubrimiento de polígonos

empíricos con datos reales se presenta en el Journal of Experimental Algorithmics.​ Para polígonos rectilíneos que pueden contener huecos, existe un algoritmo

Association for Computing Machinery

Applications (MONET) Journal of Graphics Tools Journal of Experimental Algorithmics (JEA) Distributed Computing interactions Multimedia Systems . La ACM

Bolsa Mexicana de Valores

Indeval. Valmer fue fundado en el año 2000 como una coinversión con Algorithmics, empresa líder a nivel mundial en el sector de sistemas de medición y

Arreglo de sufijos

external memory suffix array construction». Journal of Experimental Algorithmics 12: 1. doi:10.1145/1227161.1402296.  Kulla, Fabian; Sanders, Peter (2007)

Dibujo de grafos

of the basis for graph drawing algorithms», Journal of Experimental Algorithmics 2, Article 4, S2CID 22076200, doi:10.1145/264216.264222 . (enlace roto

David A. Bader

Systems, IEEE DSOnline, Parallel Computing y ACM Journal of Experimental Algorithmics, y ha publicado más de 250 artículos en revistas y conferencias revisadas