Articulo de referencia

2–3 montones

En informática , un montículo 2-3 es una estructura de datos que implementa una cola de prioridad . Es una variación del montículo , diseñado por Tadao Takaoka en 1999. La estru...

En informática , un montículo 2-3 es una estructura de datos que implementa una cola de prioridad . Es una variación del montículo , diseñado por Tadao Takaoka en 1999. La estructura es similar a un montículo de Fibonacci y toma prestadas ideas del árbol 2-3 .

El tiempo necesario para algunas operaciones comunes de montón es el siguiente.

  • Eliminar-min tomaO(registro(norte)){\displaystyle O(\log(n))}tiempo amortizado y en el peor de los casos .
  • La función de disminución de clave requiere un tiempo amortizado constante.
  • La inserción requiere un tiempo amortizado constante yO(registro(norte)){\displaystyle O(\log(n))}tiempo en el peor de los casos.

Polinomio de árboles

Fuente: [ 1 ]

Un árbol lineal de tamañor{\displaystyle r}es una ruta secuencial der{\displaystyle r}nodos con el primer nodo como raíz del árbol y está representado por una negritar{\displaystyle \mathbf {r} }(p.ej1{\displaystyle \mathbf {1} }es un árbol lineal de un solo nodo). ProductoPAG=ST{\displaystyle P=ST}de dos árbolesS{\displaystyle S}yT{\displaystyle T}, es un árbol producido al reemplazar cada nodo deS{\displaystyle S}por una copia deT{\displaystyle T}; para cada borde deS{\displaystyle S}, hay una ventaja enST{\displaystyle ST}conectando las raíces de los árboles que reemplazaron los extremos de la arista. Esta definición de producto es asociativa pero no conmutativa. La sumaS+T{\displaystyle S+T}de dos árbolesS{\displaystyle S}yT{\displaystyle T}es el bosque de los dos árbolesS{\displaystyle S}yT{\displaystyle T}.

La operación{\displaystyle \triangleleft }en los árbolesS,T{\displaystyle S,T}se define de la siguiente manera. El árbolL=ST{\displaystyle L=S\triangleleft T}se produce uniendo la raíz del árbolT{\displaystyle T}como hijo de la raíz del árbolS{\displaystyle S}Ahora consideremos el árbol lineal.r{\displaystyle \mathbf {r} }El árbolri{\displaystyle \mathbf {r} ^{i}}se define combinando r copias deri1{\displaystyle \mathbf {r} ^{i-1}}como sigue:

ri=ri1ri1ri1{\displaystyle \mathbf {r} ^{i}=\mathbf {r} ^{i-1}\triangleleft \mathbf {r} ^{i-1}\triangleleft \dots \triangleleft \mathbf {r} ^{i-1}}(evaluado de derecha a izquierda).

El camino creado a partir de este enlace forma eli{\displaystyle i}el tronco deri{\displaystyle \mathbf {r} ^{i}}que también puede llamarse eli{\displaystyle i}dimensión del árbol.

Un polinomio r-ario de árboles se define comoPAG=ak1rk1++a1r+a0{\displaystyle P=\mathbf {a} _{k-1}\mathbf {r} ^{k-1}+\dots +\mathbf {a} _{1}\mathbf {r} +\mathbf {a} _{0}}dónde0air1{\displaystyle 0\leq a_{i}\leq r-1}. Esta notación polinómica para árboles denorte{\displaystyle n}Los nodos son únicos. El árbolairi{\displaystyle \mathbf {a} _{i}\mathbf {r} ^{i}}consta deai{\displaystyle a_{i}}copias deri{\displaystyle \mathbf {r} ^{i}}de tal manera que sus raíces estén conectadas conai1{\displaystyle a_{i}-1}bordes secuencialmente. El camino de estosai1{\displaystyle a_{i}-1}Los bordes se denominan tronco principal del árbol.airi{\displaystyle \mathbf {a} _{i}\mathbf {r} ^{i}}. Además, un polinomio r-ario de árboles se denomina cola r-nomial si los nodos del polinomio de árboles están asociados con claves que satisfacen la propiedad de montón .

