Análisis de Algoritmos
description
Transcript of Análisis de Algoritmos
Análisis de AlgoritmosAnálisis de Algoritmos
IntroducciónIntroducción
Basado en el Texto “Algoritmos en C++” , Robert Basado en el Texto “Algoritmos en C++” , Robert Sedgewick, ySedgewick, y
““Estructura de Datos, Algoritmos y Programación Estructura de Datos, Algoritmos y Programación orientada a Objetos” , Gregory L. Heileman orientada a Objetos” , Gregory L. Heileman
IntroducciónIntroducció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ónIntroducció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ónIntroducció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ónIntroducció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ónIntroducció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ónIntroducció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ónIntroducció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ónIntroducció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 necesariasEntonces T(n) = n mutiplicaciones
IntroducciónIntroducció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ónIntroducció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ónIntroducción
• Probando T(n) por inducción matemáticaBuscando una hipótesis, basado solamente en
el algoritmo.T(0) = 0T(1) = 1T(2) = 2T(3) = 3:T(n) = n ???
IntroducciónIntroducción
• Resolviendo por inducción matemáticaSea 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ónIntroducción• Resolviendo por inducción matemática
Proposición Q = { T(n) = n}
Probar que Q es válida para n0 = 0T(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ónIntroducció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ónIntroducción
• Problema de LasTorres de HanoiDefiniremos 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ónIntroducció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ónIntroducción
Buscando una hipótesis, basado solamente en el algoritmo.
T(1) = 1
T(2) = 3
T(3) = 7
T(4) = 15
:
T(n) = 2n -1 ???
IntroducciónIntroducción• Resolviendo por inducción matemática
Proposición Q = { T(n) = 2n - 1}
Probar que Q es válida para n0 = 1T(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ónIntroducció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ónIntroducción
• Propiedades3- 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ónIntroducción
• Ejemplo 1Sea 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ónIntroducción
• Otro ejemplo, sea f(n)=lg n, y g(n)=(n/4)2
a b
g()
f()
g()<=f() g()>f()
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.
Nota: de aquí en adelante,lg n corresponde a log2 n
TALLER 2TALLER 2
• 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.
Problema:Problema:
Buscar la o las cartillas ganadoras en el juego de azar Buscar la o las cartillas ganadoras en el juego de azar KINO, considere 1.000, 10.000, 100.000 cartillas. Se pide:KINO, considere 1.000, 10.000, 100.000 cartillas. Se pide:
IntroducciónIntroducció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ónIntroducció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.
a b
g()
f()
g()<=f() g()>f()
IntroducciónIntroducció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ónIntroducció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ónIntroducció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