Saltar al contenido principal

Operaciones

Insert

Para insertar un elemento xx en una cola CSC_S, simplemente se crea un nuevo árbol B0B_0 conteniendo xx y se agrega este B0B_0 a la lista de árboles de CSC_S. Además se compara xx con el mínimo elemento, para actualizar el mínimo de ser necesario. El tiempo total es O(1)O(1).

FindMin

Como siempre conocemos el mínimo elemento, el tiempo es O(1)O(1).

Heapify

Se realiza mediante nn inserciones, en tiempo O(n)O(n).

Merge

Simplemente se unen los dos conjuntos concatenando las dos listas, en tiempo O(1)O(1). Además se comparan los dos mínimos, para retener el mínimo global.

ExtractMin

Ésta es la operación más compleja. Aquí recorremos la lista y nos aseguramos de convertirla en un bosque binomial, mediante sumar árboles iguales iterativamente.

Primero eliminamos la raíz del árbol BkB_k que contiene el mínimo actual (la cual conocemos) y agregamos los hijos B0,,Bk1B_0,\ldots,B_{k-1} a la lista de árboles de CSC_S.

Luego, convertimos el bosque de árboles binomiales en un bosque binomial. Para ello, creamos un pequeño arreglo AA de log2n\lceil \log_2 n \rceil punteros, donde A[k]A[k] apunta a un único árbol BkB_k si es que tenemos alguno. Inicialmente todos los punteros son nulos. Ahora recorremos la lista. Para cada árbol BkB_k que encontramos, si A[k]A[k] es nulo, asignamos A[k]BkA[k] \leftarrow B_k. Si no, unimos BkB_k con el árbol A[k]A[k] (colgando la raíz mayor de la menor) en un único árbol Bk+1B_{k+1}, dejamos A[k]A[k] en nulo y continuamos el proceso con este nuevo árbol Bk+1B_{k+1}.

Al final de esta operación tenemos un bosque binomial en AA, y creamos una lista enlazada con ellos. Ésta es la nueva cola de Fibonacci (en este momento es una cola binomial válida). Sobre las O(logn)O(\log n) raíces resultantes calculamos el nuevo mínimo y lo recordamos.

--> imagen