Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Eficiencia de un algoritmo
Tcnicas de diseo de algoritmos
Bibliografa
Robert Sedgewick:
Algorithms in C
Addison-Wesley, 1990
ISBN 0201514257
Alfred V. Aho, John E. Hopcroft, Jeffrey D. Ullman:
Data Structures and Algorithms
Addison-Wesley, 1983
ISBN: 0201000237
Mark Allen Weiss
Data Structures and Algorithm Analysis in C
Addison-Wesley, Second Edition, 1996
ISBN 0201498405
Thomas H. Cormen, Charles E. Leiserson & Ronald L. Rivest
Introduction to Algorithms
MIT Press, 1990
ISBN 0262031418
Giles Brassard & Paul Bratley
Fundamentals of Algorithmics
Prentice Hall, 1996
ISBN 0133350681
Fundamentos de Algoritmia
Prentice Hall, 1997
ISBN 848966000X
Eficiencia de un algoritmo
El anlisis de algoritmos estudia, desde el punto de vista terico, los
recursos computacionales que necesita la ejecucin de un programa de
ordenador: su eficiencia.
p.ej. Tiempo de CPU
Uso de memoria
Ancho de banda
NOTA:
Anlisis de Algoritmos
Fernando Berzal
Notacin O
O(g(n)) = { f(n) | c,n0 constantes positivas tales que f (n) = c g(n) n = n0 }
un algoritmo O(log n)
es ms eficiente que
un algoritmo O(n)
es ms eficiente que
un algoritmo O(n2)
es ms eficiente que
un algoritmo O(n3)
es ms eficiente que
un algoritmo O(2n)
NOTA:
Anlisis de Algoritmos
Fernando Berzal
T(n) = O(1)
Secuencias de instrucciones
I1;
I2;
Anlisis de Algoritmos
Fernando Berzal
T ( n ) = O (i ) = O ( n 2 )
i =1
T ( n ) = (i / 2 ) = ( n 2 )
i =1
Anlisis de Algoritmos
Fernando Berzal
IMPLEMENTACIN EN C
// Mezcla dos subvectores ordenados
double aux[maxN];
void merge (double v[], int l, int m, int r)
{
int i, j, k;
for (i=m+1; i>l; i--)
aux[i-1] = v[i-1];
for (j=m; j<r; j++)
aux[r+m-j] = v[j+1];
// Vector auxiliar
// O(n)
// Mezcla
// O(n)
// Algoritmo de ordenacin
void mergesort (double v[], int l, int r)
{
int m = (r+l)/2;
if (r > l) {
mergesort (v, l, m);
mergesort (v, m+1, r);
merge (a, l, m, r);
}
// T(n)
// O(1)
//
//
//
//
O(1)
T(n/2)
T(n/2)
O(n)
}
Anlisis de Algoritmos
Fernando Berzal
ANLISIS
2
1. Mezcla de dos subvectores ordenados (merge): Tmerge ( n ) = O ( n )
2. Algoritmo de ordenacin
O (1)
si n = 1
T (n) =
2T ( n / 2) + O ( n ) si n > 1
Solucin de la ecuacin T ( n ) = 2T ( n / 2) + n
Ejercicio
Comprobar experimentalmente a partir de qu valor de n el algoritmo de
ordenacin por mezcla es ms rpido que el de ordenacin por insercin.
Anlisis de Algoritmos
Fernando Berzal
Resolucin de recurrencias
Se pueden aplicar distintas tcnicas y trucos:
Mtodo de sustitucin
1. Adivinar la forma de la solucin.
2. Demostrar por induccin.
3. Resolver las constantes.
O (1)
si n = 1
T (n ) =
4T ( n / 2) + n si n > 1
T(n) es O(n3)?
Suposicin
T(n) = cn3
T(n) = 4T(n/2) + n
= 4c(n/2)3 + n = (c/2)n3 + n = cn3 ((c/2)n3 n)
= cn3 siempre que ((c/2)n3 n)>0 (p.ej. c=2 y n=1)
PROBLEMA:
rbol de recursin
Se basa en construir una representacin grfica intuitiva
T ( n ) = T ( n / 4 ) + T ( n / 2) + n 2
Anlisis de Algoritmos
Fernando Berzal
Expansin de recurrencias
Equivalente algebraica al rbol de recurrencias
si n = 0
O (1)
T (n ) =
T ( n 1) + 1 si n > 1
T(n) = T(n-1) + 1
= (T(n-2)+1) + 1 = T(n-2) + 2
= (T(n-3)+1) + 2 = T(n-3) + 3
= T(n-k) + k
Cuando k=n:
T(n) = T(0) + n = 1 + n = O(n)
T (n ) =
T ( n 1) + T ( n 2 ) + 1 si n > 1
T(n) = T(n-1) + T(n-2) + 1
= (T(n-2)+T(n-3)+1) + (T(n-3)+T(n-4)+1) + 1
= T(n-2) + 2T(n-3) + T(n-4) + (2+1)
= T(n-3) + 3T(n-4) + 3T(n-5) + T(n-6) + (4+2+1)
n
n
1 1 + 5 1 + 5
T (n) =
5 2 2
Anlisis de Algoritmos
Fernando Berzal
tn = ci ri n
i =1
mi 1
tn = cij n j ri n
i =1 j =1
DEMOSTRACIN:
Aplicando el Teorema Fundamental del lgebra,
factorizamos el polinomio de grado k como un producto de k monomios.
Si p(ri)=0,
Anlisis de Algoritmos
Fernando Berzal
T (n ) =
2T ( n 1) + 1 si n > 0
Ecuacin recurrente no homognea: T(n) - 2T(n-1) = 1
Ecuacin homognea
Constante b
Polinomio p(n)
x-2 = 0
b=1
p(n) = 1
Polinomio caracterstico
Solucin:
(x-2)(x-1)
T(n) = c11n + c22n
Condiciones iniciales:
T(0) = 0
T(1) = 2T(0)+1 = 1
c1+c2 = 0
c1+2c2 = 1
c1 = -1
c2 = 1
Anlisis de Algoritmos
10
Fernando Berzal
Problema: Calcular an
Algoritmo ingenuo: Eficiencia O(n)
an = a an-1
Estrategia divide y vencers: T(n) = T(n/2) + O(1) = O(log2 n)
a n / 2 a n / 2
a = ( n1) / 2 ( n1) / 2
a
a
a
n
si n es par
si n es impar
Fn+1
F
n
Fn Fn
=
Fn 1 Fn1
Anlisis de Algoritmos
Fn1 1 1 1 1
=
Fn 2 1 0 1 0
11
Fernando Berzal
Estrategia greedy
Solucin rpida pero no siempre ptima
O(n2)
Dado un grafo, obtener el camino ms corto para llegar desde un vrtice hasta otro:
V
S
D[i]
C[i,j]
P[i]
S = { origen }
Para todo i
D[i] = C[origen,i]
P[i] = origen
Mientras S V
Elegir w V S tal que D[w] sea mnimo
S = S {w}
Para cada vrtice v V S
Si D[v] > D[w] + C[w,v] entonces
D[v] = D[w] + C[w,v]
P[v] = w
Anlisis de Algoritmos
12
Fernando Berzal
Programacin dinmica
Cuando la solucin ptima de un problema se puede construir a partir de las
soluciones ptimas de subproblemas del mismo tipo.
p.ej. Cuando la implementacin recursiva de un algoritmo
repite muchas veces las mismas operaciones.
n n 1 n 1
+
=
k
k
1
k
Problema del camino mnimo (algoritmo de Floyd)
Variante: Memoization
IDEA: No calcular dos veces lo mismo
Cada vez que se obtiene la solucin de un subproblema,
sta se almacena en una tabla para no tener que volver a calcularla.
Aplicaciones
Reconocimiento de voz (DTW: Dynamic Time Warping).
Anlisis de Algoritmos
13
Fernando Berzal