Está en la página 1de 38

Estructura de Datos:

Complejidad
Computacional
Felipe Ignacio Leiva Corts Prof. Eric Ross
Jos Manuel Espinoza Salas
Introduccin
Qu es un algoritmo?
Eficacia y eficiencia de un algoritmo
Diferencia en peso de cada algoritmo
Optimizacin de un algoritmo
Algoritmo: Colonia de hormigas
Objetivos
Comprender importancia de la eficiencia de un
algoritmo.
Analizar el mejor caso, peor caso y caso
promedio.
Explicar los mtodos para encontrar la
complejidad promedio o complejidad amortizada.
Complejidad Computacional

Juris Hartmanis Richard Stearns


Complejidad Computacional
Costo de elegir un algoritmo
Qu tipo de memoria utilizar?

Cunto tiempo requiere?

Qu tamao de problema es al que me


enfrento?
Complejidad Espacial
Memoria esttica o Stack (Pila)
Datos primitivos
Punteros
Estructuras (Structs, C y C++)
Clases (class)
Llamada a funciones
Complejidad Espacial
Memoria dinmica o Heap (Montn)
Caso de C
Malloc
Free
Caso de C++
New
Delete
Complejidad Espacial

Stack Heap
Tamao fijo (RAM) Puede aumentar (RAM)
Tamao en bytes Tamao bytes
conocidos desconocido
Eliminacin automtica Eliminacin manual
Insercin y eliminacin Insercin y eliminacin
rpida no tan rpida
Complejidad Espacial

int factorial(int x){


if ( x < 1 ) return 1;
return x * factorial(x - 1);
}

S(n): Coste espacial del algoritmo para algn


numero x = n
Complejidad Espacial

0, si n 1
S ( n)
S (n 1) 1, si n 1

S(n)=S(n-1)+1=S(n-2)+2==S(n-k)+k
Termina cuando n-k<1, en ese instante S(n) = k
La ltima igualdad ocurre cuando (n+1) k= 1
As, k = n, y S(n) = n
Complejidad Temporal
El tiempo es irregular
El tiempo se ve afectado por la talla del problema
Recorrer una matriz de n x m
Imprimir un arreglo de tamao n
Encontrar los nmeros primos de 1 a n
Complejidad Temporal
Tcnica de pasos (coste de medicin constante)
Costo constantes: 0 pasos
Costo comentarios: 0 pasos
Costo de declaraciones de variable: 0 pasos
Costo expresin: 1 paso
Costo asignacin a variable: 1 paso
Llamada a funcin: 1 paso + coste funcin
Complejidad Temporal
Tcnica de pasos (coste de medicin constante)
Costo condicional: coste condicin + coste expresiones,
del if o else if o else. Si se busca el peor caso, se elige el
que tenga el coste mayor.
if <condicin>
<expresiones>
else if <condicin2>
<expresiones2>
.
.
else
<expresionesn>
Complejidad Temporal
Tcnica de pasos (coste de medicin constante)
Costo iteraciones:
Ciclo for: coste inicio + coste de condicin + coste
de paso
Ciclo while: coste condicin
Complejidad Temporal
Tcnica de pasos (coste de medicin constante)
Costo switch: <n de comparaciones> pasos
Si n = a, 1 comparacin = 1 paso
Si n = c, 3 comparaciones = 3 pasos
Si default, 3 comparaciones = 3 pasos
switch(n){
case a: <sentencias> break;
case b: <sentencias> break;
case c: <sentencias> break;
default <sentencias>
}
Complejidad Temporal
Ejemplo: Recorrer matriz cuadrada
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
matriz[ i ][ j ] = i + j;
Primer ciclo for: (1+2n) pasos
Segundo ciclo for: n(1+2n)pasos
Asignacin matriz[i][j]: n2 pasos.
Tiempo de ejecucin: f(n) = 3n2 + 3n+1
Desempeo asinttico
Desempeo Asinttico

O( f (n)) {g | k .n0 tales que, n n0 , g (n) kf (n)}

Ejemplo:
Si f(n) =2n2+3n+1
Para n1, se puede decir que 3n 3n2 y adems 1 n2
f(n) =2n2+3n+1 2n2+3n2+n2 6n2
Por lo tanto, O(f(n)) = O(n2)
Desempeo Asinttico
Orden Nombre Ejemplos
O(1) Constante De tiempo constante, que no crece sea cual sea el valor de
las variables, por ejemplo, sumar dos elementos.
O(log n) Logartmico Realiza menos iteraciones que lo comn, por ejemplo la
bsqueda binaria en un vector ordenado.
O(n) Lineal Tiene un crecimiento lineal, por ejemplo, bsqueda
secuencial en un arreglo.
O(n log n) Loglineal Se considera mejor que los del tipo O(nc), por ejemplo, el
ordenamiento quicksort es de tipo O(nlog n).
O(n2) Cuadrtica Recorrer una matriz cuadrada, o el algoritmo de
ordenamiento bubble-sort.
O(n3) Cbica El producto de matrices.
O(nc), c>3 Polinmico Para c = 2, recorrer una matriz cuadrada es de tipo O(nc).
O(cn), c>1 Exponencial Desde este orden es mejor evitarlos.
O(n!) Factorial Algoritmos que prueban todas las combinaciones posibles.
O(nn) Combinatorio Igual al orden O(n!), pero con mayor coste. Intratable
Mejor caso, peor caso y caso
promedio
Mejor caso, peor caso y caso
promedio