Un montón polinomial, de hecho un montón (2,3) con una representación dimensional de sus árboles.

Operaciones en colas r-nomiales

Para fusionar dos términos de formaairi{\displaystyle \mathbf {a} _{i}\mathbf {r} ^{i}}yairi{\displaystyle \mathbf {a} '_{i}\mathbf {r} ^{i}}, los árboles se reordenan en el tronco principal en función de las claves en la raíz de los árboles. Siai+air{\displaystyle a_{i}+a'_{i}\geq r}habrá un plazo de forma(ai+air)ri{\displaystyle (\mathbf {a} _{i}+\mathbf {a} '_{i}-\mathbf {r} )\mathbf {r} ^{i}}y un árbol de cargari+1{\displaystyle \mathbf {r} ^{i+1}}De lo contrario, solo hay un árbol.(ai+ai)ri{\displaystyle (\mathbf {a} _{i}+\mathbf {a} '_{i})\mathbf {r} ^{i}}La suma de dos colas r-nomiales es similar a la suma de dos números en base 1.r{\displaystyle r}.

La inserción de una clave en una cola polinomial es como fusionar un único nodo con la etiqueta de la clave en la cola r-nomial existente, tomando como referencia el nodo que contiene la etiqueta de la clave.O(rregistrornorte){\displaystyle O(r\log _{r}{n})}tiempo.

Una operación de eliminación del mínimo se realiza encontrando el mínimo en la raíz de un árbol, por ejemploT{\displaystyle T}y eliminándolo. La cola polinómica resultanteQ{\displaystyle Q}se vuelve a agregarPAGT{\displaystyle P-T}en tiempo totalO(rregistrornorte){\displaystyle O(r\log _{r}{n})}.

Montón (2,3)

Fuente: [ 1 ]

Un(l,r){\displaystyle (l,r)-}árbolT(i){\displaystyle T(i)}se define recursivamente por

