Recurrencias y cómo resolverlas Algoritmos y Estructuras de Datos II Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 8 de septiembre de 2017 Algo2 (DC-FCEyN-UBA) Recurrencias 1 / 11
Hoy en Algo 2 1 Recurrencias 2 Cómo resolverlas Método de sustitución Método del árbol de recursión Teorema Maestro 3 Repaso Algo2 (DC-FCEyN-UBA) Recurrencias 2 / 11
Qué son? Recurrencias Una relación de recurrencia es una ecuación que define una secuencia recursiva, donde cada término queda definido a partir de términos anteriores. Generalmente resolver una relación de recurrencia implica encontrar una fórmula cerrada para sus términos. Llamamos recurrencia a la complejidad de un algoritmo que se llama a sí mismo. Naturalmente estas complejidades quedan definidas recursivamente. Y cuando buscamos resolver una recurrencia, nos permitimos cierto grado de error, es decir buscamos f(n) tal que T(n) f(n) (a diferencia de T(n)=f(n) ). Veamos un ejemplo... Algo2 (DC-FCEyN-UBA) Recurrencias 3 / 11
Para qué nos sirven? Recurrencias Queremos un algoritmo que calcule el factorial de un número. Factorial(in n: nat) res:nat 1. if n = 0: 2. res 1 3. else: 4. res n Factorial(n 1) Nuestra complejidad quedará entonces definida como T(0) = c 1 T(n) = T(n 1) + c 2 Algo2 (DC-FCEyN-UBA) Recurrencias 4 / 11
Método de Sustitución Cómo resolverlas Método de sustitución El método de sustitución consiste en demostrar por inducción, expandiendo la fórmula, que para cierta f(n) se cumple que para todo n, T(n) f(n). Probemos entonces que la recurrencia de Factorial, T(n), es menor o igual a cierto f(n). Por instinto, creemos que T(n) = O(n) (T(n) es lineal), es decir que queremos que f(n)=cn, para cierta constante c. Al pizarrón! Algo2 (DC-FCEyN-UBA) Recurrencias 5 / 11
Cómo resolverlas Método de sustitución Veamos otra recurrencia: T(n) = T(n/2) + O(log n) Demuestren que T(n) = O(log 2 n) El que termine muestre que T(n) = T(n/2) + 1 Θ(logn) T(n) Θ(logn) T(n) O(logn) T(n) Ω(logn) Algo2 (DC-FCEyN-UBA) Recurrencias 6 / 11
Cómo resolverlas Método del árbol de recursión Método del árbol de recursión El método del árbol de recursión consiste en describir el flujo del algoritmo cómo un árbol, donde cada nodo representa el costo de cada subproblema, luego sumamos cada nivel y por último todos los niveles, para asi conseguir una posible f(n) tal que T(n) f(n), que generalmente demostraremos correcta con el método de sustitución. Si quieren ver una resolución de un problema de este estilo, el Cormen tiene una buenísima Algo2 (DC-FCEyN-UBA) Recurrencias 7 / 11
Cómo resolverlas Teorema Maestro (repaso) Teorema Maestro Sea T(n) = { c if n < d, at(n/b) + f(n) if n d, donde a 1, b > 1, y d son enteros y c es una constante positiva. Caso 1 f(n) es menor que n log ba : Si f(n) O(n log ba ɛ ), para algún ɛ > 0, entonces T(n) Θ(n log ba ) Caso 2 f(n) es similar a n log ba : Si f(n) Θ(n log ba log k (n)), para algún k 0, entonces T(n) Θ(n log ba log k+1 (n)) Caso 3 f(n) es mayor que n log ba : Si f(n) Ω(n log ba+ɛ ), para algún ɛ > 0, y además para algun k < 1 y n suficientemente grandes, af(n/b) kf(n), entonces T(n) Θ(f(n)) Nota: en el caso 2, en principio estamos dando ejemplos sólo con k = 0, esto es: Si f(n) Θ(n log ba ), entonces T(n) Θ(n log ba log(n)) Algo2 (DC-FCEyN-UBA) Recurrencias 8 / 11
Cómo resolverlas Ejercicios hechos en clase Teorema Maestro Determine cuáles de las siguientes ecuaciones de recurrencia pueden ser resueltas con el teorema maestro. Para aquellas que pueden ser resueltas, determine cuál es el valor de la recurrencia, justificando qué caso del teorema maestro aplica. En todos los casos, T(1) = 1. (1) T(n) = 9T(n/3) + n (caso 1). (2) T(n) = T(2n/3) + 1 (caso 2). (3) T(n) = 3T(n/4) + n log n (caso 3). Algo2 (DC-FCEyN-UBA) Recurrencias 9 / 11
Ejercicios Cómo resolverlas Teorema Maestro Determine cuáles de las siguientes ecuaciones de recurrencia pueden ser resueltas con el teorema maestro. Para aquellas que pueden ser resueltas, determine cuál es el valor de la recurrencia, justificando qué caso del teorema maestro aplica. Para el resto, explique el motivo por el que el teorema maestro no aplica. En todos los casos, T(1) = 1 y f(n) = n 3 cuando n es par y n 2 en caso contrario. (1) T(n) = 4T(n/2) + 3n 2 (2) T(n) = 16T(n/4) + n2 log n (3) T(n) = 2 n T(n/8) + 1 (4) T(n) = 3T(n/2) + n 2 log n (5) T(n) = 16T(n/2) + f(n) log n (6) T(n) = 3T(n/2) + f(n) (7) T(n) = 2T(n/2) + n log n Algo2 (DC-FCEyN-UBA) Recurrencias 10 / 11
Resumen Repaso Una recurrencia es un tipo particular de complejidad, definida recursivamente El método de sustitución es una buena manera de probar cotas superiores para recurrencias (necesitamos tener la cota de antemano) El método del árbol de recursión sirve para obtener buenas cotas (generalmente no se lo puede considerar una prueba) El Teorema Maestro arroja complejidades ajustadas para ciertos casos particulares de recurrencias Algo2 (DC-FCEyN-UBA) Recurrencias 11 / 11