Algoritmos y problemas Análisis asintótico de algoritmos ! Cada algoritmo resuelve a un problema particular ! Hay varias maneras de resolver un problema ! Algunas maneras son buenas y otras son malas ! El propósito del análisis de algoritmos es identificar los algoritmos buenos Log Lo Exponentes logb x b Repaso matemático Logaritmos Logaritmos Loga = x donde x donde > 0 x >logarítmica blog x = x 0 Función b b =1 y x = y, by = x Si logb xb = =Si y,x log b donde x=>x bb = > 0 xb > 0 = x donde x > 0 bx0donde = xxdonde b1 = b Se define que log 1 = 0 logb x 0 b a+c logb x logb x logb x y y Si logb x = y, by = x Si logb x = y,Sibylog =bxxSi = y, b = x log x = y, b = x b Se define que logb 1 = 0 define que logb 1 = 0 Se define que 1 Se = que 0define Selog define logbque 1 = log 0 Se 1= 0 bb logb (x) logblog (x) ! (x)log (x) log b Cambios de base: = . b (x) = b (x) log de. base: Cambios deCambios base: log = delog b. Cambios de base: =log Cambios base: log (x) = . ! b (x) b !(x) (x) b ! !) logb (b ) logbb(blog ) log b (b b (b ) a c =b b ! bac = (ba )c ! 1 "a −a b = b = b ! ! ! Cambios de base: logb! (x) =Es inyectiva:! log. x = log y =⇒ Es inyectiva:Es loginyectiva: x =Eslog y =⇒ x log = log x= logy xy = =⇒ y )x = y inyectiva: logx y= =⇒ log Es inyectiva: log x=y b (b 1 b x = logb y =⇒ b ba b b bb b b b > yy=⇒ logb x Es creciente:Esx creciente: > y =⇒ logxb > x> log yEs y =⇒ xcreciente: >log logbbxy >xlog Es creciente: x b>log y b=⇒ b Es creciente: > y y=⇒ logbxx = > log by Es inyectiva: logb x = xlog =⇒ y b Logaritmos Logaritmos Logaritmos Logaritmos Logaritmos Logaritm 10 Propiedades Ejemplos de bases 9 8 ón: logb (x · y)Multiplicación: = logb x + log y b log (x · y)y==loglogxb+x log + 10log bx(x by Multiplicación: log · y) y Multiplicación: log (x · y) = log + log b b b 7 b b ! " !! b" 9 Multiplicación: logb (x · y)! ="log "yb b x + log x xx ! " 6 x 8 División: log logb bxx−−loglog gbDivisión: = log División: xlog − log=blog yybbxb −yylogb==y log División: log b yb y y log x b = logb xy − log b y b b 5 Potencia: logb x = c logb x cc 4 x logb xx = cclog Potencia: logb xc = cPotencia: logb x c bb x Potencia: log = log b ogb x = En c log x logb y logb x b log y 3 el exponente: x = y logb x y logb x b En el exponente: x En = elyexponente: xlog logb b2y= y log n # x = y bx logb y En# logexponente: x nel b n nente: x Factorial: =log y (n!) = logb i # 1 Factorial: logb (n!) = b logb i i=1 n 0log i 200 # Factorial: logb (n!) = b n i=1 # Factorial: logb (n!) = i=1 logb i logb i b=2 b=e b = 10 7 c ogb (n!) = b=2 b=e b = 10 6 5 4 3 400 2 600 800 1000 1 0 200 400 600 800 i=1 Análisis de algoritmos– p. 16 Análisis de algoritm Análisis de algoritmos– p. 17 Análisis de algoritmos– p. 17 Análisis de algoritmos ! Intento 1000 i=1 Calidad de algoritmos Análisis de algoritmos– p. 17 Análisis de algoritmos– p. 17 de caracterizar el algoritmo en ! Tiempo total de computación términos de la cantidad de computación y ! Número de operaciones realizadas por el algoritmo memoria que se necesita para resolver unAnálisis de algoritmos– p. 17 ! Número de transiciones tomadas por la Máquina Turing que ejecuta el algoritmo problema ! Cantidad de memoria utilizada ! La moneda tiene dos caras: la dificultad del ! Número y tamaño de las variables problema y la eficiencia del algoritmo en ! Posición extrema a la derecha que se llega a visitar en la cinta de la Máquina Turing durante la ejecución resolverlo Operaciones básicas ! ! Cuando el algoritmo está expresado en pseudocódigo, no lo vamos a convertir en una Máquina Turing Buscamos contar la cantidad de las operaciones básicas que contiene el algoritmo ! Aritmética simple ! Lógica simple ! Comparaciones simples ! Asignaciones simples ! Saltos Instancias Entrada ! ! ! No todas las instancias son iguales en términos de dificultad de su resolución. Por ejemplo, la Máquina Turing de incremento unitario toma una cantidad diferente de transiciones cuando está presentado con entradas diferentes. El tamaño de la entrada evidentemente afecta, pero también afecta su estructura. La teoría clásica de complejidad computacional se formula en términos del tamaño de la instancia. Salida Para cada problema, hay varias instancias que son los datos particulares de entrada del problema. Dificultad de instancias ! A Tamaño de la instancia ! Para llegar a comparabilidad, uno busca siempre calcular el tamaño de instancia en los mismos términos ! La manera más confiable es convertir todo en binario y luego contar los bits ! La manera más fácil depende del problema, pero es típicamente natural y evidente Complejidad de peor caso ! ! Complejidad asintótica Fijamos el tamaño de la instancia ! ! ! Ejemplo: cantidad de bits Denotamos el tamaño de instancia con n Calculamos el número de operaciones y el consumo de memoria para varios diferentes Buscamos la instancia de ese tamaño que es la más difícil ! valores de n Ejemplo: que tenga un solo cero al inicio ! Contamos las operaciones requeridas y el consumo de memoria para este peor caso ! Otras opciones incluyen la complejidad del caso promedio y la complejidad amortizada ! Graficamos el desempeño del algoritmo en función de n ! Buscamos a una función simple que nos de una cota superior al comportamiento observado 2.3. CALIDAD DE ALGORITMOS 29 1e+07 f(x) = ex Clases de magnitudes 1e+06 Ejemplos de funciones 100000 10000 ! ! f(x) = 2x f(x) = x3 1000 Buscamos agrupar las posibles funciones de complejidad según100su rapidez f(x) = x2 f(x) = x log2(x) f(x) = x f(x) = log2(x) 2.3. CALIDAD DE ALGORITMOS 10 Necesitamos una notación matemática para 1 expresar que una función dada se comporta en 0.1 1 2 3 4 5 6 el largo plazo de manera parecida a otra 1e+07 f(x) 1e+06 f(x) f(x) 100000 7 8 9 10000 10 11 12 13 14 f(x) f(x) = x log 15 1000 ! La palabra asintótica refiere al comportamiento Figura 2.1: Crecimiento de algunas con grandes valores f(x) f(x) = log 100 funciones comúnmente encontrados en el análisis de algoritmos. Nota que el ordenación según magnitud cambia al comienzo, pero para valores suficientemente grandes ya no hay cambios. 10 1 0.1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Figura 2.1: Crecimiento de algunas funciones comúnmente encontrados en de algoritmos. Nota que el ordenación según magnitud cambia al comienzo, Cuadro 2.1: En la tabla (originalmente de [10]) se muestra para diferentes valores de n el tiempo de ejecución (en segundos (s), minutos (min), horas (h), dı́as (d) o años (a)) para un algoritmo necesita exactamente f (n) operaciones básicas del procesador para encontrar solución y el procesador es capaz de ejecutar un millón de instrucciones por segundo. Si el tiempo de ejecución es mayor a 1025 años, lo marcamos simplemente como ≈ ∞, mientras los menores a un segundo son ≈ 0. El redondeo con tiempos mayores a un segundo están redondeados a un segundo entero mayor si menos de un minuto, al minuto entero mayor si menores a una hora, la hora entera mayor si menores a un dı́a, y el año entero mayor si medidos en años. Ejemplos de tiempos f (n) (→) n (↓) 10 30 50 100 1000 10000 100000 1000000 n n log2 n n2 n3 1, 5n 2n n! ≈0 ≈0 ≈0 ≈0 ≈0 ≈0 ≈0 1s ≈0 ≈0 ≈0 ≈0 ≈0 ≈0 2s 20 s ≈0 ≈0 ≈0 ≈0 1s 2 min 3h 12 d ≈0 ≈0 ≈0 1s 18 min 12 d 32 a 31710 a ≈0 ≈0 11 min 12, 892 a ≈∞ ≈∞ ≈∞ ≈∞ ≈0 18 min 36 a 1017 años ≈∞ ≈∞ ≈∞ ≈∞ 4s 1025 a ≈∞ ≈∞ ≈∞ ≈∞ ≈∞ ≈∞ Crecimiento asintótica Crecimiento asintótica Definiciones Para funciones f : Z+ → R y g : Z+ → R, escribimos Para funciones f : Z+ → R y g : Z+ → R, escribimos f (n) ∈ O (g(n)) si ∃c > 0 tal que |f (n)| ≤ c |g(n)| para fsuficientemente (n) ∈ O (g(n)) si grandes ∃c > 0 tal valores que |f (n)| de≤n c |g(n)| para suficientemente grandes valores de n f (n) ∈ Ω (g(n)) si ∃c > 0 tal que |f (x)| ≥ c |g(x)| para f (n) ∈ Ω (g(n)) si ∃c > 0 tal que |f (x)| ≥ c |g(x)| para suficientementegrandes grandes valores suficientemente valores de de n n ! (n) ∈∈ΘΘ(g(n)) (g(n))sisi∃c,∃c, 0 tales ff(n) c! c> > 0 tales queque ! ! |g(x)|≤≤|f|f(x)| (x)|≤≤c c· |g(x)| · |g(x)| para suficientemente cc ·· |g(x)| para suficientemente grandesvalores valoresdeden n grandes Algoritmos y problemas– p. 31 Algoritmos y problemas– p. 31 Propiedades Propiedades Interpretación Interpretación Interpretación O (f (n)) es una cota superior asintótica al tiempo de ejecución O (f (n)) es una cota superior asintótica al tiempo Ω (f (n)) es una cota inferior asintótica de ejecución Θ (f (n)) las cota dos funciones Ω (fdice (n)) que es una inferior crecen asintótica asintóticamente iguales Θ (f (n)) dice que las dos funciones crecen asintóticamente iguales El símbolo ∈ se reemplaza frecuentemente con =. El símbolo ∈ se reemplaza frecuentemente con =. Propiedades Las definiciones de crecimiento asintótica se generalizan Las definiciones crecimientomúltiples asintótica se generalizan para funciones dede argumentos y son transitivas: Propiedades para funciones de argumentos múltiples y son transitivas: (f (n) ∈ O (g(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n) ∈ O (h(n)) . Las ∈ definiciones crecimiento asintótica⇒sefgeneralizan (f (n) O (g(n))de ∧ g(n) ∈ O (h(n))) (n) ∈ O (h(n)) . para funciones de argumentos múltiples y son transitivas: (f (n)(f ∈ ∈OΩ(h(n))) (h(n))) (n) ∈ Ω (h(n)) (n)Ω∈(g(n)) O (g(n))∧∧g(n) g(n) ∈ ⇒⇒ f (n)f ∈ O (h(n)) . (f (n) ∈ Ω (g(n)) ∧ g(n) ∈ Ω (h(n))) ⇒ f (n) ∈ Ω (h(n)) Como este aplica para Ω (f (n)) y O (f (n)) los dos, aplica (f (n) aplica ∈ también Ω (g(n)) ∧ g(n) ∈Θ Ω (h(n))) (n) ∈los Ω (h(n)) Como este para Ω (f (n)) y O⇒ (ff(n)) dos, aplica por definición para (f (n)). por definición también para Θ (f (n)). Como este aplica para Ω (f (n)) y O (f (n)) los dos, aplica por definición también para Θ (f (n)). Algoritmos y problemas– p. 33 Algoritmos y problemas– p. 33 Algoritmos y problemas– p. 33 Algoritmos y problemas– p. 32 Polinomios Polinomios Es fácil formar O (f (n)) de polinomios y muchas otras Polinomios expresiones por observar que en una suma, el término En una sumatoria, el término mayor domina: mayor domina el crecimiento: (f (n) O (h(n)) ∧ (n)) g(n) de ∈O (h(n))) ⇒yfmuchas (n)+g(n)otras ∈ O (h(n)) Es fácil∈formar O (f polinomios expresiones por observar que en una suma, el término mayor domina el crecimiento: g(n) ∈ O (f (n)) ⇒ f (n) + g(n) ∈ O (f (n)) (f (n) ∈ O (h(n)) ∧ g(n) ∈ O (h(n))) ⇒ f (n)+g(n) ∈ O (h(n)) Todos los términos menores se ignoran: Logaritmos Logaritmos Para cualquier base b > 0 y cada x > 0 tal que x ∈ R, aplica que logb (n) ∈ O (nx ). Cambiando la base de un logaritmo, llegamos a tener loga (n) = 1 logb (n) ∈ Θ (logb n) , logb (a) porque logb (a) es un constante. Entonces no hay necesidad de marcar la base en una Primera tarea para entregar expresión de complejidad asintótica con logaritmos. g(n) ∈ O (f (n)) ⇒ f (n) + g(n) ∈ O (f (n)) Algoritmos y problemas– p. 34 Algoritmos y problemas– p. 35 as funciones siguientes según su crecimiento Practicamos co O (fi (n)) de la menos rápida a la más rápida: Algoritmos y problemas– p. 34 f1 f2 f3 f4 = = = = n 7 nn n7 n log7 n f5 f6 f7 f8 √ = n = log7 n = 7log7 n = 700n