You are on page 1of 26

Anlisis de

algoritmos
Profra. Consuelo Varinia Garca Mendoza

Introduccin
Qu es un algoritmo?
Por qu elaboramos algoritmos

computacionales?
Qu algoritmos conoces?
Has comparado los algoritmos que elaboras
con otros que resuelvan el mismo problema?
Qu metodologa, tcnica o estratgica
utilizas cuando diseas un algoritmo?
Qu estudiaremos en Anlisis de
Algoritmos?

Temario
I. Tcnicas de anlisis
II. Estrategias de diseo
III. Completitud NP

Bibliografa recomendada
Baase, S. Van Gelder, A. (2001). Algoritmos Computacionales

(3 Ed.). Mxico: Ed. Pearson. ISBN-13: 978-0201612448.


Brassard, G. (1997). Fundamentos de Algoritmia. Espaa: Ed.

Prentice Hall. ISBN 848966000X.

Cormen, T. Leiserson, Ch. Rivest R. (2003). Introduction to

algorithms (2 Ed.) Estados Unidos de Amrica: MIT press.


2003. ISBN-13: 978-0072970548.

Harel, D. (2004). Algorithmics: The spirit of Computing (3rd.

Ed). Estados Unidos de Amrica: Addison Wesley. ISBN-13:


978-0321117847.

Evaluacin
30% Examen
30% Participaciones, tareas, actividades en

clase y practicas
30% Practicas

Tarea

La complejidad de
los algoritmos
Anlisis de Algoritmos
Profra. Consuelo Varinia Garca Mendoza

El mejor algoritmo
Diferentes algoritmos pueden resolver el

mismo problema. (reconocimiento de rostros,


seguridad informtica, encriptacin,
geolocalizacin con dispositivos mviles)
Qu criterios tomaras en cuenta para

seleccionar uno de ellos?

Criterios de eleccin
De acuerdo a los recursos
Buscar el algoritmo ms adecuado al
dispositivo del que disponemos (ancho de
banda, espacio en memoria, batera, cmputo
paralelo (cluster), acceso a internet).
Eficiencia
El que tarde el menor tiempo en ejecutarse

Tiempo de Ejecucin (TE)


Cmo podemos conocer el tiempo de

ejecucin de un algoritmo?,
este tiempo ser igual en todos los

dispositivos ?
de qu factores va a depender?,

De que depende el TE de un
algoritmo?
Tamao de entrada (dimensin del vector que

se va a ordenar, de las matrices que se


multiplicaran, etc.)
De la entrada misma (por ejemplo que los datos
estn ordenados)
Velocidad del procesador
La calidad del programa objeto generado por el
compilador
Complejidad del propio algoritmo

Cmo se puede medir el TE de los


algoritmos?
Medida terica
Medida real

Medida Real
Ejecutado los algoritmo con valores de entrada

determinados, en un ordenador concreto.


Existe alguna funciones en C y Java pueda
medir el tiempo de ejecucin de un
programa?
Existe alguna funcin que permita medir el
tiempo de ejecucin de cada operacin
elemental?

Medida Terica
Encontrando T(n)
En un ordenador idealizado para una

entrada de tamao n
Considerando el tamao de la entrada ,
pero no su naturaleza.
Donde cada operacin elemental tomar
el mismo tiempo en ejecutarse
independientemente del ordenador o
dispositivo en que se ejecute

T(n)

T(n)

Cmo se obtiene T(n)?


En funcin del nmero de operaciones elementales

(OE).
Operaciones aritmticas bsicas
Asignaciones a variables
Llamadas a funciones y procedimientos
Comparaciones lgicas
Acceso estructuras indexadas bsicas (vectores y

matrices)

Recomendaciones al realizar la
medida terica
Realizar el estudio base al conjunto de

sentencias, que caracterizan que el algoritmo


sea rpido o lento.
Para facilitar el calculo se supondr que los

tiempos de las diferentes OE son los mismos.

Ejemplo
Encontrar la posicin de un entero dado c

dentro de un vector ordenado de enteros de


tamao n, devolviendo cero si el elemento no
est en el vector.

Identificar OE
// una asignacin 1

1. i=1

2. while (a[i] < c && j <//dos comparaciones, un acceso a vector y un and

n)
// un incremento y una asignacin 2

3. j=j+1;
//un acceso a vector y una asignacin 2

4. if (a[j])==c)
5.
6. else
7.

return j;

return 0;

// un return si la condicin se cumple 1

// un return si la condicin no se cumple 1

Casos de estudio
Caso mejor
Caso peor
Caso medio

Mejor caso

1. i=1

2. while (a[i] < c && j < // cortocircuito 4

n)
3.

j=j+1;

4. if (a[j])==c)

5.

return j;

6. else
7.
return 0;

->2
x
2
1
1
T(n)=1+2+2+1=6

Peor caso

1. i=0

4
2. while (a[i] < c && j < n)

3.

j=j+1;

4. if (a[j])==c)
5.
return j;
6. else
7.
return 0;

2
1
1

Caso medio

1. i=1

2. while (a[i] < c && j

4
2

< n)
3.

j=j+1;

4. if (a[j])==c)
5.
return j;
6. else
7.
return 0;

2
1
1

(n-1) / 2

Ejercicios
Algoritmo 1 (Hacer como ejemplo)
Algoritmo 2
Algoritmo 3

Podra complementarse con los ejercicios de

ordenamiento