Saltar al contenido principal

Suma de colas

La primitiva crucial en colas binomiales es la suma, que dadas dos colas binomiales CXC_X y CYC_Y para conjuntos de elementos XX e YY entrega una cola binomial CSC_S para el conjunto XYX \cup Y (permitimos claves duplicadas, de modo que esta unión no elimina repetidos). La suma procede análogamente a la suma de los números binarios X|X| y Y|Y|, partiendo con CS=C_S = \emptyset y considerando los bits en cada posición kk de X|X| y Y|Y|, desde el bit menos significativo (k=0k=0) al más significativo. Llevaremos también un conjunto TT de 0 ó 1 árboles de acarreo, análogo al bit de carry de la suma binaria. Al comenzar tenemos T=T=\emptyset.

  1. Si el kk-ésimo bit de X|X| es 1, mover el árbol BkB_k de CXC_X a TT.
  2. Si el kk-ésimo bit de Y|Y| es 1, mover el árbol BkB_k de CYC_Y a TT.

Luego, procesamos el TT resultante de la siguiente forma:

  1. Si T=0|T|=0, no hacer nada para este valor de kk.
  2. Si T=1|T|=1, mover el árbol BkB_k de TT a CSC_S, dejando T=T=\emptyset.
  3. Si T=2|T|=2, unir los dos árboles BkB_k y BkB_k' de TT en un árbol Bk+1B_{k+1}, colgando el que tenga mayor raíz del que tenga menor raíz. El resultado es el nuevo contenido de TT para el siguiente valor de kk.
  4. Si T=3|T|=3, elegir un árbol BkB_k de los tres y moverlo a CSC_S. Con los otros dos, proceder como en el punto anterior.

--> imagen

La suma requiere entonces de tiempo O(log(XY))O(\log(|X \cup Y|)), y deja los conjuntos CXC_X, CYC_Y y TT vacíos, y el resultado de la suma en CSC_S.