Análisis de Algoritmos

Slides:



Advertisements
Presentaciones similares
Teoría de Números Instructor: Luis Eduardo Falcón.
Advertisements

Problemas Resueltos de la Regla del Sandwich
Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Matemáticas Computacionales
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Problemas resueltos de inducción
FACTORIZACIÓN LU Bachilleres:
Estructura de Datos Hugo Araya Carrasco Hugo Araya Carrasco.
¿ Que es la complejidad de un algoritmo ?
Ing. Antonio Crivillero
ANÁLISIS DE ESTABILIDAD
Unidad académica: Ingenierías
KRIGING.
Exponentes y Logaritmos.
2.1 Recursividad El hecho de que una función pueda llamarse a sí misma.
ESTRUCTURAS DE CONTROL
Juan José Cortés Orozco. Antonio Muñoz Torres.
Exponentes y Logaritmos.
Ecuaciones de recurrencia
La Derivada. Ya vimos: los conceptos, métodos ó instrumentos necesarios para establecer el “comportamiento” de una función.  en un entorno de x o [ 
Análisis de Algoritmos
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
TEMA 4 TRANSFORMADA DE LAPLACE

Análisis de Algoritmos
Verificar que la siguiente igualdad es cierta:
Introducción al análisis de algoritmos
Estructura de Datos y Algoritmos
El Teorema del valor medio
Descomposición Factorial Unidad 5
Material de apoyo Unidad 4 Estructura de datos
Divide y vencerás 1. Método general.
Análisis de algoritmos
Recurrencia Programación II de enero de 2009.
A.E.D. 1 Tema 1. Análisis de algoritmos. Programa de teoría Parte I. Estructuras de Datos. 1. Abstracciones y especificaciones. 2. Conjuntos y diccionarios.
4.  Métodos matemáticos.
Curso de Teoría del Autómata
Análisis y Diseño de Algoritmos
1  Una Ecuaci ó n de Recurrencia Lineal de Orden n a Coeficientes Constantes se define seg ú n la ecuaci ó n: ∑ d K a K = g(n) donde d K son constantes.
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 1: Introduccion Unidad 2: Orden de algoritmos.
M.C. Meliza Contreras González 1.  Es normal que un algoritmo se base en procedimientos auxiliares, haga llamadas recursivas para tamaños menores o reduzca.
Capítulo 6. ANÁLISIS DE ALGORITMOS
Análisis de Algoritmos
Sabemos reconocerlas, y calcularlas como soluciones de sistemas de ecuaciones, o de desigualdades Buscamos métodos de cálculo generales y eficientes Problemas.
Tema 7: NOTACIONES ASINTÓTICAS
1 Condiciones de extremo Proceso para derivar las condiciones De problema más simple a más complejo Progresión de problemas: Problema sin restricciones.
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Análisis de algoritmos Generalidades
Distribuciones de probabilidad bidimensionales o conjuntas
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Algoritmo. Algoritmo Algoritmo Al-Khowarizmi nunca pensó que su nombre, seria el origen de palabras mas importantes que el mismo: Álgebra. Logaritmo.
Diseño y análisis de algoritmos Análisis de Algoritmos II.
Unidad V Recursión. Objetivos del Aprendizaje Explicar el concepto de recursión. Discutir las diferentes condiciones que deben ser satisfechas para que.
Conalep Coacalco Algoritmos Recursivos
Introducción a los TADs
Análisis de Fourier.
Tema 3: Complejidad Estructura de Datos
Método Simplex Es un procedimiento sistemático y eficiente para encontrar y probar soluciones situadas en los puntos extremos de la región de soluciones.
QUINTA CONFERENCIA Lugar: Oficinas Generales Fecha: 15 de Diciembre de 2007 Conferencista: Prof. Carlos Betancourt Monroy Centro de Estudios Científicos.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
6. Sistemas de ecuaciones diferenciales lineales
PROGRAMACION DE APLICACIONES EN MEMORIA DEL COMPUTADOR = ALGORITMOS Y ESTRUCTURAS DE DATOS.
TEMA 3 SUCESIONES Y SERIES.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Transcripción de la presentación:

Análisis de Algoritmos Introducción Basado en el Texto “Algoritmos en C++” , Robert Sedgewick, y “Estructura de Datos, Algoritmos y Programación orientada a Objetos” , Gregory L. Heileman

Introducción TAD’s Tipo Abstracto de Datos En estructura de Datos, la problemática se centró en la representación de los Datos y el conjunto de Operaciones (funciones) de sobre ellos. TAD’s={Estructura de Datos + Operaciones} Ejemplo: Matriz M ObtenerElemento(i,j,M) Sumar(M1,M2) Producto(M1,M2)…

Introducción Problema Fundamental Sea A={a1,a2,a3,..,an}, un conjunto de algoritmos que resuelven un problema P, cada una con alguna Estructura de Datos. Cual algoritmo es más eficiente? En tiempo CPU, espacios de Memoria o ambas

Introducción En el Análisis de Algoritmos, el criterio de selección está definido por tiempo de CPU, esto implica que serán más eficiente el programa es más rápido.

Introducción Volúmen n. La rapidez de un progrma P es medida en relación a alguna “Carga” o volumen de tamaño n de datos: Ej. P(n): ordena n datos enteros P(n): calcula factorial de n P(p,q): calcula la determinante de una matriz de tamaño pxq, n=p*q.

Introducción Tiempo T(n). Se define T(n) como la rapidez con que se “ejecuta” un algoritmo con una entrada de datos de tamaño n. T(n) se mide en términos de cantidad de operaciones necesarias para concluir el programa.

Introducción Calcular el factorial de n. Volumen n int factorial(int n) { int fact=1; for(i=1;i<=n;i++) fact=fact*i; return (fact); } Volumen : el valor entero n

Introducción Calculando el factorial de un entero n utilizando un algoritmo lineal ( secuencial). int factorial(int n) { int fact=1; for(i=1;i<=n;i++) fact=fact*i; return (fact); } Tiempo T(n) T(n) = 1 +1+ n consultas + n sumas + n multiplicaciones + n asignaciones T(n) = (2 + 4n) operaciones

Introducción Calculando el factorial de un entero n utilizando un algoritmo lineal ( secuencial). int factorial(int n) { int fact=1; for(i=1;i<=n;i++) fact=fact*i; return (fact); } Tiempo T(n) Si T(n) = número de multiplicaciones necesarias Entonces T(n) = n mutiplicaciones

Introducción Calculando el factorial de n, utilizando la definición RECURSIVA factorial(n) como sigue: 1 si n>0 factorial (n) = factorial(n-1) * n si n=0

Introducción Tiempo T(n) int factotrial (int n) { if n=0 return 1; return(factorial(n-1)*n); } Si T(n) = multiplicaciones Necesarias, entonces: 0 ;si n=0 T(n)= T(n-1)+1 ;si n >0

Introducción Probando T(n) por inducción matemática Buscando una hipótesis, basado solamente en el algoritmo. T(0) = 0 T(1) = 1 T(2) = 2 T(3) = 3 : T(n) = n ???

Introducción Resolviendo por inducción matemática Sea Q una proposición a demostrar Se intenta probar que Q es válida para todo n>= n0 1. Probar que Q es válida para n0 2. Suponer que Q es válida para todo entero <= n-1 (Hipótesis de inducción) 3. Probar que Q es válido para todo n

Introducción Resolviendo por inducción matemática Proposición Q = { T(n) = n} Probar que Q es válida para n0 = 0 T(0) = 0, Q se cumple, por simple vista del algoritmo. Suponer que Q es válida para todo entero 0<k<= n-1 (Hip. De Inducc) T(k) = k Probar que Q es válido para todo n, utilizando la Hip. de Inducc. T(n) = T(n-1) +1 = (n-1+1) + 1 = n+1

Introducción Torres de Hanoi El problema de las torres de Hanoi se puede resolver recursivamente: Inicialmente los n Discos están en el poste A Los n-1 disco superiores de A son trasladados al poste B El único disco restante es del poste A se mueve al poste C Los n-1 discos del poste B son trasladados al poste C.

Introducción Problema de LasTorres de Hanoi Definiremos una función Hanoi() como sigue: Hanoi(n,A,B,C) mueve n Discos desde A a C, usando B Hanoi(int n,A,B,C) { if(n=1) mover disco superior de A a C return; Hanoi(n-1,A,C,B); mover disco superior de A a C; Hanoi(n-1,B,A,C) }

Introducción Calculando T(n) para Problema de las Torres de Hanoi, donde N es la cantidad de movimientos de discos. 1 si n=1 T(n)= 2T(n-1)+1 si n >1

Introducción Buscando una hipótesis, basado solamente en el algoritmo. : T(n) = 2n -1 ???

Introducción Resolviendo por inducción matemática Proposición Q = { T(n) = 2n - 1} Probar que Q es válida para n0 = 1 T(1) = 1, Q se cumple, por simple vista del algoritmo. Suponer que Q es válida para todo entero 1<k<= n-1 (Hip. De Inducc) T(k) = 2k - 1 Probar que Q es válido para todo n, utilizando la Hip. de Inducc. T(n) = 2T(n-1) +1 = 2(2n-1-1) + 1 = 2n-1

Introducción Análisis Asintótico Definición 1 Sean f(n) y g(n) dos funciones [f,g : Z+ → R+]. Se dice que f(n) es “O grande” de g(n) y se escribe como: f(n) = O(g(n)) Si existen dos constantes positivas c,n0 tal que f(n) ≤ c g(n) para todo n≥ n0

Introducción Propiedades 3- Se puede demostrar que O(g(n)2) = O(g(n)*g(n)) = O(g(n))*O(g(n)) Así, Similarmente O((lg n)2) = O(lg n)2

Introducción Ejemplo 1 Sea f(n)=n3 + 20 n2 + 100 n f(n) = O(g(n)) Puesto que: n3 + 20 n2 + 100 n <= n3 + 20 n3 + 100 n3 = 121 n3 Escogiendo C = 121 y n0 = 0 Es suficiente para que se cumpla la definición

Introducción Otro ejemplo, sea f(n)=lg n, y g(n)=(n/4)2 Podemos observar que: g(n) < f(n) para todo n, tal que a < n < b. Será que g(n) = O(f(n))?, la respuesta es NO pues si hacemos n0=a, la igualdad anterior no se cumple para n > b, y por lo tanto no se cumple para todo n > n0. Será que f(n) = O(g(n))?, la respuesta es SI pues si hacemos n0=b, la igualdad anterior si se cumple para n > b, y por lo tanto se cumple para todo n > n0. Lo anterior considerando por ejemplo c=1. g() f() g()<=f() g()>f() a b Nota: de aquí en adelante, lg n corresponde a log2 n

TALLER 2 Revisar los algoritmos fundamentales de búsqueda. Problema: Buscar la o las cartillas ganadoras en el juego de azar KINO, considere 1.000, 10.000, 100.000 cartillas. Se pide: Revisar los algoritmos fundamentales de búsqueda. Implementar en C++ o Java Obtener f(n) para cada uno de ellos Comprobar f(n) graficando el comportamiento del algoritmo para los diferentes volúmenes de datos.

Introducción Análisis Asintótico Definición 2 Sean f(n) y g(n) dos funciones [f,g : Z+ → R+]. Se dice que f(n) es “Omega grande” de g(n) y se escribe como: f(n) = Ω(g(n)) Si existen dos constantes positivas c y n0 tal que f(n) ≥ c g(n) para todo n≥ n0

Introducción Ejemplo, sea f(n)=lg n, y g(n)=(n/4)2 Será que f(n) = Ω(g(n))?, la respuesta es NO porque no se puede encontrar c y n0 que satisfaga f(n) que satisfaga f(n) ≥ cg(n) para todo n ≥ n0. Será que g(n) = Ω(f(n))?, la respuesta es SI pues si hacemos n0=b, la igualdad anterior si e cumple para c=1 y n ≥ b, y por lo tanto se cumple para todo n > n0. g() f() g()<=f() g()>f() a b

Introducción Así tenemos que f(n)=Ω(g(n) ssi g(n)=O(f(n)) Esta simetría implica que las propiedades que se cumple para O() también se cumple para Ω().

Introducción Análisis Asintótico Definición 3 (Cota Asintótica) Sean f(n) y g(n) dos funciones [f,g : Z+ → R+]. Se dice que f(n) es “Theta grande” de g(n) y se escribe como: f(n) = Θ(g(n)) Si existen dos constantes positivas c1 c2, y n0 tal que c2 g(n) ≤ f(n) ≤ c2 g(n) para todo n≥ n0

Introducción Por la definición 1 y 2, podemos expresar: f(n) = Θ(g(n)) ssi f(n)=O(g(n)) y g(n)=Ω(f(n)) Pues ambas en conjunto aseguran la existencia de dos constantes positivas c1 c2, y de n0 tal que c2 g(n) ≤ f(n) ≤ c2 g(n) para todo n≥ n0