Recurrencias y cómo resolverlas

Documentos relacionados
Análisis y Diseño de Algoritmos

Algoritmos Secuenciales y Recursivos

Tema 3.2: Eficiencia de algoritmos recursivos. Diseño y Análisis de Algoritmos

Análisis de Algoritmos

Análisis de Algoritmos

Técnicas y Herramientas. Algoritmos y Complejidad. Técnicas de Demostración. Técnicas y Herramientas. Herramientas Matemáticas Básicas

Algoritmos y Complejidad

Tema 2 Fundamentos de Complejidad Algorítmica

Diseño y Análisis de Algoritmos

Resolviendo Recurrencias

Divide y vencerás. Dr. Eduardo A. RODRÍGUEZ TELLO. 7 de marzo de CINVESTAV-Tamaulipas

Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos

Análisis y Diseño de Algoritmos (AyDA) Isabel Besembel Carrera

Análisis de algoritmos

CI2612: Algoritmos y Estructuras de Datos II. Recurrencias y el principio de dividir y conquistar. Recurrencias. Objetivos.

Análisis y Diseño de Algoritmos

Análisis de algoritmos.

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Análisis de Algoritmos Primer Problemario Prof. Miguel A. Pizaña 22 de Mayo de 2007

Análisis y Diseño de Algoritmos. Complejidad Computacional

Complejidad de los Algoritmos

Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.

Algoritmos de Búsqueda

Temario. Tipos de recursión. Eficiencia y recursión

Algoritmos y Estructuras de Datos

Tema 5- Diseño Recursivo y Eficiente. Tema 5- Diseño Recursivo y. Descomposición recursiva ascendente de un vector. Etapas del diseño recursivo

Dividir-conquistar y podar-buscar

Programación II. Mario Aldea Rivas Programación II 04/04/11 1. Mario Aldea Rivas Programación II 04/04/11 2

Programación dinámica

Análisis de la Complejidad de Algoritmos

Concentración de Medida en Algoritmos Aleatorizados.

Demostrando cotas inferiores: Arboles de decisión

Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 3: Divide y Vencerás

Complejidad de algoritmos recursivos

Algoritmos: Análisis de algoritmos

Análisis de Algoritmos

Complejidad computacional y asintótica

Algoritmo de Euclides

Algoritmos glotones. mat-151

Estructura de Datos. Complejidad de Algoritmos. Algoritmo. Algoritmo. Mauricio Solar Lorna Figueroa

Tema 2. Divide y vencerás.

Análisis y Diseño de Algoritmos

Práctica 2 - Ejercicio 2.8

Universidad del Valle EISC

Técnicas de diseño de algoritmos Divide y Vencerás

Algoritmos y estructuras de datos II Inducción estructural

Contenido. 1 Análisis de algoritmos. Contenido. Contenido. Complejidad computacional. Clases de complejidad. Factores que afectan la eficiencia

dit UPM Tema 1: Algoritmos /complejidad /java Análisis y diseño de software José A. Mañas

Programación Análisis de Algoritmos: Tiempo de Ejecución (Introducción)

Análisis de algoritmos

Programación 2. Lección 8. Caracterización asintótica de la eficiencia de un algoritmo

Análisis de algoritmos. Recursividad

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

cc3001 Métodos Matemáticos

Matemáticas Discretas

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Estructuras de Datos y Algoritmos

Geometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012

Esquema. Condicionales. Ejemplo de condicional. Demostración. P { if (B) uno else dos } Q. P { while (B) cuerpo } Q

Programación 2. Lección 3. Introducción a la recursividad

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

Introducción y Comportamiento Asintótico

Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos

a) Para calcular los órdenes sólo es necesario contar el número de veces que se pasa por el bucle más interno. El coste sería n

Ecuaciones de recurrencia. Abraham Sánchez López FCC/BUAP Grupo MOVIS

Metodología de la Programación II. Recursividad

Divide-y-vencerás, backtracking y programación dinámica

Decrementa y vencerás II

Programación 2. Lección 9. Caracterización asintótica de la eficiencia de algoritmos recursivos

ELO320 Estructuras de Datos y Algoritmos. Complejidad. Tomás Arredondo Vidal

Análisis de algoritmos

TEMA 1: DIVIDE Y VENCERÁS

Programación Dinámica

Algoritmos de Ordenamiento

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

TÉCNICAS DE ANÁLISIS DE ALGORITMOS Miguel Angel Norzagaray Cosío Universidad Autónoma de Baja California Sur 1

Programación Dinámica 1

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Programación. Curso 2005/2006. Tema 3: Complejidad computacional

Divide & Conquer. Herman Schinca. Clase de Junio de 2011

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Tema 9. Recursividad

El Algoritmo de Euclides

Qué es la recursividad?

Esquema de Dividir y Vencer

Estructuras de Datos. Clase 3 Análisis de algoritmos recursivos

Tema: Programación Dinámica.

Algoritmos y Estructuras de Datos: Introducción a la Recursión de Programas. Guillermo Román Díez

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Multiplicación de matrices simétricas

Tema 06: Recursividad

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

Introducción al análisis de algoritmos

Capitulo 1 Tema 3: Resolución de Recurrencias Asintóticas

Capítulo 1 LA COMPLEJIDAD DE LOS ALGORITMOS

Análisis Amortizado. Diseño y Análisis de Algoritmos Cátedra de Programación Carrera de Ingeniería de Sistemas Prof. Isabel Besembel Carrera

1. Definiciones previas

Estructuras de datos Listas y árboles

Transcripción:

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