Articulo de referencia

Estructura del conjunto de trabajo de Iacono

En ciencias de la computación , la estructura del conjunto de trabajo de Iacono [ 1 ] es un diccionario basado en comparaciones . Admite operaciones de inserción, eliminación y ...

En ciencias de la computación , la estructura del conjunto de trabajo de Iacono [ 1 ] es un diccionario basado en comparaciones . Admite operaciones de inserción, eliminación y acceso para mantener un conjunto dinámico denorte{\displaystyle n}elementos. El conjunto de trabajo de un elementoincógnita{\displaystyle x}es el conjunto de elementos a los que se ha accedido en la estructura desde la última vez queincógnita{\displaystyle x}Se accedió a él (o se insertó si nunca se había accedido). Insertar y eliminar en la estructura del conjunto de trabajo llevaO(registronorte){\displaystyle O(\log n)}tiempo mientras se accede a un elementoincógnita{\displaystyle x}aceptaO(registrow(incógnita)){\displaystyle O(\log w(x))}. Aquí,w(incógnita){\displaystyle w(x)}representa el tamaño del conjunto de trabajo deincógnita{\displaystyle x}.

Estructura

Un ejemplo de búsqueda deincógnita{\displaystyle x}en la estructura del conjunto de trabajo. Después de encontrarincógnita{\displaystyle x}, se elimina deT4{\displaystyle T_{4}}y se insertó enT1{\displaystyle T_{1}}. Finalmente, se realiza un cambio de 1 a 4 en el que se elimina un elemento deTi{\displaystyle T_{i}}y se insertó enTi+1{\displaystyle T_{i+1}}para1i<4{\displaystyle 1\leq i<4}.

Para almacenar un conjunto dinámico denorte{\displaystyle n}elementos, esta estructura consiste en una serie de árboles rojo-negro u otros árboles de búsqueda binaria autoequilibradosT1,T2,,Tk{\displaystyle T_{1},T_{2},\ldots ,T_{k}}y una serie de deques (colas de doble extremo)Q1,Q2,Qk{\displaystyle Q_{1},Q_{2},\ldots Q_{k}}, dóndek=registroregistronorte{\displaystyle k=\lceil \log \log n\rceil }. Por cada1ik{\displaystyle 1\leq i\leq k}, árbolTi{\displaystyle T_{i}}y dequeQi{\displaystyle Q_{i}}comparten el mismo contenido y se mantienen punteros entre sus elementos correspondientes. Para cadai<k{\displaystyle i<k}, el tamaño deTi{\displaystyle T_{i}}yQi{\displaystyle Q_{i}}es22i{\displaystyle 2^{2^{i}}}. ÁrbolTk{\displaystyle T_{k}}y dequeQk{\displaystyle Q_{k}}consta de los elementos restantes, es decir, su tamaño esnortei=1k122i{\displaystyle n-\sum _{i=1}^{k-1}2^{2^{i}}}Por lo tanto, el número de elementos en todos los árboles y el número de elementos en todas las deques suman ambosnorte{\displaystyle n}Cada elemento que se ha insertado en la estructura de datos se almacena en exactamente uno de los árboles y su correspondiente deque.

Invariante del conjunto de trabajo

En las deques de esta estructura, los elementos se mantienen ordenados según el tamaño de su conjunto de trabajo . Formalmente, el elementoincógnita{\displaystyle x}mentiras despuésy{\displaystyle y}en dequeQi{\displaystyle Q_{i}}si y solo siw(incógnita)<w(y){\displaystyle w(x)<w(y)}. Además, por cada1i<k{\displaystyle 1\leq i<k}, los elementos en dequeQi{\displaystyle Q_{i}}tienen conjuntos de trabajo más pequeños que los elementos en dequeQi+1{\displaystyle Q_{i+1}}Esta propiedad se conoce como invariante del conjunto de trabajo. Cada operación en la estructura de datos mantiene la invariante del conjunto de trabajo.

