Você está na página 1de 17

binomial heap

Santiago Lovn Garca


April 3, 2016
Universidad La Salle

Definicin

En Ciencia de la Computacin se denomina Heap Binomial a una


estructura de datos parecida al Heap Binario pero que brinda una
operacin eciente de mezcla entre dos Heaps. Esta propiedad hace
que se utilice como un mergeable heap, al igual que el Heap de
Fibonacci, en la implementacin de una cola con prioridad que
soporte la operacin de mezcla.

Binomial heap

Un montculo binomial es una coleccin de rboles binomiales


rbol binomial, Bk , se dene recursivamente:
1. B0 es un solo nodo
2. Bk consiste en dos rboles binomiales Bk-1 enlazados de la
siguiente forma: la raz de uno es el hijo ms a la izquierda de la
raz del otro.
3. Lo que es lo mismo que decir que un rbol binomial de orden k (
Bk ) tiene un nodo raz cuyos hijos son races de rboles
binomiales de orden k-1, k-2 2, 1, 0 en ese orden.

Binomial tree - propiedades

1. Tiene 2k nodos;
2. Su altura es k;
3. Tiene nodos en el nivel i, para i = 0, 1, , k;
4. La raz tiene grado k (nmero de hijos) y es el nodo de mximo
grado; ms an, si se numeran los hijos de la raz de izquierda a
derecha como k 1, k 2, , 0, el hijo i es la raz de un subrbol Bi .

Binomial tree

Binomial Heap

Un heap binomial es una secuencia de arboles binomiales tal que:


Cada rbol esta heap-ordered.
Hay 0 1 rbol binomial de orden k.
Las races de los arboles se conectan con una lista simplemente
enlazada con los grados en orden decreciente.

Merge

Es la operacin mas sencilla e importante de esta estructura es la


unin de dos arboles binomiales (de un mismo grado) en un heap
binomial.
1. Se compara el nodo raz de los arboles.
2. La raz mas pequea se convierte en subarbol del mas grande.
function mergeTree(p, q)
if p.root.key <= q.root.key
return p.addSubTree(q)
else
return q.addSubTree(p)
7

Merge

Unir dos heaps es la operacin mas importante y puede ser usada


como subrutina en la mayoria de aplicaciones.
1. Se recorren los heaps simultaneamente.
2. Si solo uno de los heaps contiene un rbol de orden k, este se
mueve al nuevo heap
3. Si ambos heaps tienen un rbol de orden k estos arboles se unen.
4. Si es necesario se une este nuevo rbol con otro de igual orden

Merge

function merge(p, q)
while not (p.end() and q.end())
tree = mergeTree(p.currentTree(), q.currentTree())
if not heap.currentTree().empty()
tree = mergeTree(tree, heap.currentTree())
heap.addTree(tree)
heap.next(); p.next(); q.next()

Merge

10

Insert

El incertar un nuevo elemento se hace simplemente creando un


nuevo heap con ese elemento y llamando a merge.

11

Find minimum

Para encontrar el mnimo solo se tiene que buscar el mnimo entre


las races de los arboles. Tambin se puede usar un puntero que
apunte al mnimo entre los arboles, actualizndolo cuando se
realice cada operacin.

12

Delete minimum

1. Se encuentra el mnimo y se elimina obteniendo una lista de sub


arboles.
2. Se crea un nuevo heap con estos subarboles
3. Se une este nuevo heap con el heap original.
function deleteMin(heap)
min = heap.trees().rst()
for each current in heap.trees()
if current.root < min.root then min = current
for each tree in min.subTrees()
tmp.addTree(tree)
heap.removeTree(min)
merge(heap, tmp)
13

Decrease key

Cuando se disminuye la clave de un valor esta puede ser mayor que


la de su padre, entonces se intercambian hasta que el nodo quede
en la posicin correcta.

14

Delete

Para borrar un elemento simplemente se disminuye su clave a


menos innito (un valor inferior a cualquier elemento del heap), y
luego se llama a eliminar el menor heap.

15

Pwreguntas?

16

Você também pode gostar