Está en la página 1de 23

Análisis de Algoritmos

Jhonny Felípez Andrade

jrfelizamigo@yahoo.es
Contenido

 Consideraciones.
 Solución de Recurrencias.
 MétodoIterativo.
 Teorema Maestro

2
CONSIDERACIONES

3
Solución de
Recurrencias
 El tiempo de ejecución de los
algoritmos recursivos se expresa
normalmente con una recurrencia.
 Se presentara algunos métodos
donde se muestra que a partir de
estas ecuaciones de recurrencias, se
puede determinar la complejidad
algorítmica de estos algoritmos.

4
Complejidad
Algorítmica
 Solución de Recurrencia.
 Método Iterativo.
Método Iterativo
 El método iterativo requiere, para
obtener la complejidad algorítmica,
de un poco de algebra.

6
EJEMPLO: FACTORIAL

7
Ejemplo. Factorial
(no recursivo).

public long factorial(int n) { 1


long f = 1; 1
for (int i = 1; i <= n; i++) n+1
f = f * i; n
return f; 1
}
T(n) = 2n + 4
 T ( n)  O ( n)
8
Ejemplo. Factorial
(recursivo).

public long factorial(int n) {


if (n == 0)
return 1;
else
return (factorial(n-1)*n);
}
T(n) = ?

9
Ejemplo. Factorial
(recursivo).
c1 si n  0 
T ( n)   
T (n  1)  c2 en caso contrario 

T (n)  T (n  1)  c2 reemplazando n por n  1


 (T (n  2)  c2 )  c2  T (n  2)  2  c2 reemp. n por n  2
 (T (n  3)  c2 )  2  c2  T (n  3)  3  c2 reemp. n por n  3
 (T (n  4)  c2 )  3  c2  T (n  4)  4  c2

10
Ejemplo. Factorial
(recursivo).
La forma general será

T (n)  T (n  k )  k  c2

Este algoritmo termina cuando T(0) = c1,


además n – k = 0 o n = k. Reemplazando se
tiene:
T (n)  T (0)  k  c2  c1  c2  n
 T ( n )  O ( n)
11
EJEMPLO: BÚSQUEDA
BINARIA
12
Ejemplo. Búsqueda Binaria
(recursiva).

int busqBinaria(double vector[], int i, int j, double x){


int medio=(i+j)/2;
if (i > j) return -1;
else if (x == vector[medio])
return medio;
else if (x < vector[medio])
return busqBinaria(vector,i,medio-1,x);
else
return busqBinaria(vector,medio+1,j,x);
}

13
Ejemplo. Búsqueda Binaria
(recursiva).
c1
 si n  1 
T ( n)   n 
T ( )  c2 en caso contrario 
 2
n n
T (n)  T ( )  c2 reemplazando n por
2 2
n/2 n n
 (T ( )  c2 )  c2  T ( )  2 * c2 reemp. n por
2 4 4
n n
 (T ( )  c2 )  2 * c2  T ( )  3 * c2
8 8

14
Ejemplo. Búsqueda Binaria
(recursiva).
La forma general será
n
T ( n )  T ( k )  k * c2
2
Este algoritmo termina cuando T(1) = c1,
además n/2k=1 o k = log n. Reemplazando se
tiene:
T (n)  T (1)  k * c2  c1  c2 * log n
 T (n)  O(log n)
15
Complejidad
Algorítmica
 Solución de Recurrencia.
 Teorema Maestro.
Teorema Maestro (Master Theorem)

 Se usa para resolver recurrencias del


tipo T(n) = a T(n/b) + f(n), donde f(n) es
una función asintóticamente positiva y
las constantes a ≥ 1, b >1.
 Este teorema expresa que el problema
se divide en a sub problemas de tamaño
n/b.
 Los a sub problemas se resuelven
recursivamente en tiempo T(n/b).
 El costo de dividir el problema y
combinar sus soluciones es descrito por
f(n).
17
Teorema Maestro (Master Theorem)

 Sean a≥1, b>1 constantes, f(n) una


función yT(n) definida para enteros no
negativos por la recurrencia:

T (n)  aT (n / b)  cn k

Donde n/b es round(n/b). Entonces


T(n) puede ser acotada
asintóticamente por:
18
Teorema Maestro (Master Theorem)

T ( n)  O ( n logb a
) si a  b k

T (n)  O(n log n) si a  b


k k

T (n)  O(n ) si a  b
k k

19
Ejemplo. Búsqueda Binaria
(recursiva).

int busqBinaria(double vector[], int i, int j, double x){


int medio=(i+j)/2;
if (i > j) return -1;
else if (x == vector[medio])
return medio;
else if (x < vector[medio])
return busqBinaria(vector,i,medio-1,x);
else
return busqBinaria(vector,medio+1,j,x);
}

20
Ejemplo. Búsqueda Binaria
(recursiva).
T (n)  O(n logb a ) si a  b k
T (n)  O(n k log n) si a  b k
T (n)  O(n k ) si a  b k
c1 si n  1 
T ( n)   
T (n / 2)  c2 en caso contrario 
a  1, b  2, k  0  1  20
 T (n)  O(n k log n)  O(n0 log n)  O(log n)
21
Bibliografía

 Fundamentos de Programación, Jorge


Teran Pomier, 2006.
 Fundamentals of Data Structures, Ellis
Horowitz, 1981.
 Data Structures & Algorithms in Java 2nd
Edition, Robert Lafore, Sams Publishing,
2003.
 Introduction to Algorithms, third edition,
Thomas Cormer, 2009.
22
FIN

23

También podría gustarte