T(i)={un único nodoi=0T1(i1)Ts(i1)i1 y lsr{\displaystyle T(i)=\left\{{\begin{array}{cc}{\text{a single node}}&i=0\\T_{1}(i-1)\triangleleft \dots \triangleleft T_{s}(i-1)&i\geq 1{\text{ and }}l\leq s\leq r\end{array}}\right.}

La raíz del árbolT(i){\displaystyle T(i)}tiene títuloi{\displaystyle i}y puede estar formado por diferentes árboles de gradoi1{\displaystyle i-1}. La raíz deT(i){\displaystyle T(i)}se denomina nodo de la cabeza deli{\displaystyle i}th tronco. La dimensión de los nodos que no son la cabeza en el tronco esi1{\displaystyle i-1}, mientras que la dimensión del nodo de cabeza esi{\displaystyle i}o más grande, dependiendo de si se vuelve a vincular. El árbol de tipoT(i1){\displaystyle T(i-1)}en eli{\displaystyle i}el tronco deT(i){\displaystyle T(i)}enraizado en un nodov{\displaystyle v}se llamatrmimi(v){\displaystyle tree(v)}.

De manera informal, un(2,3){\displaystyle (2,3)}árbol de dimensiónd{\displaystyle d}se forma uniendo las raíces de 2 o 3 árboles de dimensiónd1{\displaystyle d-1}en línea.

Un polinomio extendido de árboles,PAG{\displaystyle P}, se define porPAG=ak1T(k1)++a1T(1)+a0{\displaystyle P=a_{k-1}T(k-1)+\dots +a_{1}T(1)+a_{0}}.

Un ejemplo de un montón 2-3, donde P = 2T(3) + 1T(2) + 1T(0)

Cuando se asignan claves a los nodos de un polinomio extendido de árboles en orden de montón, se denomina(l,r)hmiapag{\displaystyle (l,r)-heap}y el caso especial del=2{\displaystyle l=2}yr=3{\displaystyle r=3}es un(2,3)hmiapag{\displaystyle (2,3)-heap}.

Árbol etiquetado (2,3) con espacios de trabajo del nodo 13 (amarillo) y el nodo 22 (azul) junto con las dimensiones de los nodos en rosa

Espacio de trabajo de un nodo El espacio de trabajo de un nodov{\displaystyle v}es el vecindario local, definido para los nodos que no están en los troncos principales de los árboles en el montón. Suponga la dimensión dev{\displaystyle v}esi1{\displaystyle i-1}, de modo que esté en uni{\displaystyle i}th tronco. El espacio de trabajo dev{\displaystyle v}entonces consta de todos los nodos en eli{\displaystyle i}el tronco, eli+1{\displaystyle i+1}el tronco, y aquellos en otrosi{\displaystyle i}th troncos cuyos nodos de cabeza están en eli+1{\displaystyle i+1}El tronco. El espacio de trabajo es entonces una colección de nodos de tamaño entre 4 y 9. El nodo cabeza del espacio de trabajo es el nodo en la primera posición deli+1{\displaystyle i+1}el tronco.

Operaciones en el montículo (2,3)

Inserción : Para insertar una nueva clave, fusione el montón (2,3) existente actualmente con un árbol de nodos único,T(0){\displaystyle T(0)}etiquetado con esta clave. Desde0akr1=2{\displaystyle 0\leq a_{k}\leq r-1=2}En el polinomio extendido, podría ser necesario ajustar los árboles de acarreo que pueden ocurrir a partir de la inserción. Si un árbolT(i){\displaystyle T(i)}Se está insertando en un árbol.aiT(i){\displaystyle \mathbf {a} _{i}T(i)}En el nivel superior, hay tres casos, dependiendo del valor deai{\displaystyle \mathbf {a} _{i}}.

  1. ai=0{\displaystyle \mathbf {a} _{i}=0}: no hay árbolT(i){\displaystyle T(i)}ya está en el montón, así que se inserta en el montón. El términoT(i){\displaystyle T(i)}se añade a nuestro polinomio extendido.
  2. ai=1{\displaystyle \mathbf {a} _{i}=1}: Formar un nuevo árbol2T(i){\displaystyle \mathbf {2} T(i)}uniendo los dos árboles mediante una comparación para mantener la propiedad de ordenación del montón de las etiquetas.
  3. ai=2{\displaystyle \mathbf {a} _{i}=2}: Un acarreo deT(i+1){\displaystyle T(i+1)}se realiza con dos comparaciones. Otra ronda de inserción se realiza con este árbol de acarreo enai+1T(i+1){\displaystyle \mathbf {a} _{i+1}T(i+1)}en el montón.

Eliminar mínimo : Primero encuentra el mínimo escaneando las raíces de los árboles. SeaaiT(i){\displaystyle \mathbf {a} _{i}T(i)}sea ​​el árbol que contiene el elemento mínimo. Dado que este árbol existe, esto significaai{\displaystyle \mathbf {a} _{i}}era1{\displaystyle \mathbf {1} }o2{\displaystyle \mathbf {2} }Eliminar la raíz de este árbol significa eliminar la raíz de la cadena lineal.ai{\displaystyle \mathbf {a} _{i}}copias de conexión deT(i){\displaystyle T(i)}. Las otras copias deT(i){\displaystyle T(i)}dar un árbol de la formabiT(i){\displaystyle \mathbf {b} _{i}T(i)}dóndebi=0{\displaystyle \mathbf {b} _{i}=0}siai=1{\displaystyle \mathbf {a} _{i}=1}obi=1{\displaystyle \mathbf {b} _{i}=1}siai=2{\displaystyle \mathbf {a} _{i}=2}.

La raíz que se eliminó era también la raíz de la primera copia deT(i){\displaystyle T(i)}, dando 2 o 3T(i1){\displaystyle T(i-1)}árboles. Siguiendo este patrón, terminamos con la colección de árboles.

bjT(0),bjT(1),,bjT(i){\displaystyle \mathbf {b} _{j}T(0),\mathbf {b} _{j}T(1),\dots ,\mathbf {b} _{j}T(i)}

dóndebj{\displaystyle \mathbf {b} _{j}}es1{\displaystyle \mathbf {1} }o2{\displaystyle \mathbf {2} }paraj=0,,i1{\displaystyle j=0,\dots ,i-1}ybi{\displaystyle \mathbf {b_{i}} }como se especifica anteriormente.

Esta colección forma un montónQ{\displaystyle Q}con luego se puede volver a fusionar conPAGaiT(i){\displaystyle P-\mathbf {a} _{i}T(i)}para asegurar que solo se eliminara del montón el nodo mínimo. (La operación de fusión se realiza mediante múltiples inserciones, cada una de las cuales requiere como máximo 3 comparaciones).

Eliminación de un árbol : Los árboles enraizados en los troncos superiores del montón no se eliminan. Para eliminar el árboltrmimi(v){\displaystyle tree(v)}de tipoT(i1){\displaystyle T(i-1)}de un nodov{\displaystyle v}, hay dos casos, uno donde el espacio de trabajo dev{\displaystyle v}es de talla 4, y otra donde la talla es mayor. Tenga en cuenta quev{\displaystyle v}es un nodo en uni{\displaystyle i}el tronco del montón.

En un espacio de trabajo de tamaño mayor a 4, eli{\displaystyle i}El tronco tiene 2 o 3 nodos. Si tiene 3 nodos, entonces puede tener la forma(,v,w){\displaystyle (u,v,w)}o(,w,v){\displaystyle (u,w,v)}En cualquier caso, eliminartrmimi(v){\displaystyle tree(v)}y encoger el tronco. Tenga en cuenta quev{\displaystyle v}no puede ser el primer nodo en eli{\displaystyle i}el tronco ya que ese nodo estaría en eli+1{\displaystyle i+1}El tronco, que debe existir ya que los nodos en los troncos más superiores no se eliminan.

Si eli{\displaystyle i}El tronco es de la forma(,v){\displaystyle (u,v)}luego eliminartrmimi(v){\displaystyle tree(v)}y dar cuenta de la pérdida de lai{\displaystyle i}el tronco moviéndose alrededor de otros árboles de tipoT(i1){\displaystyle T(i-1)}en el espacio de trabajo.

En el caso en que el espacio de trabajo tenga un tamaño de 4, eliminetrmimi(v){\displaystyle tree(v)}y reorganizar los otros tres nodos de manera que dos queden debajo del nodo principal del espacio de trabajo. Esto crea uni{\displaystyle i}tronco de longitud dos (tres nodos en línea) pero causa una pérdida de un(i+1){\displaystyle (i+1)}th tronco. Esta pérdida se soluciona moviendo árboles desde el espacio de trabajo de nodos en el(i+1){\displaystyle (i+1)}dimensión n.º. Este proceso continúa ascendiendo en dimensión hasta que se resuelve.

Disminuir clave : asumir la clave del nodov{\displaystyle v}de dimensióni1{\displaystyle i-1}se reduce y no está en el nivel superior. Entoncestrmimi(v){\displaystyle tree(v)}se retira y se inserta en elj{\displaystyle j}el término en el nivel superior del montón (es decir,T(j){\displaystyle T(j)}en el polinomio extendido), dondej=dimetro(v){\displaystyle j=dim(v)}. Siv{\displaystyle v}estaba en el nivel superior de su árbol, entonces la propiedad del montón no fue violada por la clave de disminución y no se requiere la tala del árbol. Sin embargo, los troncos en el tronco más altoi{\displaystyle i}Puede que sea necesario reorganizarlo.

Análisis de operaciones

El método potencial se puede utilizar para analizar el tiempo amortizado para realizar operaciones. Sea 3 el potencial de un tronco que consta de tres nodos, y 1 el potencial de un tronco que consta de dos nodos. Defina la funciónS{\displaystyle S}ser la suma de los potenciales de todos los troncos, y dejarϕ=S{\displaystyle \phi =-S}El costo real será el número de comparaciones realizadas durante la operación. Tenga en cuenta que el potencial de un montón vacío es 0.

Clave de disminución: El número de nodos en los troncos puede aumentar o disminuir durante la eliminación de un árbol, dependiendo del tamaño del espacio de trabajo. En cada caso, se puede observar el cambio en el potencial y el número de comparaciones, lo que permite calcular el costo amortizado.

Dejemos que los baúles en las cajas que van hacia abajo a la izquierda sean losi{\displaystyle i}dimensión en la que uno de ellosv{\displaystyle v}puestos. Los troncos que bajan hacia la derecha son losi+1{\displaystyle i+1}dimensión. Lai{\displaystyle i}Los troncos se ordenan por longitud no decreciente, aunque en la práctica se ordenan por las etiquetas de sus nodos de cabecera.

Ejemplos de eliminación en diferentes tamaños de espacio de trabajo. Antes de la eliminación (izquierda) y después (derecha). Los nodos verdes representan las opciones de eliminación posibles.

En los casos en quew=9,8,5{\displaystyle w=9,8,5}y caso 1 dew=7{\displaystyle w=7}, no se necesitan comparaciones debido a la propiedad de montón yΔϕ=ΔS=(2){\displaystyle \Delta \phi =-\Delta S=-(-2)}El costo amortizado en estos casos es entoncesdoi^=0+Δϕ=2{\displaystyle {\hat {c_{i}}}=0+\Delta \phi =2}.

En caso 1 dew=7{\displaystyle w=7}y ambos casos dew=6{\displaystyle w=6}, como máximo se necesita 1 comparación yΔS{\displaystyle \Delta S}disminuye en 1, lo que hace que el costo amortizado sea 1.

En el caso final dondew=4{\displaystyle w=4}, como máximo se realiza una comparación yΔS{\displaystyle \Delta S}aumenta en 1, lo que da un costo amortizado de 0. La pérdida de lai+1{\displaystyle i+1}El tronco deberá repararse utilizando el espacio de trabajo superior del nodo antes de que se eliminara del tronco. El proceso de reparación finaliza en uno de los casos anteriores o si no existe un tronco superior. Dado que el costo amortizado no es negativo y solo se realiza uno de los casos con amortización positiva en este proceso, el costo amortizado total permanece constante.

Insertar Al insertar un solo nodo en uno existentea0T(0){\displaystyle \mathbf {a} _{0}T(0)}en el árbol, hay dos comparaciones yΔS=2{\displaystyle \Delta S=2}sia0=2{\displaystyle \mathbf {a} _{0}=2}o hay una comparación conΔS=1{\displaystyle \Delta S=1}Por lo tanto, el costo amortizado es 0 durante la inserción inicial y los arrastres. El tiempo real en el peor de los casos esO(registronorte){\displaystyle O(\log n)}debido a los arrastres y al número constante de comparaciones en cada ocasión.

Eliminar Min Se tomaO(registronorte){\displaystyle O(\log n)}tiempo para encontrar el elemento mínimo, y tambiénO(registronorte){\displaystyle O(\log n)}para separar los subárboles más pequeños, ya que hay como máximoO(registronorte){\displaystyle O(\log n)}de ellos. Para fusionar los subárboles,O(registronorte){\displaystyle O(\log n)}Se realizan inserciones que toman un tiempo amortizado constante cada una. El tiempo amortizado es entoncesO(registronorte){\displaystyle O(\log n)}y también lo es el peor de los casos.

Referencias

  1. 1 2 Takaoka, Tadao (marzo de 2003). "Teoría de los montículos 2–3" . Matemáticas Aplicadas Discretas . 126 (1): 115– 128. doi : 10.1016/S0166-218X(02)00219-6 .