Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comple Ji Dad
Comple Ji Dad
n
1000 2000 3000 4000
Tamao de Entrada
caso mejor
caso medio
caso peor
Naturaleza de los datos de
entrada:
Caso mejor: los datos de
entrada consumen el mnimo
Caso peor: los datos de
entrada consumen el mximo
(cota superior).
Caso promedio: los datos
se distribuyen de forma
aleatoria. Difcil de calcular.
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
13
Enfoques para medir la complejidad de un
algoritmo:
Enfoque empricos o a posteriori
Enfoque terico o a priori.
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
14
Enfoque empricos o a posteriori
1. Escribir un programa que
implemente el algoritmo, por
ejemplo en Java.
2. Ejecutar el programa con
entradas de tamao y
composicin variadas
3. Usar un mtodo como
System.currentTimeMillis()
para obtener una medida
exacta del tiempo de
ejecucin real
4. Trazar los resultados
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
0 50 100
Tamao Entrada
T
i
e
m
p
o
(
m
s
)
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
15
Enfoque tericos o a priori
1. Utilizar una descripcin de alto nivel del algoritmo (v.g. en
pseudocdigo)
2. Determinar, matemticamente, la cantidad de recursos
necesarios para ejecutar el algoritmo
3. Obtener una funcin genrica f(n) que permita hacer
predicciones sobre la utilizacin de recursos, siendo n el tamao
del problema
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
16
Ventajas e inconvenientes
1. El estudio a posteriori requiere la implementacin del algoritmo
(mayor coste). El estudio a priori solo requiere de una
descripcin de alto nivel (pseudocdigo).
2. En el estudio a posteriori no tenemos la seguridad de los
recursos que realmente se van a consumir si varan las entradas.
El estudio a priori es independiente de los datos de entrada.
3. En el estudio a posteriori, los resultados slo sern vlidos para
unas determinadas condiciones de ejecucin. Es difcil extrapolar
los resultados si se producen cambios en el hardware, sistema
operativo, lenguaje utilizado, etc. El estudio a priori es
independiente de las condiciones de ejecucin.
4. El estudio a posteriori permite hacer una evaluacin
experimental de los recursos consumidos que no es posible en el
estudio a priori.
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
17
Principio de invarianza:
Dos implementaciones de un mismo algoritmo no diferirn
ms que en una constante multiplicativa.
Si f
1
(n) y f
2
(n) son los tiempos consumidos por dos
implementaciones de un mismo algoritmo, se verifica que:
- c, d e R,
f
1
(n) s c f
2
(n)
f
2
(n) s d f
1
(n)
El estudio a posteriori trata con programas. El estudio
a priori trata con algoritmos
Es preferible el estudio a priori
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
18
COMPLEJIDAD ASINTTICA
Consiste en el clculo de la complejidad temporal a
priori de un algoritmo en funcin del tamao del
problema, n, prescindiendo de factores constantes
multiplicativos y suponiendo valores de n muy
grandes
No sirve para establecer el tiempo exacto de
ejecucin, sino que permite especificar una cota
(inferior, superior o ambas) para el tiempo de
ejecucin de un algoritmo
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
19
Ejemplos de complejidad asinttica
maximoArray(A)mximo
Entrada A array de n enteros
Salida elemento mximo de A
INICIO
maxActual A[0]
PARA i 1 HASTA n 1 HACER
SI A[i] > maxActual
ENTONCES maxActual A[i]
DEVOLVER maxActual
FIN
Ejemplo en pseudocdigo:
Buscar el mximo valor de un array
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
20
Ejemplo en pseudocdigo: Operaciones primitivas
Cmputos bsicos realizados por
un algoritmo
Identificables en pseudocdigo
Muy independiente del lenguaje de
programacin
La definicin exacta no es
importante
Ejemplos:
Evaluar una
expresin
Asignar un valor a
una variable
Indexar un array
Llamar a un
mtodo
Retornar un valor
Ejemplos de complejidad asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
21
Revisando el pseudocdigo, se puede estipular el
nmero mximo de operaciones primitivas ejecutadas
por un algoritmo, como una funcin del tamao de la
entrada
maximoArray(A)
INICIO
operaciones
maxActual A[0] 2
PARA i 1 HASTA n 1 HACER 2 + n
SI A[i] > maxActual 2(n 1)
ENTONCES maxActual A[i] 2(n 1)
{ incrementar contador i } 2(n 1)
DEVOLVER maxActual 1
FIN
Total 7n 1
Ejemplos de complejidad asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
22
El algoritmo maximoArray ejecuta 7n 1
operaciones primitivas en el peor de los casos
Se definen:
a Tiempo tardado por la op. primitiva ms rpida
b Tiempo tardado por la op. primitiva ms lenta
Sea T(n) el tiempo de ejecucin real para el peor de
los casos de maximoArray . Entonces:
a (7n 1) s T(n) s b(7n 1)
Por lo tanto, el tiempo de ejecucin T(n) est
acotado por dos funciones lineales
Ejemplos de complejidad asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
23
Un cambio en el entorno hardware/software
Afecta a T(n) en un factor constante, pero
No altera la tasa de crecimiento de T(n)
La tasa de crecimiento lineal del tiempo de
ejecucin T(n) es una propiedad intrnseca del
algoritmo maximoArray
Ejemplos de complejidad asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
24
Tasa de
crecimiento:
Lineal ~ n
Cuadrtica ~ n
2
Cbica ~ n
3
En un diagrama
logartmico, la
pendiente de la
lnea corresponde a
la tasa de
crecimiento de la
funcin
1E+0
1E+2
1E+4
1E+6
1E+8
1E+10
1E+12
1E+14
1E+16
1E+18
1E+20
1E+22
1E+24
1E+26
1E+28
1E+30
1E+0 1E+2 1E+4 1E+6 1E+8 1E+10
n
T
(
n
)
Cbica
Cuadrtica
Lineal
Ejemplos de complejidad asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
25
La tasa de
crecimiento no se
ve afectada por:
factores constantes
trminos de orden
menor
Ejemplos
10
2
n + 10
5
es una
funcin lineal
10
5
n
2
+ 10
8
n es una
funcin cuadrtica
1E+0
1E+2
1E+4
1E+6
1E+8
1E+10
1E+12
1E+14
1E+16
1E+18
1E+20
1E+22
1E+24
1E+26
1E+0 1E+2 1E+4 1E+6 1E+8 1E+10
n
T
(
n
)
Cuadrtica
Cuadrtica
Lineal
Lineal
Ejemplos de complejidad asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
26
Dadas las funciones f(n)
y g(n), se dice que f(n)
es O(g(n)) si existen
constantes positivas
c y n
0
tales que
f(n) s cg(n) para n > n
0
Ejemplo: 2n + 10 es
O(n)
2n + 10 s cn
(c 2) n > 10
n > 10/(c 2)
Elegir c = 3 y n
0
= 10
1
10
100
1,000
10,000
1 10 100 1,000
n
3n
2n+10
n
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
27
Ejemplo:
5n
3
+ 3n
2
+1 e O(n
3
)
tomando n
0
= 3, c= 6 tenemos que:
5n
3
+ 3n
2
+1 6n
3
Nota: Tambin pertenecera a O(n
4
), pero no a O(n
2
).
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
28
La notacin O
Existen diferentes notaciones para la complejidad
asinttica
Una de ellas es la notacin O, que permite especificar
la cota superior de la ejecucin de un algoritmo
La sentencia f(n) es O(g(n)) significa que la tasa de
crecimiento de f(n) no es mayor que la tasa de
crecimiento de g(n)
La notacin O sirve para clasificar las funciones de
acuerdo con su tasa de crecimiento
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
29
Ejemplo: la funcin n
2
no es O(n)
n
2
s cn
n s c
La desigualdad anterior
no puede satisfacerse
porque c debe ser una
constante
1
10
100
1,000
10,000
100,000
1,000,000
1 10 100 1,000
n
n^2
100n
10n
n
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
30
La notacin O proporciona una cota superior para la
tasa de crecimiento de una funcin
f(n) es O(g(n)) g(n) es O(f(n))
g(n) crece ms S No
f(n) crece ms No S
Igual crecimiento S S
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
31
{n
3
}
{n
2
}
Sea {g(n)} la clase (conjunto) de funciones que son
O(g(n))
Se tiene:
{n} c {n
2
} c {n
3
} c {n
4
} c {n
5
} c
donde la inclusin es estricta
{n}
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
32
Propiedades de O(f(n)):
Reflexiva: f(n)eO(f(n))
Transitiva: si f(n) e O(g(n)) y g(n) e O(h(n)),
entonces f(n) e O(h(n))
Eliminacin de constantes: O(cf(n)) = O(f(n)),
para todo c.
O(log
a
n) = O(log
b
n), para todo a y b.
Suma de rdenes: O(f(n)+g(n)) =
O(max(f(n),g(n))
Producto de rdenes: O(f(n))O(g(n)) = O(f(n)
g(n))
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
33
Jerarqua de rdenes de complejidad
La notacin O
O(1) Constante No depende del tamao del
problema
Eficiente
O(log n) Logartmica Bsqueda binaria
O(n) Lineal Bsqueda lineal
O(nlog n) Casi lineal Quick-sort
O(n
2
) Cuadrtica Algoritmo de la burbuja Tratable
O(n
3
) Cbica Producto de matrices
O(n
k
) k>3 Polinmica
O(k
n
) k>1 Exponencial Algunos algoritmos de
grafos
Intratable
O(n!) Factorial
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
34
Jerarqua de rdenes de complejidad
La notacin O
1E+0
1E+3
1E+6
1E+9
1E+12
1E+15
1E+18
1E+21
1E+24
1E+27
1E+30
1E+0 1E+2 1E+4 1E+6 1E+8 1E+10
n
T
(
n
)
Cbica
Cuadrtica
Lineal
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
35
Cambios en el entorno HW o SW afectan a factores
constantes (principio de invarianza) pero no al orden
de complejidad O(f(n))
Hay que buscar algoritmos con el menor orden de
complejidad
La eficiencia es un trmino relativo que depende del
problema
El anlisis de la eficiencia es asinttico slo es
vlido para tamaos de problema suficientemente
grandes
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
36
El anlisis asinttico de algoritmos determina el
tiempo de ejecucin en notacin O
Para realizar el anlisis asinttico
Buscar el nmero de operaciones primitivas ejecutadas en
el peor de los casos como una funcin del tamao de la
entrada
Expresar esta funcin con la notacin O
Ejemplo:
Se sabe que el algoritmo maximoArray ejecuta como
mucho 7n 1 operaciones primitivas
Se dice que maximoArray ejecuta en un tiempo O(n)
Como se prescinde de los factores constantes y de
los trminos de orden menor, se puede hacer caso
omiso de ellos al contar las operaciones primitivas
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
37
Reglas:
Si f(n) es un polinomio de grado d, entonces f(n) es
O(n
d
), es decir,
1. Prescindir de los trminos de orden menor
2. Prescindir de los factores constantes
Usar la clase ms pequea posible de funciones
Decir 2n es O(n) en vez de 2n es O(n
2
)
Usar la expresin ms simple para la clase
Decir 3n + 5 es O(n) en vez de 3n + 5 es O(3n)
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
38
Reglas prcticas:
Operaciones primitivas: O(1)
Secuencia de instrucciones: mximo de la complejidad
de cada instruccin (regla de la suma)
Condiciones simples: Tiempo necesario para evaluar la
condicin ms el requerido para ejecutar la consecuencia
(peor caso).
Condiciones alternativas: Tiempo necesario para
evaluar la condicin ms el requerido para ejecutar el
mayor de los tiempos de las consecuencias (peor caso).
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
39
Reglas prcticas:
Bucle con iteraciones fijas: multiplicar el nmero de
iteraciones por la complejidad del cuerpo (regla del
producto).
Bucle con iteraciones variables: Igual pero ponindose
en el peor caso (ejecutar el mayor nmero de iteraciones
posible).
Llamadas a subprogramas, funciones o mtodos:
Tiempo de evaluacin de cada parmetro ms el tiempo
de ejecucin del cuerpo.
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
40
Ejemplo de anlisis asinttico para
dos algoritmos de clculo de medias
prefijas
La media prefija i-sima
de un array X es la media
de los primeros (i + 1)
elementos de X
A[i] = X[0] + X[1] + +
X[i]/(i+1)
Computar el array A de medias
prefijas de otro array X tiene
aplicaciones en anlisis financiero
0
5
10
15
20
25
30
35
1 2 3 4 5 6 7
X
A
La notacin O
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
41
Medias prefijas (Cuadrtico)
La notacin O
mediasPrefijas1(vector,n) vector
INICIO OPERACIONES
A nuevo Array de n enteros n
i 0 1
MIENTRAS (i < n) n + 1
s X[0] n
j 1 n
MIENTRAS (j <= i) 1,2,3,4,,n
s s + X[j] 1,2,3,,n-1
j j + 1 1,2,3,,n-1
FIN-MIENTRAS
A[i] s / (i + 1) n
i i + 1 n
FIN-MIENTRAS n
DEVOLVER A 1
FIN
Tiempo de ejecucin = O(7n +3 + (n +1)n/2 + 2(n-1+1)n/2) O(n
2
)
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
42
Medias prefijas (Lineal)
La notacin O
mediasPrefijas2(vector,n) vector
INICIO OPERACIONES
A nuevo Array de n enteros n
s 0 1
i 0 1
MIENTRAS (i < n) n + 1
s s + X[j] n
A[i] s / (i + 1) n
i i + 1 n
FIN-MIENTRAS n
DEVOLVER A 1
FIN
Tiempo de ejecucin = O(n)
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
43
Anlisis del caso mejor, peor y medio
El tiempo de ejecucin de un algoritmo puede variar
con los datos de entrada.
Ejemplo (ordenacin por insercin): :
INICIO
i 1
MIENTRAS (i < n)
x T[i]
j i - 1
MIENTRAS (j > 0 Y T[j] > x)
T[j+1] T[j]
j j - 1
FIN-MIENTRAS
T[j+1] x
i i + 1
FIN-MIENTRAS
FIN
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
44
Anlisis del caso mejor, peor y medio
Si el vector est completamente ordenado (mejor
caso) el segundo bucle no realiza ninguna
iteracin Complejidad O(n).
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
45
Anlisis del caso mejor, peor y medio
Si el vector est ordenado de forma decreciente,
el peor caso se produce cuando x es menor que
T[j] para todo j entre 1 e i -1.
En esta situacin la salida del bucle se
produce cuando j = 0.
En este caso, el algoritmo realiza i 1
comparaciones.
Esto ser cierto para todo valor de i entre 1
y n -1 si el orden es decreciente.
El nmero total de comparaciones ser:
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
46
Anlisis del caso mejor, peor y medio
La complejidad en el caso promedio estar entre
O(n) y O(n
2
).
Para hallarla habra que calcular
matemticamente la complejidad de todas las
permutaciones de todos valores que se
pueden almacenar en el vector.
Se puede demostrar que es O(n
2
).