stringtranslate.com

Árbol de búsqueda de dedos

En informática, los árboles de búsqueda de dedos son un tipo de árbol binario de búsqueda que mantiene punteros a nodos interiores, llamados dedos . Los dedos aceleran las búsquedas, inserciones y eliminaciones de elementos cercanos a los dedos, lo que da como resultado búsquedas amortizadas de O (log n) e inserciones y eliminaciones amortizadas de O(1). No debe confundirse con un árbol de dedos ni con un árbol de splay , aunque ambos pueden usarse para implementar árboles de búsqueda de dedos.

Guibas et al. [1] introdujeron los árboles de búsqueda de dedos, basándose en los árboles B. La versión original admite búsquedas de dedos en tiempo O(log d), donde d es el número de elementos entre el dedo y el objetivo de búsqueda. Las actualizaciones toman tiempo O(1), cuando solo se mantienen O(1) dedos movibles. Mover un dedo p posiciones requiere tiempo O(log p). Huddleston y Mehlhorn refinaron esta idea como árboles B vinculados a niveles. [2]

Tsakalidis propuso una versión basada en árboles AVL que facilita la búsqueda desde los extremos del árbol; se puede utilizar para implementar una estructura de datos con múltiples dedos utilizando múltiples de dichos árboles. [3]

Para realizar una búsqueda de dedo en un árbol binario, lo ideal es empezar desde el dedo y buscar hacia arriba hasta la raíz, hasta llegar al ancestro menos común , [4] [5] también llamado nodo de giro , [3] de x e y, y luego ir hacia abajo para encontrar el elemento que estamos buscando. Determinar si un nodo es el ancestro de otro no es trivial.

Un ejemplo de cómo realizar una búsqueda de dedos en un treap.

Treaps , una estructura de árbol aleatorizada propuesta por Seidel y Aragon, [5] tiene la propiedad de que la longitud de ruta esperada de dos elementos de distancia d es O(log d ). Para la búsqueda por dedos, propusieron agregar punteros para determinar rápidamente el ancestro común mínimo (LCA), o en cada nodo mantener los valores mínimo y máximo de su subárbol.

Se ha escrito un capítulo de libro que cubre los árboles de búsqueda de dedos en profundidad. [4] En el cual, Brodal sugirió un algoritmo para realizar la búsqueda de dedos en árboles en tiempo O(log d), sin necesidad de ninguna información contable adicional; este algoritmo logra esto buscando simultáneamente hacia abajo desde el último LCA candidato.

Véase también

Referencias

  1. ^ Guibas, LJ (1977). "Una nueva representación para listas lineales". Actas del noveno simposio anual de la ACM sobre teoría de la computación - STOC '77 . págs. 49-60. CiteSeerX  10.1.1.527.7294 . doi :10.1145/800105.803395. S2CID  2414154.
  2. ^ Huddleston; Mehlhorn, Kurt (1982). "Una nueva estructura de datos para representar listas ordenadas". Acta Informatica . 17 (2): 157–184. doi :10.1007/BF00288968. S2CID  10397918.
  3. ^ ab Tsakalidis, Athanasios K. (1985). "Árboles AVL para búsqueda localizada". Información y control . 67 (1–3): 173–194. doi : 10.1016/S0019-9958(85)80034-6 .
  4. ^ ab Brodal, Gerth Stølting (2005). "11. Búsqueda por dedos" (PDF) . En Mehta, Dinesh P.; Sahni, Sartaj (eds.). Manual de estructuras de datos y aplicaciones . Chapman & Hall / CRC Press . ISBN 978-1584884354. Recuperado el 1 de enero de 2013 .
  5. ^ ab Seidel, R. ; Aragon, CR (1996). "Árboles de búsqueda aleatorizados". Algorithmica . 16 (4–5): 464–497. CiteSeerX 10.1.1.122.6185 . doi :10.1007/BF01940876. S2CID  9370259.