Professional Documents
Culture Documents
Captulo 21
B0
Bp+1
Bp
Bp
B0
B1
B2
B3
20-01-2010
Es importante destacar que si n 2 p , entonces: p log 2 (n) . Las principales operaciones sobre
esta estructura dependen del nmero de hijos de la raz.
Si se enumeran los nodos, empleando el sistema binario, en preorden (izquierdo-derecho-raz),
partiendo del nodo con mayor profundidad, se obtiene la Figura 21.3, para el caso de B3 .
111
011
001
010
101
110
100
000
p
k
p
1
p!
1!( p 1)!
1.
p.
k-1
20-01-2010
p 1
p 1
k 1
( p 1)!
( p 1)!
k !( p 1 k )! (k 1)!( p 1 (k 1))!
Sacando factores comunes, y multiplicando y dividiendo el segundo trmino por k, se tiene:
( p 1)!
1
k
(
)
k!
( p 1 k )! ( p k )!
Multiplicando y dividiendo el primer trmino por p-k, factorizando y aplicando la definicin de
coeficiente binomial, se tiene:
( p 1)!
(( p k ) k )
k !( p k )!
p!
k !( p k )!
p
k
B2
B1
B0
bi 2i
n
i 0
20-01-2010
Donde bi es uno de los dgitos binarios {0, 1}. Se define la foresta binomial Fn de orden n,
como una coleccin finita de rboles binomiales Bi , uno por cada cifra bi diferente de cero en la
representacin binaria de n.
Por ejemplo para n=13, se tiene: F13
B3 , B2 , B0 ya que 1310
11012
Entonces una cola de prioridad de n elementos puede ser representada por una foresta Fn , donde
cada uno de los rboles binomiales que la forman, cumplen la propiedad de que los hijos tienen
prioridades mayores que la de su padre.
Observando la Figura 21.5, una cola de prioridad con n elementos tambin puede representarse
con la raz como el nodo con prioridad mnima unido a una foresta Fn-1.
B3 , B2 , B0 con F5
B2 , B0 . La suma binaria de 13 y
5, se realiza segn:
1 1 0 1
+ 0 1 0 1
1 0 0 1 0
Al sumar (unir, mezclar o fundir) dos rboles binomiales Bi se produce reserva, sta es un rbol
binomial Bi 1 .
+
B4
B3 B2
B2
B0
B0
B1
B4 , B1 .
Observando la Figura 21.2, puede notarse que la unin de dos rboles binomiales puede
realizarse en tiempo constante, basta escribir una referencia para el rbol descendiente. En el
peor caso un heap con n elementos est formado por log(n) rboles binomiales, entonces
obtener uno, mediante mezclas, demanda un costo O(log(n)).
La insercin puede realizarse como la mezcla de un rbol binomial con un elemento con la
estructura ya existente. Tambin su costo es O(log(n)).
20-01-2010
La extraccin del mnimo requiere buscar la raz menor de los rboles binomiales que forman la
foresta, esto tiene un costo O(log(n)), ya que ese es el nmero de heaps que forman la cola de
prioridad. Observando la Figura 21.5, la remocin de la raz de uno de los rboles binomiales
genera una nueva foresta, la cual debe unirse al resto de los rboles binomiales, lo cual se
realiza tambin en O(log(n-1)), dando para la operacin completa un costo O(log(n)).
2
2
20-01-2010
20-01-2010
+
B3
B2 B1 B0
B0
20-01-2010
5
2
1
2
3
1
7
1
2
0
6
0
2
0
4
0
8
0
4
0
1
3
10
2
11
1
12
0
3
1
5
2
7
1
14
0
6
0
2
0
4
0
8
0
20-01-2010
Si antes de la insercin, la foresta no puede tener dos rboles binomiales de igual grado,
entonces la lista debe recorrerse mientras el grado de la ltima unin sea igual al grado del
siguiente rbol binomial de la lista.
20-01-2010
10
mayorp
3
1
5
2
7
1
6
0
2
0
4
0
8
0
20-01-2010
11
else
{ if (H1->grado < H2->grado) {H=H1; H1=H1->hermano;} //Inicio lista
else {H=H2; H2=H2->hermano;}
t=H;
while(H1!=NULL && H2!=NULL) //se pasan en orden ascendente
{ if (H1->grado < H2->grado){t->hermano=H1; H1=H1->hermano;}
else {t->hermano=H2; H2=H2->hermano;}
t=t->hermano;
}
if (H1!=NULL ) t->hermano=H1; //copia el resto de la lista que no se agot
else t->hermano=H2;
return(H);
}
}
Puede compactarse la codificacin de la funcin si se emplea un nodo de encabezado, de este
modo la inicializacin de la mezcla se realiza dentro del lazo while.
pnodo BinomialHeapMerge(pnodo H1, pnodo H2)
{ nodo h;
pnodo t=&h;
while (H1!=NULL && H2!=NULL)
{ if (H1->grado < H2->grado){t->hermano=H1; H1=H1->hermano;}
else {t->hermano=H2; H2=H2->hermano;}
t=t->hermano;
}
if (H1==NULL ) t->hermano=H2;
else if (H2==NULL ) t->hermano=H1; else t->hermano=NULL;
return ((&h)->hermano);
//retorna puntero a la mezcla.
}
20-01-2010
12
(x->grado != nextx->grado ||
( (nextx->hermano!= NULL) && (nextx->hermano->grado == x->grado)) )
La formulacin de la segunda parte del or, se plantea mediante un and lgico para asegurar la
existencia del tercer nodo; ya que si no existe el tercer nodo, preguntar por su grado produce un
error en ejecucin.
El caso 1, se produce cuando los nodos races tienen grados diferentes, y se activa con la
primera parte del or. El caso 2, se presenta cuando existe suma de rboles binomiales de igual
grado con reserva.
Cuando debe efectuarse el enlace binomial de dos rboles de igual grado, se tienen dos casos
que se disciernen segn la prioridad de los nodos races. Son los casos 3 y 4. Se emplea el
puntero previo para enlazar las listas.
20-01-2010
13
21.14. Insertar.
Se pasa la cola de prioridad con una referencia a sta.
Encola nodo n en cola referenciada por q, empleando la operacin de unin.
void enqueue( pnodo n, queue *q )
{ pnodo p=*q;
*q= BinomialHeapUnion(p, n);
} /* enqueue */
Una pequea refinacin de la operacin, se logra aislando dos situaciones triviales. La primera
es que la cola est vaca; la otra es que el nmero de nodos en la foresta sea par, en este caso no
hay al principio de la lista un rbol binomial de un nodo, o de grado cero, y basta insertar al
inicio. Puede especializarse an ms la operacin, ya que en este caso no pueden presentarse
tres rboles de igual grado, y tampoco es preciso recorrer toda la lista.
void enqueue( pnodo n, queue *q )
{ pnodo p=*q;
if (p==NULL) *q=n;
else if (p->grado!=0) {n->hermano=*q; *q=n;}
else
*q= BinomialHeapUnion(p, n);
} /* enqueue */
21.15. Descartar.
La operacin desencolar retorna el nodo con valor mnimo de prioridad, y deja una foresta
disminuida en un elemento.
Para esto, luego de extraer de la lista el rbol binomial cuya raz es el nodo con prioridad
mnima, deja ligada la lista con los rboles binomiales siguientes al que contiene el mnimo.
Posteriormente reversa el orden de la lista de hijos del mnimo, dejndola ordenada ascendente.
Finalmente realiza la suma de las dos forestas.
pnodo dequeue( queue *q )
{ pnodo p=*q, min, ListaHijosMinimo;
if (p==NULL) return NULL;
min=ExtraeMinimo(q);
//Se enlaza lista sin el rbol cuya raz es el mnimo
//reversar lista descendente (ordenada por grado) de hijos del mnimo, apuntada por x.
ListaHijosMinimo=ReversarLista(min->hijo);
//Queda lista ordenada ascendente por grado, apuntada por x.
//Se mezcla lista de rboles sin el mnimo, con la lista de hijos del mnimo
*q=BinomialHeapUnion(*q, ListaHijosMinimo);
return (min);
} /* dequeue */
20-01-2010
14
20-01-2010
15
20-01-2010
16
Referencias.
J. Vuillemin, A Data Structure for Manipulating Priority Queues, CACM Vol. 21, No. 4,
April 1978, 309-315.
M. R. Brown. PhD thesis, The Analysis of a Practical and Nearly Optimal Priority Queue,
Stanford University, March 1977.
Douglas W. Jones, An Empirical Comparison of Priority-Queue and Event-Set
Implementations, Communications of the ACM, April 1986, Volume 29, Number 4.
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction
to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001.
Profesor Leopoldo Silva Bijit
20-01-2010
17
ndice general.
CAPTULO 21 ........................................................................................................................................... 1
HEAPS BINOMIALES. SELECCIONAR. ............................................................................................. 1
21.1. RBOL BINOMIAL. ........................................................................................................................... 1
21.2. COLA DE PRIORIDAD BINOMIAL. ...................................................................................................... 3
21.3. ANLISIS DE LA OPERACIN UNIN. ................................................................................................ 4
21.4. ESTRUCTURA DE DATOS................................................................................................................... 5
21.4.1. Nodo binario. .......................................................................................................................... 5
21.4.2. Nodo binario aumentado con informacin del grado. ............................................................ 7
21.4.3. Nodo binario con punteros al padre........................................................................................ 8
21.5. ANLISIS DE LA INSERCIN. ............................................................................................................ 8
21.6. ANLISIS DE LA EXTRACCIN DEL MNIMO. ..................................................................................... 9
21.7. TIPOS DE DATOS............................................................................................................................... 9
21.8. CREACIN DE NODO......................................................................................................................... 9
21.9. INICIO DE COLA................................................................................................................................ 9
21.10. TEST DE COLA VACA. .................................................................................................................. 10
21.11. UNIN DE DOS RBOLES BINOMIALES DE IGUAL GRADO. ............................................................. 10
21.12. MEZCLA DOS LISTAS ORDENADAS POR CAMPO GRADO. ............................................................... 10
21.13. MEZCLA DOS COLAS BINOMIALES. ............................................................................................... 11
21.14. INSERTAR..................................................................................................................................... 13
21.15. DESCARTAR. ................................................................................................................................ 13
21.16. EXTRACCIN DEL MNIMO. .......................................................................................................... 14
21.17. REVERSAR LISTA. ........................................................................................................................ 14
21.18. BUSCA MNIMO. ........................................................................................................................... 15
21.19. LISTA DE RACES DE RBOLES BINOMIALES. ................................................................................ 15
21.20. TEST DE LAS FUNCIONES. ............................................................................................................. 16
REFERENCIAS. ........................................................................................................................................ 16
NDICE GENERAL. ................................................................................................................................... 17
NDICE DE FIGURAS................................................................................................................................. 17
ndice de figuras.
FIGURA 21.1. DEFINICIN INDUCTIVA DE RBOL BINOMIAL. ........................................................................ 1
FIGURA 21.2. EJEMPLOS DE RBOLES BINOMIALES. ...................................................................................... 1
FIGURA 21.3. NUMERACIN BINARIA EN PREORDEN DE B3. .......................................................................... 2
FIGURA 21.4. NODO CON PROFUNDIDAD K EN BP. ......................................................................................... 2
FIGURA 21.5. SUBRBOLES DE B3. ................................................................................................................ 3
FIGURA 21.6. MULTIRBOLES BINOMIALES: B3 , B2, B1 , B0. ......................................................................... 5
FIGURA 21.7. REPRESENTACIN MEDIANTE LISTAS. ..................................................................................... 6
FIGURA 21.8. FORESTA CON 3 ELEMENTOS. .................................................................................................. 6
FIGURA 21.9. FORESTA CON 6 Y 7 ELEMENTOS. ............................................................................................ 7
FIGURA 21.10. GENERACIN DE B3 MEDIANTE MEZCLAS. ............................................................................. 7
FIGURA 21.11. REPRESENTACIN HIJO IZQUIERDO-HERMANO DERECHO DE B2 Y B3. .................................... 8
FIGURA 21.12. FORESTA CON 13 NODOS. LISTA DE RACES........................................................................... 8
20-01-2010
18
20-01-2010