Académique Documents
Professionnel Documents
Culture Documents
Anlisis de Algoritmos a
M. Andrea Rodr guez-Tastets
Universidad de Concepcin,Chile o www.inf.udec.cl\ andrea andrea@udec.cl
Sistemas Recurrentes
I Semestre - 2008
Objetivos de la Clase Durante esta clase revisaremos anlisis de algoritmos. Se espera a que al nal de la clase los alumnos puedan: Entender el concepto de tiempo de ejecucin de un algoritmo. o Poder determinar una cota de tiempo de ejecucin de o algoritmos simples. Entender los sistemas recurrentes y aplicar anlisis de a algoritmos a ellos.
Sistemas Recurrentes
Deniciones Analizar un algoritmo es predecir cunto recurso requiere su a ejecucin. Ocasionalmente, recursos de comunicacin y o o hardware son de nteres particular, sin embargo, en la mayor a de los casos, es el tiempo de ejecucin el de mayor o nteres. El tiempo de ejecucin de un algoritmo en base a una o entrada en particular de datos es el nmero de operaciones u primitivas o pasos ejecutados. En este curso nosotros trataremos con algoritmos ecientes (polinomiales). Sin embargo, existen algunos problemas para los cuales no existe un algoritmo eciente conocido. Un subconjunto de estos casos son los llamados NP-complete problems. Esta temtica se ve en un curso de complejidad de a algoritmos.
Anlisis de a Algoritmos Sistemas Recurrentes
Anlisis de Algoritmos a
Tiempo ejecucin o n 2 n n3 2n 3n n! n = 10 0,00001 seg. 0,0001 seg. 0,001 seg. 0,001 seg. 0,059 seg. 3,63 seg n = 20 0,00002 seg. 0,0004 seg. 0,008 seg. 1 seg. 58 min. 771 siglos n = 30 0,00003 seg. 0,009 seg. 0,027 seg. 17,9 min. 6,5 aos n 8x1016 siglos n = 40 0,00004 seg. 0.0016 seg. 0.064 seg. 12,7 dias 3.855 sigles 3x1032 siglos
Modelo de Implementacin o Para realizar un anlisis de algoritmos, se requiere de un a modelo de implementacin en el cual se ejecutan nuestros o algoritmos. El modelo random access machine (RAM) considera que la ejecucin de intrucciones de algoritmos es secuencial, una o tras otra, sin operaciones concurrentes. Instrucciones son las comnmente encontradas en u computadores, para las cuales asumimos un tiempo constante. En RAM no se modela la memoria jerrquica (virtual, cache, a etc..), lo cual puede ser signicante para cierta clase de problemas.
Anlisis de a Algoritmos Sistemas Recurrentes
Considere el siguiente programa de ordenamiento, donde tk representa el nmero de veces la condicin del if es satisfecha: u o
l nea 1 2 3 4 5 6 cdigo o for i := 1 to n-1 do [ for j:= 1 to n-i do[ if A[j] > A[j+1] do [ temp:= A[j]; A[j] := A[j+1]; A[j+1] : = temp;] ] ] costo constante c1 c2 c3 c4 c5 c6 ejecuciones n Pn1 (k + 1) k=1 Pn1 k k=1 Pn1 t Pk=1 k n1 t Pk=1 k n1 t k=1 k
Sistemas Recurrentes
Para la mayor de los algoritmos que veremos en este curso, nos a interesar ver el peor caso del anlisis, es decir, el mayor tiempo a a para cualquier entrada de largo n. Las razones son las siguientes:
el peor caso es un l mite superior en tiempo de ejecucin de cualquier o entrada. As se garantiza que el algoritmo nunca tomar ms que eso; , a a para algunos casos el peor caso es bastante comn; y u el caso promedio es muchas veces tan malo como el peor caso. Por ejemplo, considere el ejemplo anterior. En promedio, uno podr estimar a que if ocurre la mitad de las veces, osea tk = k/2. Esto resulta en que la funcin T (n) sigue siendo cuadrtica para otra constante dada. o a
Sistemas Recurrentes
Ejemplo Dado el siguiente algoritmo, donde A[1:n] es un arreglo ordenado, indique qu hace y derive su complejidad. Indique el caso peor de e la complejidad.
Procedure UNKNOW (intA[1 : n],int n,int x,var int j) l := 1; u := n; while l < u do [ m := (l + u)/2 ; case [ x > A[m] : l := m + 1; x < A[m] : u := m 1; else j := m; return; ] ] j: = 0; end UNKNOW
Sistemas recurrentes
En muchos casos de algoritmos, las tcnica bsicas de conteo para conjuntos e a nitos no funcionan. Estos casos son los sistemas recursivos que usan un enfoque de ecuaciones recurrentes. Ejemplo clsico de tales funciones son la a secuencia Fibonacci.
Sistemas Recurrentes
= = =
0 1 F (n 1) + F (n 2), n > 1
Un sistema recursivo es un conjunto de condiciones de borde y ecuaciones recurrentes, las cuales especican una secuencia unica or una funcin desde N k o to R, con N siendo los naturales, R los reales y k perteneciente a los enteros positivos I +. Un solucin a un sistema recurrente es una funcin f : N k R o o que satisface las condiciones de borde y los ecuaciones de recurrencia. Ejemplo: El nmero de permutaciones de n objetos puede ser expresado u usando el sistema recurrente:
Sistemas Recurrentes
P(0) P(n)
= =
Ejemplo: sistemas recursivos Ejemplo: Considere el siguiente algoritmo que retorna la suma de los n primeros nmeros en el arreglo A. u ProcedureSUM(n) begin total 0; for i 1 to n step 1 do total total + A[i]; return total; end
Asuma que denimos la complejidad de SUM como el nmero de u sumas realizadas. Esta funcin es caracterizada por el siguiente o sistema recursivo o recurrente:
Un tipo especial de sistemas recursivos en algoritmos, son los llamados algoritmos que dividen para conquistar. Estos algoritmos dividen el problema en problemas ms pequeos, resuelven estos a n sub problemas y los combinan para obtener la solucin global. Este o tipo de enfoque de algoritmos es usualmente implementado como un sistema recursivo, ya que en muchos casos, los subproblemas son equivalentes al problema general.
Los casos de algoritmos de este tipo que veremos cumplen las siguientes restricciones: 1. El costo de resolver un problema de tamao n = 1 es c, n donde c es una constante no negativa. 2. Para k > 0, problemas de tamao n = b k son divididos en a n diferentes problemas de tamao n/b n 3. Para todos los problemas de tamao n > 1, el costo de n dividir el problema en subproblemas ms el costo de a combinar las soluciones para obtener la solucin al problema o original es h(n), una funcin de n. o
Sistemas Recurrentes
Estas condiciones producen problemas de la siguiente forma: f (1) = c, f (n) = af (n/b) + h(n), n = b k , k > 0
Determinacin de Costo de Recurrencia o En general, determinar el costo de una recurrencia se hace por: Mtodo de sustitucin e o Mtodo del rbol recursivo e a
Mtodo de Sustitucin e o El mtodo de sustitucin utiliza dos pasos: e o Proponer una forma de solucin. o Hacer un prueba por induccin para encontrar las constantes o y mostrar que la solucin funciona. o
Induccin matemtica o a Probar que funciona para P(1) Probar que si P(1) . . . P(n) son ciertas, entonces tambin e funciona para P(n + 1), con n cualquier entero positivo.
Estructura de Datos
Ejemplo de sustitucin o Considere el caso de una recurrencia T (n) = 2T ( n/2 ) + n, y asumamos una solucin T (n) = O(nlogn). o La idea entonces es probar que T (n) cnlgn para un c > 0. Haciendo induccin: o Asumimos que se cumple para n/2 , esto es T ( n/2 ) = c n/2 log ( n/2 ) Luego por sustitucin: o T (n) con c 1. 2(c n/2 log ( n/2 )) + n cnlog (n/2) + n cnlogn cnlog 2 + n cnlogn cn + n cnlogn
Ejemplo de sustitucin (cont..) o La induccin requiere que se pruebe que la solucin funciona para o o las condicions de borde. Si asumimos que T (1) = 1 es la condicin o de borde, pero T (n) cnlogn nos da que T (1) c1lg 1 = 0, una contradiccin. o Sin embargo, podemos hacer que T (n) cnlogn sea verdadero para algn n n0 . Entonces lo que debemos hacer es denir por u ejemplo para un n0 = 2, cul ser la constante c adecuada. a a As hemos extendido la condicin de borde. o
Sistemas Recurrentes
T(n/4)
T(n/4)
T(n/4)
c(n/4)2
c(n/4)2
c(n/4)2
.........
.........
.........
.........
.........
.........
.........
.........
.........
............
Mtodo del rbol recursivo e a En un rbol recursivo, cada nodo representa el costo de un a subproblema dentro del proceso recursivo. Se suma el costo de cada nivel del rbol para obtener el costo por nivel y luego se a suman los costos por niveles. Estos mtodos son especialmente e utiles cuando se usan en algoritmos que dividen para conquistar.
Estructura de Datos
Mtodo del rbol recursivo (cont...) e a El tiempo de ejecucin estimado para la recurrencia o T (n) = 3T (n/4) + cn2 es:
cn2 cn2
c(n/4)2
c(n/4)2
c(n/4)2
3/16 cn2
.........
.........
.........
.........
.........
.........
.........
.........
.........
............
O(nlog43)
Total : O(n2)
Teorema Maestro
Teorema: Sea a y b enteros tal que a 1 y b > 1, y sea T : N R la funcin recurrente: o aT (n/b) + f (n), n = b k , k > 0
T (n)
donde n/b es n/b o n/b , entonces: Si f (n) = O(nlogb a ), para alguna constante acotada por (nlogb a ). > 0, entonces T (n) es
Si f (n) = O(nlogb a ), entonces T (n) es acotada por (nlogb a logn). Si f (n) = (nlogb a+ ), para alguna constante > 0, si af (n/b) cf (n) para un c < 1 entonces f (n) y si n es sucientemente grande, entonces T (n) es acotada por (f (n)).
Se dene la complejidad de este algoritmo como T (n), con T (n) el nmero de u comparaciones entre elementos del arreglo cuando A tiene n entradas. El siguiente sistema recurrente describe la funcin T para cada argumento o potencia de 2:
T (1) T (n) = = c1 , 2f (n/2) + c2 , n = 2 , k > 0
k
Ejercicios
Use el teorema Maestro par determinar las cotas de las siguientes funciones de costo computacional:
Sistemas Recurrentes
Ejercicios (cont...)
Considere el siguiente algoritmo con un arreglo A[1.. n] : Procedure XX (A, i, j) begin if j i then return XX (A, i, (i + j)/2 ); XX (A, (i + j)/2 + 1, j); for k = i to j do for l = k + 1 to j do if (A[k] < A[l]) then temp := A[k]; A[k] := A[l]; A[l] := temp; endif enddo enddo end Indique lo que hace el algoritmo y d su tiempo de ejecucin estimado em e o funcin del largo del arreglo A (n). o
Ejercicio para llevar Escriba un algortimo que realiza la multiplicacin de matrices con o recurrencia (divida para conquistar). Analice el costo de este algoritmo en comparacin a un algoritmo normal de multiplicacin o o de matrices.