Análisis de Algoritmos
description
Transcript of Análisis de Algoritmos
![Page 1: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/1.jpg)
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
![Page 2: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/2.jpg)
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)…
![Page 3: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/3.jpg)
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
![Page 4: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/4.jpg)
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.
![Page 5: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/5.jpg)
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.
![Page 6: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/6.jpg)
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.
![Page 7: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/7.jpg)
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
![Page 8: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/8.jpg)
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
![Page 9: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/9.jpg)
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
![Page 10: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/10.jpg)
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
![Page 11: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/11.jpg)
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
![Page 12: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/12.jpg)
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 ???
![Page 13: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/13.jpg)
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
![Page 14: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/14.jpg)
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
![Page 15: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/15.jpg)
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.
![Page 16: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/16.jpg)
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)
}
![Page 17: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/17.jpg)
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
![Page 18: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/18.jpg)
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 ???
![Page 19: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/19.jpg)
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
![Page 20: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/20.jpg)
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
![Page 21: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/21.jpg)
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
![Page 22: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/22.jpg)
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
![Page 23: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/23.jpg)
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
![Page 24: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/24.jpg)
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:
![Page 25: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/25.jpg)
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
![Page 26: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/26.jpg)
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()
![Page 27: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/27.jpg)
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 Ω().
![Page 28: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/28.jpg)
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
![Page 29: Análisis de Algoritmos](https://reader036.fdocuments.net/reader036/viewer/2022062723/56813b5f550346895da45938/html5/thumbnails/29.jpg)
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