Análisis Amortizado sobre las Operaciones de Tablas Dinámicas (Sección 17.4 de Cormen, segunda edición) Rafael Angarita Contenido Introducción Expansión de Tablas Expansión y Contracción de Tablas Conclusión Introducción El análisis amortizado estudia el tiempo requerido para ejecutar una secuencia de operaciones sobre una estructura de datos. El análisis amortizado no involucra probabilidades y garantiza el tiempo en el peor caso de las n operaciones. Introducción Técnicas principales de Análisis Amortizado: Método contable Método del potencial Introducción No siempre podemos saber con anterioridad cuantos objetos vamos a guardar en una tabla. Estudiaremos el problema de expandir y contraer tablas dinámicamente. Mostraremos que el costo amortizado de insertar y eliminar es O(1) Veremos como garantizar que el espacio no usado de una tabla nunca exceda una fracción constante del espacio total. Introducción Asumiremos que las operaciones soportadas son: TABLE-INSERT y TABLE-DELETE. Los detalles del método de estructuración de datos usados para organizar la tabla no son importantes. Factor de Carga Definimos el factor de carga α(T) de una tabla T no vacía como el número de ítems guardados en la tabla dividido entre el tamaño de la tabla. α(T) = 3/4 •Una tabla vacía tiene tamaño 0 y factor de carga 1. •El factor de carga está acotado inferiormente por una constante. Expansión de Tablas Supongamos que el almacenamiento de una tabla es asignado como un arreglo de casillas. Una tabla está llena cuando todas sus casillas han sido usadas o, equivalentemente, cuando su factor de carga es 1. Expansión de Tablas Cuando un ítem es insertado en una tabla llena, podemos expandir la tabla almacenando una nueva tabla con más casillas que la anterior. Expansión de Tablas Una heurística común es asignar una nueva tabla que tiene el doble de casillas que la tabla anterior. Si se realizan sólo inserciones, el factor de carga de una tabla es siempre al menos 1/2. La cantidad de espacio desaprovechado nunca excede la mitad del espacio total en la tabla. 1. Secuencia de inserciones en una tabla T 2. 3. 4. 5. 6. Algoritmo TABLE-INSERT T: objeto representando la tabla table[T]: puntero al bloque de almacenamiento representando la tabla num[T]: número de ítems en la tabla size[T]: número de casillas de la tabla Algoritmo TABLE-INSERT Expansión de Tablas Tenemos dos procedimientos de inserción: TABLE-INSERT y la inserción elemental. Una inserción elemental tiene costo 1. Asumimos que el tiempo de ejecución de TABLE-INSERT es linear, tal que el costo de asignar una tabla inicial es constante y el costo de asignar y liberar almacenamiento es dominado por el costo de transferir ítems. Expansión de Tablas n Operaciones TABLE-INSERT, cual es el costo ci de la i-ésima operación? Si la tabla está vacía, ci = 1. Si la tabla está llena, ci = i : costo 1 de la inserción elemental más el costo de los i-1 ítems que deben ser copiados. Si n operaciones son realizadas, el peor caso es O(n), lo que nos lleva a una cota superior de O(n2) para el tiempo total de n operaciones. Expansión de Tablas i=5 • Copiar elementos del 1 al 4 e insertar el 5to Expansión de Tablas La cota superior O(n2) no es ajustada, porque la expansión no sucede con frecuencia en n TABLE-INSERT. La i-ésima operación causa una expansión cuando i-1 es potencia exacta de 2. El costo de la i-ésima operación es: Expansión de Tablas Entonces, el costo total de n operaciones TABLE-INSERT es: Ya que hay a lo sumo n operaciones que cuestan 1 y el costo de las operaciones restantes forman una serie geométrica. El costo total es 3n, por lo tanto el costo amortizado de una operación individual es 3. Método de Contabilidad Cada objeto debe pagar por 3 inserciones elementales: Insertarse a sí mismo. Moverse a sí mismo cuando la tabla se expanda. Mover otro ítem que ya ha sido movido una vez cuando la tabla es expandida. Método de Contabilidad Supongamos que el tamaño de la tabla es m inmediatamente después de una expansión. Número de ítems m/2. Cobramos 3 Bs. por cada inserción. 1 Bs. para la inserción que ocurre inmediatamente. 1 Bs. de crédito para el ítem insertado. 1 Bs. de crédito para alguno de los m/2 ya en la tabla. Método de Contabilidad Llenar la tabla requiere m/2 -1 inserciones adicionales. Para el momento que la tabla tiene m ítems, cada ítem tiene un Bs. para pagar por su reinserción durante la expansión. Método de Contabilidad Crédito:0 Crédito:8 Cuando se realice la próxima expansión, tenemos crédito suficiente para pagar por la reinserción de todos los ítems de la tabla. Método del Potencial Definimos una función potencial Φ que es 0 inmediatamente después de una expansión. Φ(T)= 2× num[T] - size[T] • Después de una expansión: num[T]= size[T]/2 y Φ(T)=0. • Antes de una expansión: num[T]= size[T] y Φ(T)= num[T]. Método del Potencial Si TABLE-INSERT no causa una expansión (sizei = sizei-1): Método del Potencial Si TABLE-INSERT causa una expansión: sizei = 2×sizei-1 sizei-1 = numi-1 = numi-1 sizei = 2× numi-1: Expansión y Contracción de Tablas Una estrategia es duplicar el tamaño de la tabla cuando un ítem es insertado en una tabla llena y dividir el tamaño de la tabla por la mitad cuando una eliminación haría que la tabla esté llena menos de la mitad. Expansión y Contracción de Tablas Realizamos n operaciones sobre una tabla T, siendo n potencia exacta de 2. Las primeras n/2 operaciones son inserciones, con un costo total de Φ(n). Para las n/2 operaciones restantes, realizaremos la siguiente secuencia: Siendo n =8, después de realizar las primeras n/2 operaciones tenemos la tabla: • Siguiendo la secuencia: I,D,D,I,I,D,D,…, I: D,D: I,I: Expansión y Contracción de Tablas El costo de cada expansión y contracción es Θ(n), y hay Θ(n) de ellas. Entonces, el costo total de n operaciones es Θ(n2) y el costo amortizado de una operación es Θ(n). Después de una expansión, no realizamos suficientes eliminaciones para pagar por una contracción. De la misma manera, después de una contracción, no realizamos suficientes inserciones para pagar por una expansión. Estrategia mejorada Duplicamos el tamaño de la tabla cuando un ítem es insertado en una tabla llena. Dividimos el tamaño de la tabla por la mitad cuando la eliminación de un ítem haga que la tabla quede llena menos de 1/4. El nuevo límite inferior del factor de carga está acotado por la constante 1/4. Después de una expansión, el factor de carga de la tabla es 1/2. Una expansión sólo ocurre cuando el factor de carga sería mayor que 1. Método del Potencial Analizaremos el costo de una secuencia de n operaciones TABLE-INSERT y TABLE-DELETE. Definimos una función potencial Φ que es 0 inmediatamente después de una expansión o contracción y se construye a medida que el factor de carga incrementa a 1 o disminuye a 1/4. Método del Potencial Factor de carga de una tabla no vacía T : α(T) = num[T]/ size[T]. Ya que para una tabla vacía, num[T] = size[T] = 0 y α[T]=1, siempre tenemos que num[T]= α(T) × size[T] Análisis ci el costo actual de la i-ésima operación. costo amortizado con respecto a Φ. numi el número de ítems guardados en la tabla después de la i-ésima operación. sizei el tamaño de la tabla después de la i-ésima operación. αi el factor de carga de la tabla después de la i-ésima operación. Φi el potencial después de la i-ésima operación. Inicialmente num0 = size0 =0, α0 =1 y Φ0 =0. Si la i-ésima operación es TABLE-INSERT Si αi-1 ≥ 1/2, si la tabla se expande o no, el costo amortizado será a lo más 3. Si αi-1 < 1/2, la tabla no se puede expandir a causa de una operación, ya que una expansión ocurre sólo cuando αi-1 =1. Si αi < 1/2 también, el costo amortizado de la i-ésima operación es: Por lo tanto, el costo amortizado de TABLE-INSERT es a lo sumo 3. Si la i-ésima operación es TABLE-DELETE numi = numi-1-1. Si αi-1 < 1/2, debemos considerar si la operación causa una contracción. Si no la causa, entonces sizei = sizei-1 y el costo amortizado de la operación es: Si αi-1 < 1/2 y la i-ésima operación causa una contracción, entonces el costo actual de la operación es ci = numi + 1, ya que eliminamos un ítem y movemos numi ítems. Tenemos sizei/2 = sizei-1/4 = numi-1 = numi+1, y el costo amortizado de la operación es: Tarea Análisis cuando la i-ésima operación es TABLE-DELETE y αi-1 ≥ 1/2. Conclusión En resumen, debido a que el costo amortizado de cada operación está limitado superiormente por una constante, el tiempo real de una secuencia de n operaciones en una tabla dinámica es O(n). Fin de la Presentación