Professional Documents
Culture Documents
Algoritmos y Complejidad
Anlisis Amortizado de Estructuras de Datos
Pablo R. Fillottrani
3 Depto. Ciencias e Ingeniera de la Computacin Universidad Nacional del Sur 4
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Usos y principios
el anlisis amortizado estudia el tiempo requerido para ejecutar una secuencia de operaciones sobre una estructura de datos si usamos el anlisis normal en el peor caso, ejecutar N operaciones sobre una estructura de datos de n elementos lleva tiempo en O (Nf (n)), donde f (n) es el tiempo en el peor caso de la operacin en muchos casos esa cota no es ajustada debido a que el peor caso puede NO ocurrir las N veces, o incluso ninguna de esas veces entonces se introducen las tcnicas de anlisis amortizado para tratar de obtener una cota menor para la serie de operaciones
el anlisis amortizado se diferencia del anlisis en el caso promedio en que no involucra probabilidades, y en que garantiza el tiempo en el peor caso de las N operaciones el anlisis probabilstico produce un tiempo esperado que una determinada ejecucin puede sobrepasar o no el anlisis amortizado produce una cota en el tiempo de ejecucin de la serie de operaciones (es decir, sigue siendo un anlisis del peor de los casos)
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
en general todas las tcnicas son aplicables a todos los casos y dan resultados equivalentes slo veremos en la materia el mtodo del potencial
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
una funcin potencial mapea cada estado Di de la estructura de datos a un nmero real, llamado el potencial de Di el costo amortizado de la i-sima operacin se dene como
este mtodo representa los ahorros hechos en operaciones previas mediante incrementos en la energa potencial, que puede ser gastada en operaciones costosas siguientes la energa potencial representa las tareas realizadas en llamadas anteriores de una operacin, que pueden ser usadas en prximas invocaciones a la operacin se comienza con una estructura de datos inicial D0 , y para cada i = 1, 2, . . . , N sea ci el costo real de la i-sima operacin y Di la estructura de datos resultante despus de aplicar esa operacin sobre Di 1
ci = ci + (Di ) (Di 1 )
entonces, la sumatoria de los costos amortizados de la secuencia de operaciones es:
N i =1 N N i =1
ci =
i =1
si se puede denir tal que (DN ) (D0 ) entonces este valor es una cota superior a la sumatoria de costos reales si la funcin est bien elegida y la E.D. est diseada para ello, esta cota superior es ms ajustada que N veces el peor caso
Pablo R. Fillottrani Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pila extendida
consideremos una E.D. Pila con la operacin adicional DesapilarMltiple(k ) que elimina los k elementos que estn ms ariba en la pila las operaciones Apilar, Desapilar y Tope son de (1) en el peor caso individual, pero la operacin DesapilarMltiple(k ) es de (min(k , n)), siendo n los elementos en la pila esto da un tiempo de O (nN ) para cualquier secuencia de N operaciones consideraremos de costo real 1 a las tres primeras operaciones.
para hacer el anlisis amortizado, tomemos como funcin potencial (Di ) la cantidad de elementos en la pila Di dado que nunca es negativo, (Di ) (D0 ) para todo i esto asegura que la sumatoria de costos amortizados es una cota superior a la sumatoria de costos reales
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Contador binario
para la operacin DesapilarMltiple(k ), con k s:
se tiene un contador binario de n bits con la operacin de incremento el costo de esta operacin es la cantidad de bits cambiados en el peor caso, la cantidad de bits cambiados son todos los bits del contador, por lo que N incrementos es de O (nN ) es claro que el peor de los casos no se da en todas las N operaciones, por lo que es vlido realizar un anlisis amortizado
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
sea s la cantidad de 1s del contador antes del incremento, t de los cuales se modican en la i-sima operacin para hacer un anlisis amortizado de esta E.D. tomaremos como funcin potencial la cantidad de 1s en el contador si empezamos con el contador en cero, (Di ) (D0 ) para todo i, por lo que podemos asegurar que la sumatoria de costos amortizados es una cota superior a la sumatoria de costos reales el costo amortizado de la operacin es:
ci
luego, N operaciones de incremento del contador llevan en el peor caso tiempo de (N ) se puede extender el anlisis amortizado an para el caso cuando el contador no empieza en 0 (ejercicio)
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Tablas dinmicas
para implementar esta E.D. ser conveniente referirse al factor de carga (T ) se dene como la relacin entre la cantidad de elementos y la memoria asignada:
en algunas aplicaciones no se conoce previamente la cantidad de objetos que pueden llegar a ser almacenados en una tabla es til por lo tanto utilizar una tabla dinmica que vaya solicitando memoria a medida que la necesita las operaciones normales de Insercin y Eliminar toman tiempo en (1) pero el peor caso de una insercin con expansin es de orden de la cantidad de memoria asignada, lo que hace que la cota superior de una serie de operaciones no sea ajustada si la expansin es infrecuente
(T ) = elementos/capacidad
tambin supondremos que la asignacin de la nueva memoria es independiente de la anterior, o sea no se pueden juntar lo que se tena antes con lo que se dispone ahora
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
si T est vaca, por denicin es (T ) = 1 supongamos en principio que se quiere implementar una tabla dinmica que slo soporte inserciones es necesario decidir cundo y cunto expandir una heurstica comn es realizar la expansin en el momento que la tabla no permita una insercin (ie (T ) = 1), incorporando el doble de la memoria hasta entonces disponible
PROCEDURE Insertar(x) IF this.tamao=0 asignar memoria para un elemento this.tamao ::= 1 ENDIF IF this.tamao=this.elementos asignar el doble de memoria disponible trasladar todos los elementos this.tamao::=2*this.tamao liberar la memoria anterior ENDIF insertarElemental(x) this.elementos ::= this.elementos++ RETURN
Pablo R. Fillottrani Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
el tiempo en el peor caso de una insercin en una tabla de n elementos es de (n), por lo que una serie de N operaciones es de O (nN ) con esta heurstica se asegura que el factor de carga nunca es menor que 0, 5, por lo que el espacio usado no superar el doble de lo mximo necesitado la expansin de la tabla ocurre solamente cuando la cantidad de elementos es potencia de 2 la mayora de las inserciones son de tiempo constante
se necesita una funcin potencial que valga 0 inmediatamente despus de una expansin, y la cantidad de elementos insertados inmediatamente antes de la expansin una posibilidad es:
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Comparacin
ci
con expansin
ci
= = =
(2 elemi 1 tami 1 ) =
1 + elemi 1 + 2 tami 1 = 3 (1)
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad
para implementar la operacin Eliminar es suciente con remover el elemento de la tabla sin embargo, es deseable tambin implementar una contraccin cuando el factor de carga de la table sea sucientemente pequeo se quiere entonces acotar por abajo el factor de carga, y acotar por arriba el costo amortizado de las operaciones una estrategia natural es contraer la tabla a la mitad cundo el factor de carga es menos de 0, 5. Sin embargo, esta estrategia no es buena.
el problema con esta estrategia surge cuando no se ejecutan sucientes inserciones despus de una expansin como para pagar el gasto de una contraccin en trminos del potencial, no hay energa potencial que compense ese gasto por ejemplo: I, I, . . . , I, I, D, D, I, I, . . .
n/2
el problema est en que la expansin y contraccin se realizan con una misma cota al factor de carga luego en el peor caso puede haber expansiones y contracciones en O (N ) operaciones de una secuencia de N
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
se puede mejorarla bajando la cota inferior al factor de carga: ponerla en 0, 25 en lugar de 0, 5 entonces, se expande cuando (T ) = 1, pero slo se contrae cuando (T ) < 0, 25 despus de una expansin vale (T ) = 0, 5 y deben ser eliminados la mitad de los elementos para que ocurra una contraccin anlogamente, despus de una contraccin (T ) = 0, 5 y deben ser insertados otros tantos elementos para que ocurra una expansin
para el anlisis amortizado la funcin potencial debe ser 0 inmediatamente despus de una expansin y de una contraccin; y aumentar a medida que el factor de carga se acerca a 1 o disminuye a 0, 25 una posibilidad es:
(Ti ) =
si (T ) 0, 5 si (T ) < 0, 5
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
el anlisis amortizado para una insercin cuando (Ti 1 ) 0, 5 es idntico al caso anterior si (Ti 1 ) < (Ti ) < 0, 5 entonces:
el anlisis amortizado para una eliminacin cuando (Ti 1 ) < 0, 5 tiene que considerar si existe contraccin o no
sin contraccin
ci
ci
con contraccin
ci
= ci + (Ti ) (Ti 1 ) = elemi + 1 + (2 elemi tami ) (tami 1 /2 elemi 1 ) = elemi + 1 + 2 elemi tami (2 tami )/2 + elemi + 1 = 2 + 4 elemi 2 tami = 2 + 4 (0, 5 tami ) 2 tami = 2 (1)
ci
= ci + (Ti ) (Ti 1 ) = 1 + (2 (elemi 1 + 1) tami 1 ) (tami 1 /2 elemi 1 ) = 3 + 3 elemi 1 3/2 tami 1 3 + 3 (0, 5 tami 1 ) 3/2 tami 1 = 3 (1)
Pablo R. Fillottrani Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Heaps asimtricos
el anlisis amortizado para una eliminacin cuando (Ti 1 ) 0, 5 queda como ejercicio es necesario considerar dos subcasos: cuando la eliminacin ocasiona que el factor de carga pase la cota, y cuando la eliminacin mantiene el factor de carga por encima de la cota
un heap asimtrico (o skew heap) es un rbol binario que respeta la propiedad de heap, no tiene restricciones estructurales, y soporta las operaciones insercin, eliminarMin y
mezcla
un rbol satisface la propiedad de heap si cumple que el nodo con menor valor est en la raz, y todos sus subrboles tambin cumplen la propiedad de heap las operaciones tienen una implementacin muy sencilla
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Ejemplo
PROCEDURE mezcla(T1,T2) IF T1=nil THEN this::=T2; RETURN IF T2=nil THEN this::=T1; RETURN IF T1.raiz()<T2.raiz() this.setRaiz(T1.raiz()) this.setHD(T1.hi()) this.setHI(T1.mezcla(T2, T1.hd()) ELSE this.setRaiz(T2.raiz()) this.setHD(T2.hi()) this.setHI(T2.mezcla(T1,T2.hd())) ENDIF RETURN
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad
en la prctica esto corresponde a una mezcla de los caminos derechos, y el resultado se inserta como el nuevo camino izquierdo en el peor caso esta operacin toma tiempo de O (n) ya que puede eventualmente recorrer todos los nodos de ambos rboles el tiempo real de la mezcla lleva tiempo proporcional a la cantidad de nodos en el camino derecho pero como estos nodos pasan a continuacin a estar en el camino izquierdo, las prximas mezclas no los considerarn amerita realizar un anlisis amortizado de esta operacin
para realizar un anlisis amortizado de la operacin se toma como funcin potencial a la cantidad de nodos pesados: aquellos nodos que tienen al menos la mitad de sus descendientes en el subrbol derecho los nodos que no son pesados se denominan livianos. la funcin potencial vale 0 en el rbol vaco, y nunca es negativa, con lo que cualquier sumatoria de costos amortizados que comiencen en vaco es una cota de los costos reales
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
en un heap asimtrico, siempre la cantidad de nodos del camino derecho determina el tiempo de la operacin mezcla acotar estos nodos nos permite determinar los tiempos amortizados
el anlisis amortizado de la operacin mezcla, siendo p1 , p2 y l1 , l2 la cantidad de nodos pesados y livianos del camino derecho de cada rbol mezclado, es:
ci
Lema Sea T un heap asimtrico de n elementos, entonces la cantidad de nodos livianos en el camino derecho es de O (log n). Demostracin. Por induccin sobre la cantidad de nodos en el camino derecho.
considerando que en una mezcla, todos los nodos pesados del camino derecho se transforman en nodos livianos en el resultado, mientras que algunos nodos livianos del camino derecho se transforman en nodos pesados
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Heaps de Fibonacci
las operaciones de insercin y eliminarMinimo, como dependen de la mezcla tambin tienen tiempo amortizado logartmico esto implica que una serie de N operaciones sobre skew heaps, empezando de la estructura vaca, toman tiempo de O (N log n) en el peor caso.
los heaps de Fibonacci son un tipo de estructuras de datos que implementa las operaciones de los denominados mergeable heaps es decir sus operaciones son: crearHeap() minimo():Elemento insertar(x:Elemento) eliminarMinimo():Elemento mezclar(H1, H2:FibHeap) disminuirClave(x:Elemento,k:Clave) eliminar(x:Elemento)
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
si no se necesita las tres ltimas operaciones, los heaps binarios tradicionales constituyen una implementacin eciente sin embargo, la mezcla es de tiempo de (n) y la modicacin de clave de (log n) en el peor caso (ejercicio) los heaps asimtricos soportan ecientemente la operacin de mezcla, pero no la de disminuirClave los heaps de Fibonacci mejoran los tiempos de las dos ltimas operaciones, a costa de conservar los tiempos de las restantes slo bajo anlisis amortizado en lugar del peor caso para estos tiempos, suponemos la bsqueda de un nodo resuelta, ie en tiempo constante
la implementacin de los heaps de Fibonacci est basada en otra E.D., las heaps binomiales que tambin son mergeable heaps una cola binomial es una foresta de rboles binomiales que cumple con las siguientes propiedades:
cada rbol de la foresta cumple con la propiedad de heap. existe en la foresta a lo sumo un rbol binomial de cada rango.
un rbol binomial de rango k , notado Bk , se dene inductivamente como: B0 tiene un slo nodo, y Bk se forma enlazando dos rboles binomiales de rango k 1 de manera que uno sea el hijo extremo izquierdo del otro
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
operacin
Heaps binarios (peor caso) (1) (1) (log n) (log n) (n) (log n) (log n)
Heaps binomiales (peor caso) (1) O (log n) O (log n) (log n) O (log n) (log n) (log n)
Heaps de Fibonacci (amortizado) (1) (1) (1) O (log n) (1) (1) O (log n)
la raz de Bk es de grado k (cantidad de hijos), y sus hijos son (de izquierda a derecha) de grados k 1, k 2, . . . , 0
Demostracin. Queda como ejercicio, usar induccin sobre el grado k en todos los casos.
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Lema El mximo grado de un nodo en un rbol binomial de n nodos es log n. Demostracin. Inmediato de las propiedades 1 y 4 del lema 2.
las heaps binomiales son rboles binomiales que adems cumplen con la propiedad de heap, o sea que el nodo con menor clave de un rbol est en la raz, y todos sus subrboles tambin cumplen la propiedad de heap adems tambin satisfacen que si el heap tiene n nodos entonces existen a lo sumo log n + 1 rboles
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Heaps de Fibonacci
la implementacin de las operaciones es la siguiente: crearHeap() produce una foresta vaca, y es de (1). minimo() se puede implementar manteniendo un puntero al rbol con menor clave en tiempo (1) mezclar(H1, H2) se puede realizar mediante a un proceso
anlogo a la suma binaria, componiendo rboles binomiales de rangos repetidos en un rbol de rango mayor. Esto lleva tiempo de (log n) eliminarMinimo() e insertar(x) se implementan en base a la operacin de mezcla disminuirClave(x, k) debe recorrer a lo sumo la mxima altura del rbol ms alto en la foresta, lo que es de O (log n) de acuerdo a las propiedades vistas. eliminar(x) se implementa disminuyendo la clave del elemento al mnimo posible, y luego llamando a
un heap de Fibonacci se basa en los heaps binomiales. Estan formados por una foresta de rboles, los cuales se inician como rboles binomiales. la diferencia est en que a medida que se ejecutan las operaciones no necesariamente siempre estos rboles mantienen su estructura binomial su utilizacin sera til en algoritmos como el de Dijkstra para los caminos ms cortos con orgen nico, donde en cada iteracin de ciclo greedy no slo se necesita seleccionar el nodo ms prximo en el heap, sino tambin disminuir la distancia de los restantes nodos
eliminarMinimo()
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad
las operaciones sobre los heaps de Fibonacci se diferencian de las de los heaps binomiales en dos aspectos:
mezcla perezosa: dos heaps se mezclan simplemente uniendo las forestas. Esto implica que no siempre exista un nico rbol de cada rango. Favorece el tiempo de mezcla e insercin, pero aumenta el de eliminarMinimo. cortes para mejorar el tiempo del percolate en la implementacin de eliminarMinimo. Entonces cuando un nodo tiene clave menor que el padre, se elimina cortando el subrbol y agregndolo como un rbol nuevo a la foresta. Favorece el disminuirClave, pero perjudica a eliminarMinimo cortes en cascada si un padre ha perdido ms de un hijo, lo que asegura mantener la cantidad de descendientes de todos los nodos
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
la operacin de Mezcla de dos heaps de Fibonacci, como se implementa como mezcla perezosa, slo realiza la unin de las dos forestas y calcula el nuevo mnimo
la operacin de Insercin se implementa simplemente agregado el nodo a insertar como nuevo rbol en la foresta
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
la operacin de EliminarMinimo es la encargada de restaurar la propiedad de que la foresta sea una coleccin de rboles donde existe a lo sumo uno de cada rango la implementacin utiliza un procedimiento auxiliar consolidar() que controlan que para cada rbol no existe otro de su rango si esto sucede, los mezcla y crea un rbol de rango superior
PROCEDURE EliminarMinimo() z::=this.minimo() IF z!=nil FOR cada hijo x de z agregar x a la foresta ENDFOR eliminar $z$ de la foresta this.consolidar() ENDIF RETURN z
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
la operacin disminuirClave debe implementarse en tiempo amortizado constante, por lo que no es posible hacer un percolate por el rbol se supone que el nodo x ya viene dado. Si cuando se disminuye la clave se viola la propiedad de heap, entonces el nodo es cortado del rbol al que pertenece y se inserta como un rbol independiente en la foresta para asegurar que un nodo no pierda demasiados descendientes (y por lo tanto asegurar el tiempo amortizado del eliminarMinimo), entonces se marca el nodo que pierde un hijo por primera vez si un nodo pierde un segundo hijo, entonces tambin es cortado, se agrega su subrbol como rbol independiente en la foresta, y se procede con el padre
Pablo R. Fillottrani Algoritmos y Complejidad
PROCEDURE DisminuirClave(x,k) clave[x]::=k; y::=padre[x] IF y!=nil y clave[x]<clave[y] H.corte(x,y) H.corteCascada(y) ENDIF IF clave[x]<clave[H.minimo()] H.setMinimo(x) ENDIF
Pablo R. Fillottrani
Algoritmos y Complejidad
PROCEDURE corte(x,y) eliminar x de la lista de hijos de y, actualizando su rango agregar x a la foresta marcado[x]::=false
PROCEDURE corteCascada(y) z::=padre[y] IF z!=nil IF no marcado[y] marcado[y]::=true ELSE H.corte(y,z) H.corteCascada(z) ENDIF ENDIF
una llamada a DisminuirClave tiene como costo real 1 ms la cantidad de cortes en cascada
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Ejemplos (I)
Ejemplos (II)
disminuirClave(46,15)
disminuirClave(35,5)
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Ejemplos (III)
para realizar el anlisis amortizado de esta E.D. se usa como funcin potencial:
(H ) = arboles(H ) + 2 marcados(H )
esta funcin satisface los requisitos para una funcin potencial comenzando del heap vaco
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Lema Sea x un nodo en un heap de Fibonacci tal que grado[x ] = k . Entonces para todo hijo yi , 2 i k vale que grado[yi ] i 2. Demostracin. En un Heap de Fibonacci la nica posibilidad de yi sea colocado como hijo de x es que grado[x ] = grado[yi ]. Y como yi es el i-simo hijo, en ese momento tanto x como yi tenan i 1 hijos. Luego yi pierde a lo sumo un hijo, con lo que grado[yi ] i 2.
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Teorema Lema Sean Fk los nmeros de Fibonacci, luego k=0 Fi = Fk +2 1. i Demostracin. Por induccin sobre k . Si k = 0 es trivial. Suponiendo que vale para k 1, entonces 1 k=0 Fi = k=0 Fi + Fk = (Fk +1 1) + Fk = Fk +2 1. i i se nota con des(x ) la cantidad de descendientes de un nodo x Sea x un node de un heap de Fibonacci tal que grado[x ] = k . Encontes la cantidad de descendientes de x es al menos Fk +2 . Demostracin. Por induccin sobre el rango k de x. Si k = 0 vale. Si k > 1, sean y1 , . . . , yk los hijos de x en el orden de insercin. Entonces
k k i =2
des(x )
= 1 + 1 + des(yi ) 1 + 1 + Fi =
i =2 k
= 1 + Fi = 1 + Fk +2 1 = Fk +2
i =0
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
Corolario El rango de un nodo en un heap de Fibonacci de n nodos es siempre O (log n). Demostracin. Sea x un nodo de un heap de Fibonacci tal que rango[x ] = k . Por el teorema 6, n s(x ) Fk +2 k . Luego k log O (log n). retomando el nalisis amortizado de eliminarMinimo(), sea r el grado de la raz que contiene la menor etiqueta, T la cantidad de rboles en el momento i 1 y n la cantidad de elementos almacenados
ci
usando el corolario anterior para acotar r y la cantidad de rboles despus de la consolidacin (ya que el rango mximo de un nodo es una cota de la cantidad mxima de rboles)
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad
operacin
ci
Pablo R. Fillottrani
Algoritmos y Complejidad
Pablo R. Fillottrani
Algoritmos y Complejidad