Documentos de Académico
Documentos de Profesional
Documentos de Cultura
jrfelizamigo@yahoo.es
Contenido
Consideraciones.
Complejidad algorítmica.
Análisis teórico.
Ejemplos
2
CONSIDERACIONES
3
Pregunta
4
Algoritmo de Fibonacci
int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
a = 0; b = 1;
while (n >= 2) {
c = a + b;
a = b; b = c;
n = n - 1;
}
return c;
}
5
Pregunta
¿Cómo determinar si un
algoritmo es mejor que otro?
6
Algunas respuestas
Fácil de implementar.
Fácil de entender.
Fácil de modificar.
Utiliza menos memoria.
Utiliza menos tiempo de ejecución.
7
De lo anterior se ocupa el:
Análisis de la
complejidad de
algoritmos
8
COMPLEJIDAD ALGORÍTMICA
9
Pregunta
¿Qué es la complejidad
algorítmica?
10
Complejidad de Algoritmos
11
Complejidad de Algoritmos
Tiempo Espacio
Tiempo Espacio
12
Complejidad de Algoritmos.
Cont.
Existe la complejidad :
Temporal: Toma en cuenta el tiempo de
ejecución.
Espacial: Toma en cuenta el espacio de
memoria ocupada (no se verá en la
materia).
13
Complejidad de Algoritmos.
Cont.
Se tiene dos métodos para obtener la
complejidad algorítmica.
14
Complejidad de Algoritmos.
Cont.
El método teórico también denominado a
priori, consiste en determinar
matemáticamente la cantidad de
recursos necesitados por cada algoritmo
como una función cuya variable
independiente es el tamaño de los datos
del problema.
15
Complejidad de Algoritmos.
Cont.
El método empírico también denominado
a posteriori, consiste en implementar en
un computador los algoritmos a
comparar, se prueban para distintos
tamaños de los datos del problema y se
comparan.
16
ESTIMACIÓN TEÓRICA
17
Preguntas
x=x+1
Es imposible determinar
exactamente cuanto
tarda en ejecutar una
instrucción
19
Respuesta 1
20
Lo anterior es difícil si se
elige una maquina real!.
21
Respuesta 2
22
Respuesta 2
Las consideraciones
anteriores nos limitan a
obtener solamente la
frecuencia de ejecución de
todas las instrucciones para
un análisis a priori.
23
Análisis a Priori
EJEMPLOS
24
Ejemplo 1
.
.
x=x+1
.
.
25
Ejemplo 2
for i = 1 to n do
x=x+1
end
26
Ejemplo 3
for i = 1 to n do
for j = 1 to n do
x=x+1
end
end
n2 veces (asumiendo n 1)
27
Ejemplo 4
28
Fibonacci
Cantidad de frecuencia para n > 1
Paso Algoritmo Frecuencia
1 void fibonacci(int n) 1
{
int a, b, c, i;
2-3 if (n < 0) { printf("Error"); return;} 1
4-5 if (n == 0) { printf("0"); return;} 1
6-7 if (n == 1) { printf("1"); return;} 1
8 a = 0; b = 1; 2
9 for (i = 2; i <= n; i++) n
{
10 c = a + b; n-1
11 a = b; n-1
12 b = c; n-1
}
13 printf("%d\n",c); 1
}
29
t(n) = 4n + 4
Análisis a Priori
El tiempo de cálculo es 4n + 4.
Ignorando las dos constantes 4,
obtenemos que la complejidad
algorítmica u Orden de Complejidad
es O(n).
30
Ejemplo 5
31
Ejemplo 5
Paso Algoritmo Frecuencia
1 int minimo(int *vector, int n) 1
{
int i, min;
2 min = 1; 1
3 for (i = 2; i <= n; i++) n
{
4 if (vector[i] < vector[min]) n-1
5 min = i; n-1
}
6 return (vector[min]); 1
}
t(n) = 3n + 1
t(n) O(n).
32
Ejemplo 6
33
Ejemplo 6
Paso Algoritmo Frecuencia
1 void burbuja(int vector[], int n) 1
{
int i, j, aux;
2 for (i = 1; i <= n-1; i++) n
3 for (j = i+1; j <= n; j++) n-1 n
4 if (vector[i] > vector[j]) n-1 n-1
{
5 aux = vector[i]; n-1 n-1
6 vector[i] = vector[j]; n-1 n-1
7 vector[j] = aux; n-1 n-1
}
}
t(n) = 5n - 8n + 5
2
t(n) O(n2).
34
Ejemplo 7
35
Ejemplo 7
Paso Algoritmo Frecuencia
1 void nuevo() { 1
int x, t;
2 x = 1; t = 0; 2
3 while (x < n) { 1 + log n
4 x = x * 2; log n
5 t = t + 1; log n
}
}
t(n) = 4 + 3 log n
38
FIN
39