Saltar al contenido principal

Operaciones

Consideremos ahora una cola binomial CSC_S con nn elementos, y veamos cómo realizar las operaciones.

Insert

Para insertar un elemento xx, creamos una cola binomial C={B0}C = \{ B_0 \}, con B0B_0 conteniendo el elemento xx, y sumamos las colas CSC_S y CC para formar el nuevo CSC_S. El elemento queda entonces insertado en tiempo O(logn)O(\log n).

FindMin

El mínimo de todos los elementos puede calcularse en tiempo O(logn)O(\log n), mediante recorrer las (a lo más) log2n\lceil \log_2 n \rceil raíces de los árboles del bosque binomial CSC_S, pues los elementos no-raíces no son menores que las raíces. Para reducir este tiempo a O(1)O(1), basta tener precalculado el valor del mínimo: la recorrida de raíces se realiza como postproceso luego de realizar cualquiera de las otras operaciones que modifican CSC_S, y les agrega sólo un costo adicional de O(logn)O(\log n).

ExtractMin

Una vez que sabemos que el mínimo es la raíz de un árbol BkCSB_k \in C_S, sacamos BkB_k del bosque y eliminamos su raíz. El resultado de eliminar la raíz de BkB_k es un nuevo bosque binomial formado por los kk hijos de la raíz eliminada, CN={B0,,Bk1}C_N=\{ B_0, \ldots, B_{k-1} \}. Finalmente, sumamos las colas CS{Bk}C_S - \{ B_k \} y CNC_N, en tiempo O(logn)O(\log n), y el resultado es el nuevo CSC_S.

Heapify

La implementación de heaps tardaría tiempo O(nlogn)O(n\log n) en construir un heap mediante inserciones sucesivas, por lo que se diseña para ella un procedimiento especial para realizar esta operación en tiempo O(n)O(n). Sin embargo, en una cola binomial obtenemos tiempo O(n)O(n) si realizamos nn inserciones sucesivas en una cola vacía. La razón está en el análisis de los 2k2^k incrementos consecutivos en un número de kk bits que realizamos al comienzo del capítulo y que está en relación directa con los costos de inserción de esta cola.

Unir

La unión de dos colas binomiales de tamaños mm y nn se obtiene en tiempo O(log(m+n))O(\log(m+n)) mediante sumarlas. Con un heap clásico, la forma más fácil de unir dos colas de prioridad es concatenar los arreglos e invocar heapify, lo que cuesta tiempo O(m+n)O(m+n).