Você está na página 1de 20

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Anlisis Amortizado de Estructuras de Datos

Algoritmos y Complejidad
Anlisis Amortizado de Estructuras de Datos

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pablo R. Fillottrani
3 Depto. Ciencias e Ingeniera de la Computacin Universidad Nacional del Sur 4

Primer Cuatrimestre 2011

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado


los resultados del anlisis amortizado sirven para optimizar el diseo de la estructuras de datos, produciendo entonces estructuras de datos avanzadas si las operaciones sobre una estructura de datos se llaman en una secuencia conocida entonces conviene minimizar el tiempo de sus operaciones mediante el anlisis amortizado la E.D. conjuntos disjuntos al utilizar compresin de caminos est aplicando esta metodologa, obteniendo una cota O (N log n) para las N operaciones.

existen diversas tcnicas para realizar el anlisis amortizado:

Tcnicas de Anlisis Amortizado

mtodo del agregado


mtodo contable

mtodo del potencial

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Mtodo del potencial

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

(ci + (Di ) (Di 1 )) = ci + (DN ) (D0 )

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Anlisis amortizado de las operaciones

sea s la cantidad de elementos despus de i 1 operaciones. para la operacin Apilar:

para la operacin Desapilar:

ci = ci + (Di ) (Di 1 ) = 1 + (s 1) s = 0 (1)


en todos estos casos el anlisis amortizado no mejora la cota de la secuencia de operaciones obtenida con N veces el peor caso

ci = ci + (Di ) (Di 1 ) = 1 + s + 1 s = 2 (1)


para la operacin Tope:

ci = ci + (Di ) (Di 1 ) = 1 + s s = 1 (1)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Contador binario
para la operacin DesapilarMltiple(k ), con k s:

ci = ci + (Di ) (Di 1 ) = k + s k s = 0 (1)


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

ci = ci + (Di ) (Di 1 ) = s + 0 s = 0 (1)


este anlisis amortizado permite armar que N operaciones sobre esta E.D. lleva tiempo en (N ) en el peor caso

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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

= ci + (Di ) (Di 1 ) = (1 + t ) + (s t + 1) (s) = 2 (1)

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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:

(Ti ) = 2 Ti .elementos Ti .tamao


vale que (Ti ) (T0 ) si se comienza con la tabla vaca

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

el anlisis amortizado para una insercin es:


sin expansin

Comparacin

ci

= ci + (Ti ) (Ti 1 ) = = 1 + (2 (elemi 1 + 1) tami 1 ) (2 elemi 1 tami 1 ) = = 1 + 2 = 3 (1)

con expansin

ci

= = =

ci + (Ti ) (Ti 1 ) = 1 + elemi 1 + (2 (elemi 1 + 1) 2 tami 1 )

(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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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 ) =

2 Ti .elementos Ti .tamao Ti .tamao/2 Ti .elementos

si (T ) 0, 5 si (T ) < 0, 5

esta funcin cumple con los requerimientos de una funcin potencial

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

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 + (Ti ) (Ti 1 ) = 1 + (tami 1 /2 (elemi 1 1)) (tami 1 /2 elemi 1 ) = 1 + 1 = 2 (1)

ci

= ci + (Ti ) (Ti 1 ) = 1 + (tami 1 /2 (elemi 1 + 1)) (tami 1 /2 elemi 1 ) = 1 1 = 0 (1)

con contraccin

y si (Ti 1 ) < 0, 5 pero (Ti ) 0, 5 entonces:

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Pila extendida Contador binario Tablas dinmicas

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

insercin y eliminarMinimo se implementan en base a mezclar

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

la operacin mezclar tiene una implementacin particular

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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.

= p1 + l1 + p2 + l2 + (T3 ) (T1 , T2 ) p1 + l1 + p2 + l2 p1 p2 + l1 + l2 = 2(l1 + l2 ) O (log n1 + log n2 ) = O (log n)

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Comparacin heaps con mezcla

Propiedades rboles Binomiales (I)


Lema

operacin

crearHeap() minimo() insertar(x) eliminarMinimo() mezclar(H1, H2) disminuirClave(x,k) eliminar(x)

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)

Sea Bk el rbol binomial de grado k , entonces


1 2

Bk tiene 2k nodos Bk tiene altura k en Bk existen exactamente k i nodos de profundidad i

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Propiedades rboles Binomiales (II)

Operaciones Heaps Binomiales

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Ejemplo eliminarMinimo() (I)


PROCEDURE consolidar() array grados[1..n]::=0 FOR cada raz w de un rbol de la foresta d::=w.grado(); x::=w WHILE grados[d]!=0 y::=grados[d] IF x.clave()>y.clave() intercambiar(x,y) ENDIF unir x e y en x grados[d]::=0; d++ ENDWHILE grados[d]::=x ENDFOR actualizar mnimo
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Ejemplo eliminarMinimo() (II) - consolidar

Ejemplo eliminarMinimo() (III) - consolidar

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Ejemplo eliminarMinimo() (IV) - consolidar

Ejemplo eliminarMinimo() (V) - consolidar

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Ejemplo eliminarMinimo() (VI) - consolidar

Ejemplo eliminarMinimo() (VII) - consolidar

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Ejemplos (I)

Ejemplos (II)

disminuirClave(46,15)

disminuirClave(35,5)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Ejemplos (III)

Anlisis amortizado de las operaciones

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

en la operacin insertar se agrega un rbol y los nodos marcados no cambian, luego:

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.

ci = ci + (Hi ) (Hi 1 ) = (1) + 1 (1)


en la operacin mezcla la cantidad de rboles y nodos marcados no cambian:

ci = ci + (Hi ) (Hi 1 ) = (1) + 0 (1)


para la operacin eliminarMinimo sern necesarias algunas propiedades, que veremos a continuacin

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

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

el costo real de la operacin es T + r , y los nodos marcados no cambian

ci

= ci + (Hi ) (Hi 1 ) = T + r + O (log n) T r + O (log n) O (log n) + O (log n) O (log n)

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

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Tipos de anlisis amortizado Ejemplos simples Heaps asimtricos Heaps de Fibonacci

Comparacin heaps con mezcla


en la operacin disminuirClave el costo real es 1 ms la cantidad de cortes en cascada C sea M la cantidad de nodos marcados antes de la operacin. La cantidad de rboles aumenta en 1 + C, C nodos marcados dejan de serlo, y un nodo no marcado pasa a marcado
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)

operacin

ci

= ci + (Hi ) (Hi 1 ) 1 + C + (T + 1 + C + 2(M C + 1)) (T + 2M ) = = 4 (1)

crearHeap() minimo() insertar(x) eliminarMinimo() mezclar(H1, H2) disminuirClave(x,k) eliminar(x)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Você também pode gostar