Está en la página 1de 46

Estructura de Datos

Ingeniera en Informtica. Universidad Carlos III de Madrid


1
Tema 3: Complejidad
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
2
ndice
3.1 Complejidad computacional y asinttica

3.2 Ejemplos de complejidad asinttica

3.3 La notacin O

3.4 Anlisis del caso mejor, peor y medio

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
3
Complejidad computacional y
asinttica
Algoritmo Entrada Salida
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
4
Para resolver un problema suele ser habitual disponer de
varios algoritmos.
Ejemplo: para obtener el m.c.d. de dos nmeros se puede:
Clculo de divisores
Descomponer en factores primos
Utilizar el Algoritmo de Euclides
El objetivo es elegir el algoritmo ms eficiente de ellos
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
5
Regla: La eleccin del algoritmo nunca debera afectar a la
correccin de la solucin ni a la claridad (evitar algoritmos
incomprensibles).
Excepcin: A veces se eligen algoritmos aproximados o
heursticos porque la solucin correcta resulta inmanejable.
No alcanzan la solucin ptima pero s a una solucin
aceptable.
Ejemplos:
Algoritmo aproximado: Clculo de la raz cuadrada
Heurstica: Problema del viajante
Mito:
La capacidad de computacin es ilimitada, por qu preocuparse
de la eficiencia si siempre podemos encontrar un sistema ms
potente?
Adems est la Ley de Moore
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
6
Para comparar algoritmos se puede utilizar una medida del
grado de dificultad del algoritmo: la complejidad
computacional

COMPLEJIDAD COMPUTACIONAL
Indica el esfuerzo que hay que realizar para aplicar un
algoritmo y lo costoso que ste resulta.

Dicho coste que se puede medir de diversas formas (espacio,
tiempo...)

Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
7
Un algoritmo es ms eficiente cuanto menos complejo
sea
La eficiencia suele medirse en trminos de consumo de
recursos:
Espaciales: cantidad de memoria que un algoritmo consume o
utiliza durante su ejecucin Complejidad espacial
Temporales: tiempo que necesita el algoritmo para ejecutarse
Complejidad temporal
Otros: utilizacin de CPU, utilizacin de perifricos, tiempo y
coste de implementacin...
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
8
Objetivo: encontrar algoritmos con la menor
complejidad espacial y temporal
Menor complejidad espacial suele implicar mayor
complejidad temporal
Nos centraremos en complejidad temporal por
ser el recurso ms crtico
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
9
Factores que influyen en la complejidad

Tamao del problema

Naturaleza de los datos de entrada

Recursos hardware y software
Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
10
Factores que influyen en la complejidad
Tamao del problema: magnitud(es) que al
aumentar incrementan la complejidad del algoritmo.

Ejemplos:
Ordenacin de un vector: nmero de elementos
Factorizar un nmero en sus factores primos: valor del
nmero

Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
11
Factores que influyen en la complejidad
Naturaleza de los datos de entrada: en funcin de
cules sean los datos del problema se ejecutarn o
no determinadas instrucciones de decisin y ser
distinto el nmero de iteraciones de los bucles el
problema se resolver en ms o en menos tiempo.

Ejemplo:
buscar en un vector el valor que est almacenado en la primera
celda resulta trivial en la bsqueda lineal.


Complejidad computacional y
asinttica
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid
12
Factores que influyen en la complejidad


0
20
40
60
80
100
120
T
i
e
m
p
o

d
e

e
j
e
c
u
c
i

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
).

También podría gustarte