Você está na página 1de 29

Anlisis de Algoritmos

Introduccin
Basado en el Texto Algoritmos en C++ , Robert Sedgewick, y Estructura de Datos, Algoritmos y Programacin orientada a Objetos , Gregory L. Heileman

Introduccin
TADs Tipo Abstracto de Datos
En estructura de Datos, la problemtica se centr en la representacin de los Datos y el conjunto de Operaciones (funciones) de sobre ellos.
TADs={Estructura de Datos + Operaciones} Ejemplo: Matriz M ObtenerElemento(i,j,M) Sumar(M1,M2) Producto(M1,M2)

Introduccin
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 ms eficiente? En tiempo CPU, espacios de Memoria o ambas

Introduccin
En el Anlisis de Algoritmos, el criterio de seleccin est definido por tiempo de CPU, esto implica que sern ms eficiente el programa es ms rpido.

Introduccin
Volmen n.
La rapidez de un progrma P es medida en relacin a alguna Carga o volumen de tamao 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 tamao pxq, n=p*q.

Introduccin
Tiempo T(n).
Se define T(n) como la rapidez con que se ejecuta un algoritmo con una entrada de datos de tamao n. T(n) se mide en trminos de cantidad de operaciones necesarias para concluir el programa.

Introduccin
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

Introduccin
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

Introduccin
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) = nmero de multiplicaciones necesarias
Entonces T(n) = n mutiplicaciones

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

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

0 T(n)=

;si

n=0

T(n-1)+1 ;si n >0

Introduccin
Probando T(n) por induccin matemtica
Buscando una hiptesis, basado solamente en el algoritmo. T(0) = 0 T(1) = 1 T(2) = 2 T(3) = 3 : T(n) = n ???

Introduccin
Resolviendo por induccin matemtica
Sea Q una proposicin a demostrar Se intenta probar que Q es vlida para todo n>= n0 1. Probar que Q es vlida para n0 2. Suponer que Q es vlida para todo entero <= n-1 (Hiptesis de induccin) 3. Probar que Q es vlido para todo n

Introduccin
Resolviendo por induccin matemtica
Proposicin Q = { T(n) = n}
Probar que Q es vlida para n0 = 0
T(0) = 0, Q se cumple, por simple vista del algoritmo.

Suponer que Q es vlida para todo entero 0<k<= n-1 (Hip. De Inducc) T(k) = k Probar que Q es vlido para todo n, utilizando la Hip. de Inducc. T(n) = T(n-1) +1 = (n-1+1) + 1 = n+1

Introduccin
Torres de Hanoi
El problema de las torres de Hanoi se puede resolver recursivamente:
Inicialmente los n Discos estn 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.

Introduccin
Problema de LasTorres de Hanoi
Definiremos una funcin 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) }

Introduccin
Calculando T(n) para Problema de las Torres de Hanoi, donde N es la cantidad de movimientos de discos.

1 T(n)= 2T(n-1)+1

si n=1 si n >1

Introduccin
Buscando una hiptesis, basado solamente en el algoritmo. T(1) = 1 T(2) = 3 T(3) = 7 T(4) = 15 : T(n) = 2n -1 ???

Introduccin
Resolviendo por induccin matemtica
Proposicin Q = { T(n) = 2n - 1}
Probar que Q es vlida para n0 = 1
T(1) = 1, Q se cumple, por simple vista del algoritmo.

Suponer que Q es vlida para todo entero 1<k<= n-1 (Hip. De Inducc) T(k) = 2k - 1 Probar que Q es vlido para todo n, utilizando la Hip. de Inducc. T(n) = 2T(n-1) +1 = 2(2n-1-1) + 1 = 2n-1

Introduccin
Anlisis Asinttico Definicin 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

Introduccin
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

Introduccin
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 definicin

Introduccin
Otro ejemplo, sea f(n)=lg n, y g(n)=(n/4)2
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.

g()<=f() a b

g()>f()

Nota: de aqu en adelante, lg n corresponde a log2 n

TALLER 2
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 bsqueda. Implementar en C++ o Java Obtener f(n) para cada uno de ellos Comprobar f(n) graficando el comportamiento del algoritmo para los diferentes volmenes de datos.

Introduccin
Anlisis Asinttico Definicin 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

Introduccin
Ejemplo, sea f(n)=lg n, y g(n)=(n/4)2
g() f()

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() a b

g()>f()

Introduccin
As tenemos que f(n)=(g(n) ssi g(n)=O(f(n))

Esta simetra implica que las propiedades que se cumple para O() tambin se cumple para ().

Introduccin
Anlisis Asinttico Definicin 3 (Cota Asinttica) 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

Introduccin
Por la definicin 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

Você também pode gostar