Operaciones

La operación básica en esta estructura se llama desplazamiento deh{\displaystyle h}aj{\displaystyle j}, dóndeh{\displaystyle h}yj{\displaystyle j}son índices de algunos árboles en la estructura. Se consideran dos casos en un cambio deh{\displaystyle h}aj{\displaystyle j}: Sih<j{\displaystyle h<j}, entonces para cadahi<j{\displaystyle h\leq i<j}, tomados en orden ascendente, se extrae un elemento de la cola.Qi{\displaystyle Q_{i}}y puesto en cola enQi+1{\displaystyle Q_{i+1}}El elemento correspondiente se elimina deTi{\displaystyle T_{i}}y se insertó enTi+1{\displaystyle T_{i+1}}El tiempo de ejecución de esta operación esO(i=hjregistro|Ti|)=O(i=hjregistro22i)=O(2j){\displaystyle O(\sum _{i=h}^{j}\log |T_{i}|)=O(\sum _{i=h}^{j}\log 2^{2^{i}})=O(2^{j})}. De forma análoga, sij<h{\displaystyle j<h}, entonces para cadaj<ih{\displaystyle j<i\leq h}, tomados en orden descendente, se extrae un elemento de la cola.Qi{\displaystyle Q_{i}}y puesto en cola enQi1{\displaystyle Q_{i-1}}El elemento correspondiente se elimina deTi{\displaystyle T_{i}}y se insertó enTi1{\displaystyle T_{i-1}}El tiempo de ejecución de esta operación esO(i=jhregistro|Ti|)=O(i=jhregistro22i)=O(2h){\displaystyle O(\sum _{i=j}^{h}\log |T_{i}|)=O(\sum _{i=j}^{h}\log 2^{2^{i}})=O(2^{h})}. Independientemente del caso, después de una operación de turno, el tamaño deTh{\displaystyle T_{h}}disminuye en uno mientras que el tamaño deTj{\displaystyle T_{j}}aumenta en uno. Dado que los elementos en las deques están ordenados con respecto a los tamaños de sus conjuntos de trabajo, una operación de desplazamiento mantiene el conjunto de trabajo invariante.

Para buscar un elementoincógnita{\displaystyle x}, buscarincógnita{\displaystyle x}enT1,T2,Tk{\displaystyle T_{1},T_{2},\ldots T_{k}}, en orden creciente, hasta encontrar un árbolTj{\displaystyle T_{j}}que contieneincógnita{\displaystyle x}Si no se encuentra ningún árbol, la búsqueda no ha tenido éxito.incógnita{\displaystyle x}Se encuentra, se elimina deTj{\displaystyle T_{j}}y luego insertado enT1{\displaystyle T_{1}}, es decir, se mueve al frente de la estructura. La búsqueda finaliza realizando un cambio desde1{\displaystyle 1}aj{\displaystyle j}que restaura el tamaño de cada árbol y cada cola doble a su tamaño anterior a la operación de búsqueda. El tiempo de ejecución de esta búsqueda esO(i=1jregistro22i)=O(2j){\displaystyle O(\sum _{i=1}^{j}\log 2^{2^{i}})=O(2^{j})}si la búsqueda fue exitosa, oO(i=jkregistro22i)=O(2k)=O(registronorte){\displaystyle O(\sum _{i=j}^{k}\log 2^{2^{i}})=O(2^{k})=O(\log n)}de lo contrario. Por la propiedad Conjunto de trabajo, cada elemento en los árbolesT1,T2,,Tj1{\displaystyle T_{1},T_{2},\ldots ,T_{j-1}}pertenece al conjunto de trabajo deincógnita{\displaystyle x}. En particular, cada elemento enTj1{\displaystyle T_{j-1}}pertenece al conjunto de trabajo deincógnita{\displaystyle x}y por lo tanto,w(incógnita)>|Tj1|=22j1{\displaystyle w(x)>|T_{j-1}|=2^{2^{j-1}}}Por lo tanto, el tiempo de ejecución de una búsqueda exitosa esO(2j)=O(registro22j1)=O(registrow(incógnita)){\displaystyle O(2^{j})=O(\log 2^{2^{j-1}})=O(\log w(x))}.