Caso Peor Mejor Promedio


Nombre Big Omicron Big Omega Big Theta
Notacin O(f(n)) (f(n)) (f(n))

(f(n))= ( )

Mejor caso, peor caso y caso
promedio: Bsqueda secuencial
Mejor caso, peor caso y caso
promedio: Bsqueda secuencial
Mejor Caso:
El elemento buscado est en el ndice 0.
Se realiza solo 1 paso, por tanto es de orden constante
(1)

Peor Caso:
El elemento buscado no se encuentra
Se realizan n pasos, por tanto es de orden lineal O(n)
Mejor caso, peor caso y caso
promedio: Bsqueda secuencial
Caso Promedio:
Se asume misma probabilidad de ocurrencia (1/n)
1 1 1 1
Costo promedio: 1 + 2 + 3 + +

1+2+3++ (+1)/2 +1
= =
2
Orden lineal (n)
Complejidad Amortizada

ndice 0 1 2 3 4 5 6 7
Vector A B
Nuevo
A B C
Vector
Nuevo
A B C D
Vector
Vector A B C D E
Nuevo
A B C D E
Vector
Medicin del Desempeo
void add(int x){
if ( !(index < length) ){
int* aux = vector;
vector = new int[ 2 * length ];
for(index = 0; index < length; index++)
vector[index] = aux[index];
length *= 2;
delete[] aux;
}
vector[index++] = x;
}
Medicin del Desempeo:
Anlisis de costo acumulado
Cantidad Operaciones (n) Peor caso
1 O(1)
2 O(n)

3 O(n)
4 O(1)
5 O(n)
6 O(1)
7 O(1)
8 O(1)
9 O(n)
Medicin del Desempeo:
Anlisis de costo acumulado
Cantidad Cantidad O(n) Cantidad O(1)
Operaciones (n)
2 1 1
3 2 1

5 3 2
9 4 5
17 5 12
33 6 27
65 7 58
1025 11 1014
Medicin del Desempeo:
Mtodo del banquero
Costo a operacin (costo amortizado)
Ahorro (crditos) cero o positivo
Insertar: 4 crditos
Medicin del Desempeo:
Mtodo del banquero
Elementos Ahorrado Pagado
Elementos
insertados(n) AntesDespus
Ahorrado Pagado
insertados
1 43 1
21 4 75 0 2
32 3 98 1
43 1211 1
5 1510 5
6 1413 1
7 1716 1
8 2019 1
9 2314 9
Medicin del Desempeo:
Mtodo del banquero

Acotado por 4n
Orden en general ()

Costo promedio
Orden costo amortizado (1)
Medicin del Desempeo:
Mtodo del potencial
Cuntos trabajo requiere ?
Funcin potencial:

Costo amortizado: =1 = + 1
Debe cumplir: , 0
Medicin del Desempeo:
Mtodo del potencial
= 2 _ _ = 2
Dos Casos ( = + 1 ):
i-sima operacin no es overflow
= 1 + (2 + 1 ) (2 ) = 3
i-sima operacin es un overflow
= + 1 + 2 + 1 2 (2 ) = 3

Costo amortizado: (1)


Conclusin

Eficiencia Utilidad

Pensamiento Sociedad
Bibliografa
Adam Drozdek, Data Structure and Algorithms in C++ (2
Ed). Pgs. 53-74.
Francisco Martnez, Introduccin a la programacin
estructurada en C. Pgs. 210-250.
Luis Joyanes, Estructura de datos en C++. Pgs. 155-171.
Donald E. Knuth, Big Omicron and Big Omega and Big
Theta. Pgs. 18-24.
Robert Endre Tarjan, Amortized Computational Complexity.
Pgs. 306-317.
Webgrafa
Dra. Elisa Schaeffer, Anlisis de algoritmos, complejidad
amortizada. Universidad Autnoma de Nuevo Leon. Fuente:
http://elisa.dyndns-web.com/teaching/aa/pdf/clase2510.pdf
Universidad Carlos III de Madrid. Complejidad. Fuente:
http://grid.uis.edu.co/images/e/e2/Complejidad.pdf
Rolf Pinto Lpez. Algoritmos y Estructura de Datos I.
Fuente: http://es.slideshare.net/rolfpinto/teora-de-la-
complejidad-algoritmica
Dante. Costo Amortizado. Fuente:
http://www.fceia.unr.edu.ar/lcc/t312/archivos/11.ED.Costo.p
df
FIN