Documentos de Académico
Documentos de Profesional
Documentos de Cultura
y complejidad
computacional
Ing. Informtico Mitchell
Blancas
Eficiencia de Algoritmos
Siempre que elaboremos un algoritmo debemos preocuparnos en
analizar su eficiencia.
Esto implica determinar la cantidad de recursos que utiliza:
a) Cantidad de memoria
b) Tiempo de cmputo requerido
Estos dos parmetros nos permiten comparar dos algoritmos que
resuelven el problema.
Cantidad de memoria
Se puede determinar fcilmente por el nmero y tamao de las
variables.
Tiempo de ejecucin
Se determina por el nmero de operaciones elementales.
t1 se
t2 se
t3 se
veces
t4 se
veces
ejecuta 1 vez
ejecuta 1 vez
ejecuta n
ejecuta n
La Notacin
Asinttica
La notacin asinttica se
comportamiento de una
Adems, puede indicar
aproximadamente iguales
rpidamente que la otra.
Cota superior
asinttica
La Notacin O
Grande
Para
expresar la cota superior asinttica de una funcin, se
usa la notacin O Grande. Matemticamente:
Cota inferior
asinttica
Es una funcin que sirve como
La Notacin Omega
Grande
Para expresar la cota inferior asinttica de una funcin, se
usa la notacin Grande. Matemticamente:
Cota ajustada
asinttica
La Notacin Theta
Grande
Para expresar la cota ajustada asinttica de una funcin, se
usa la notacin Grande. Matemticamente:
Relaciones entre O,
y
10
algunas
pautas de cmo calcular la complejidad de un algoritmo para diferentes
casos:
Sentencias Simples
Condicionales
Bucles
Llamadas a funcin
Secuencias de instrucciones
11
a) Sentencias simples
Cuando en un algoritmo intervienen sentencias simples, como
asignacin, entrada o salida e datos, requieren un tiempo
constante de ejecucin por lo que su complejidad ser:
O(1)
Esto no incluye aquellas variables cuyo tamao esta relacionado
con el tamao del problema.
12
b)
Condicionales
c) Bucles
13
d) Llamadas a funciones
Viene dada por la complejidad de sus sentencias. El costo de la
invocacin a la funcin y su retorno se consideran constantes y
se puede obviar para el anlisis asinttico.
El clculo de la complejidad de una funcin se puede complicar
si se trata de funciones recursivas, las cuales estudiaremos mas
adelante.
e) Secuencias de instrucciones
La complejidad de una secuencia de instrucciones es la suma de
sus complejidades individuales, debiendo aplicar todo lo
anterior.
14
Jerarqua de Ordenes de
Complejidades
O(1)
Orden constante
O(log n)
Orden logartmico
O(n)
Orden lineal
O(n log n)
Orden cuasi-lineal
O(n2)
O(n3)
O(na)
Orden cuadrtico
Orden cbico
Orden polinmico
O(2n)
Orden exponencial
O(n!)
Orden factorial
O(1):
Complejidad
constante.
instrucciones se ejecutan una vez.
Cuando
las
16
17
18
Ejemplo
Un programa emplea 100n unidades de tiempo
para ser ejecutado, otro programa emplea 2n2.
Cual de los dos programas es mejor?
Depende del tamao del problema.
Para n < 50, el programa con tiempo 2n2 es
mejor.
Para problemas con entrada de datos
pequeo, es preferible usar el programa cuyo
tiempo de ejecucin es O(n2).
Sin embargo, cuando n crece, el programa con
tiempo de ejecucin O(n2) emplea mas tiempo
que el programa O(n).
Facultad de CC.FF. - Escuela de
Informtica
19
Calculo de la Complejidad en
algoritmos iterativos
20
21
k=1
El segundo bucle mas interno
n
j = n (n+1)/2 i (i+1)/2
j=i+1
int i, j, k, x;
x=0;
para i=1 hasta n-1
hacer
para j=i+1 hasta
n hacer
para k=1
x=x+
n-1
22
Calculo de la complejidad
algoritmos
recursivos(RECURRENCIAS)
en
23
24
Paso1:
25
26
27
28
29
30
31
32
=2 T(n/2)+n
= 2[2 T(n/22)+n/2] +n = 22T(n/22)+2n
= 22 [2T(n/ 23) +n/ 22] +2n = 23T(n/23)+3n
33
=2 T(n/2)+n
= 2[2 T(n/22)+n/2] +n = 22T(n/22)+2n
= 22 [2T(n/ 23) +n/ 22] +2n = 23T(n/23)+3n
34
=2 T(n/2)+n
= 2[2 T(n/22)+n/2] +n = 22T(n/22)+2n
= 22 [2T(n/ 23) +n/ 22] +2n = 23T(n/23)+3n
35