Insertar

Insertar un elementoincógnita{\displaystyle x}La inserción en la estructura se realiza mediante la inserciónincógnita{\displaystyle x}enT1{\displaystyle T_{1}}y poniéndolo en cola enQ1{\displaystyle Q_{1}}. La inserción se completa realizando un cambio desde1{\displaystyle 1}ak{\displaystyle k}Para evitar desbordamientos, si|Tk|=22k{\displaystyle |T_{k}|=2^{2^{k}}}antes del cambio, es decir, si el último árbol está lleno, entoncesk{\displaystyle k}se incrementa y un nuevo vacíoTk{\displaystyle T_{k}}yQk{\displaystyle Q_{k}}se crea. El tiempo de ejecución de esta operación está dominado por el cambio de1{\displaystyle 1}ak{\displaystyle k}cuyo tiempo de ejecución esO(2k)=O(2registroregistronorte)=O(registronorte){\displaystyle O(2^{k})=O(2^{\log \log n})=O(\log n)}. Dado que el elementoincógnita{\displaystyle x}, cuyo conjunto de trabajo es el más pequeño, se encola enQ1{\displaystyle Q_{1}}, el invariante del conjunto de trabajo se conserva después del desplazamiento.

Borrar

Eliminar un elementoincógnita{\displaystyle x}se hace buscandoincógnita{\displaystyle x}en cada árbol de la estructura, en orden ascendente, hasta encontrar un árbolTj{\displaystyle T_{j}}que lo contiene (si no se encuentra ninguno, la eliminación no se realiza correctamente). Elementoincógnita{\displaystyle x}se elimina deTj{\displaystyle T_{j}}yQj{\displaystyle Q_{j}}. Finalmente, un cambio dek{\displaystyle k}aj{\displaystyle j}mantiene el tamaño deTj{\displaystyle T_{j}}igual a22j{\displaystyle 2^{2^{j}}}El tiempo de ejecución de esta operación esO(2k)=O(registronorte){\displaystyle O(2^{k})=O(\log n)}. La invariante del conjunto de trabajo se conserva ya que la eliminación de un elemento no cambia el orden del conjunto de trabajo de los elementos.

Discusión

Los árboles splay son árboles de búsqueda autoajustables introducidos por Sleator y Tarjan [ 2 ] en 1985. Utilizando la heurística de reestructuración, los árboles splay pueden realizar operaciones de inserción y eliminación enO(registronorte){\displaystyle O(\log n)}tiempo amortizado , sin almacenar ninguna información de saldo en los nodos. Además, el Teorema del Conjunto de Trabajo para árboles splay establece que el costo de acceder a un elemento en un árbol splay esO(registrow(incógnita)){\displaystyle O(\log w(x))}Amortizado . La estructura del conjunto de trabajo de Iacono obtiene el mismo tiempo de ejecución para búsqueda, inserción y eliminación en el peor de los casos. Por lo tanto, ofrece una alternativa a los árboles splay.

Referencias

  1. Iacono, John (2001). "Alternativas a los árboles splay con tiempos de acceso en el peor de los casos de O(log n)" (PDF) . Actas del Duodécimo Simposio Anual ACM-SIAM sobre Algoritmos Discretos : 516–522 . Archivado del original (PDF) el 24 de febrero de 2015. Consultado el 24 de febrero de 2015 .
  2. Sleator, Daniel D.; Tarjan, Robert E. (1985), "Árboles de búsqueda binaria autoajustables" (PDF) , Journal of the ACM , 32 (3): 652– 686, doi : 10.1145/3828.3835