Vous êtes sur la page 1sur 46

Tema 3: Complejidad

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

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

Complejidad computacional y
asinttica

Entrada

Algoritmo

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Salida

Complejidad computacional y
asinttica

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Complejidad computacional y
asinttica

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Complejidad computacional y
asinttica

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Complejidad computacional y
asinttica
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...

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Complejidad computacional y
asinttica
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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Complejidad computacional y
asinttica
Factores que influyen en la complejidad
Tamao del problema
Naturaleza de los datos de entrada
Recursos hardware y software

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Complejidad computacional y
asinttica
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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

10

Complejidad computacional y
asinttica
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.

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

11

Complejidad computacional y
asinttica
Factores que influyen en la complejidad
Naturaleza de los datos de
entrada:

Caso peor: los datos de


entrada consumen el mximo
(cota superior).
Caso promedio: los datos
se distribuyen de forma
aleatoria. Difcil de calcular.

120

Tiempo de ejecucin

Caso mejor: los datos de


entrada consumen el mnimo

caso mejor
caso medio
caso peor
100
80
60
40
20
0

1000

2000

3000

4000

Tamao de Entrada
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

12

Complejidad computacional y
asinttica
Enfoques para medir la complejidad de un
algoritmo:
Enfoque empricos o a posteriori
Enfoque terico o a priori.

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

13

Complejidad computacional y
asinttica
Enfoque empricos o a posteriori
9000
8000
7000

Tiempo (ms)

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

6000
5000
4000
3000
2000
1000
0

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

50

Tamao Entrada

100
14

Complejidad computacional y
asinttica

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

15

Complejidad computacional y
asinttica

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).
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.
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.
El estudio a posteriori permite hacer una evaluacin
experimental de los recursos consumidos que no es posible en el
estudio a priori.

2.

3.

4.

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

16

Complejidad computacional y
asinttica
Principio de invarianza:
Dos implementaciones de un mismo algoritmo no diferirn
ms que en una constante multiplicativa.
Si f1(n) y f2(n) son los tiempos consumidos por dos
implementaciones de un mismo algoritmo, se verifica que:
c, d R,
f1(n) cf2(n)
f2(n) df1(n)

El estudio a posteriori trata con programas. El estudio


a priori trata con algoritmos

Es preferible el estudio a priori


Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

17

Complejidad computacional y
asinttica
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
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

18

Ejemplos de complejidad asinttica

Ejemplo en pseudocdigo:
Buscar el mximo valor de un array
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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

19

Ejemplos de complejidad asinttica

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Ejemplos:
Evaluar una
expresin
Asignar un valor a
una variable
Indexar un array
Llamar a un
mtodo
Retornar un valor

20

Ejemplos de complejidad asinttica

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
maxActual A[0]
PARA i 1 HASTA n 1 HACER
SI A[i] maxActual
ENTONCES maxActual A[i]
{ incrementar contador i }
DEVOLVER maxActual

operaciones
2
2+n
2(n 1)
2(n 1)
2(n 1)
1

FIN
Total

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

7n 1

21

Ejemplos de complejidad asinttica


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) T(n) b(7n 1)
Por lo tanto, el tiempo de ejecucin T(n) est
acotado por dos funciones lineales
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

22

Ejemplos de complejidad asinttica


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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

23

Ejemplos de complejidad asinttica


Tasa de
crecimiento:

En un diagrama
logartmico, la
pendiente de la
lnea corresponde a
la tasa de
crecimiento de la
funcin

T (n )

Lineal n
Cuadrtica n2
Cbica n3

1E+30
1E+28
1E+26
1E+24
1E+22
1E+20
1E+18
1E+16
1E+14
1E+12
1E+10
1E+8
1E+6
1E+4
1E+2
1E+0
1E+0

Cbica
Cuadrtica
Lineal

1E+2

1E+4

1E+6

1E+8

1E+10

n
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

24

Ejemplos de complejidad asinttica

factores constantes
trminos de orden
menor

Ejemplos
102n + 105 es una
funcin lineal
105n2 + 108n es una
funcin cuadrtica

T (n )

La tasa de
crecimiento no se
ve afectada por:

1E+26
1E+24
1E+22
1E+20
1E+18
1E+16
1E+14
1E+12
1E+10
1E+8
1E+6
1E+4
1E+2
1E+0
1E+0

Cuadrtica
Cuadrtica
Lineal
Lineal

1E+2

1E+4

1E+6

1E+8

1E+10

n
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

25

La notacin O
Dadas las funciones f(n)
y g(n), se dice que f(n)
es O(g(n)) si existen
constantes positivas
c y n0 tales que
f(n) cg(n) para n n0
Ejemplo: 2n + 10 es
O(n)
2n + 10 cn
(c 2) n 10
n 10/(c 2)
Elegir c = 3 y n0 = 10
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

10,000
3n
2n+10

1,000

100

10

1
1

10

100

1,000

n
26

La notacin O
Ejemplo:
5n3 + 3n2 +1 O(n3)
tomando n0= 3, c= 6 tenemos que:
5n3 + 3n2 +1 6n3
Nota: Tambin pertenecera a O(n4), pero no a O(n2).

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

27

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

28

La notacin O
Ejemplo: la funcin n2 1,000,000
no es O(n)

n^2
100n

100,000

cn
nc
10,000
La desigualdad anterior
no puede satisfacerse
1,000
porque c debe ser una
100
constante
n2

10n
n

10
1
1

10

100

1,000

n
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

29

La notacin O
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))

S
No
S

No
S
S

g(n) crece ms
f(n) crece ms
Igual crecimiento

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

30

La notacin O
Sea {g(n)} la clase (conjunto) de funciones que son
O(g(n))
Se tiene:
{n} {n2} {n3} {n4} {n5}
donde la inclusin es estricta

{n3}
{n2}
{n}
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

31

La notacin O

Propiedades de O(f(n)):
Reflexiva: f(n)O(f(n))
Transitiva: si f(n) O(g(n)) y g(n) O(h(n)),
entonces f(n) O(h(n))
Eliminacin de constantes: O(cf(n)) = O(f(n)),
para todo c.
O(logan) = O(logbn), 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))

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

32

La notacin O

Jerarqua de rdenes de complejidad

O(1)

Constante

No depende del tamao del


problema

O(log n)

Logartmica

Bsqueda binaria

O(n)

Lineal

Bsqueda lineal

O(nlog n)

Casi lineal

Quick-sort

O(n2)

Cuadrtica

Algoritmo de la burbuja

O(n3)

Cbica

Producto de matrices

O(nk) k>3

Polinmica

O(kn) k>1

Exponencial

O(n!)

Factorial

Algunos algoritmos de
grafos

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

Eficiente

Tratable

Intratable

33

La notacin O

Jerarqua de rdenes de complejidad


1E+30
1E+27
1E+24

T (n )

1E+21
1E+18

Cbica
Cuadrtica
Lineal

1E+15
1E+12
1E+9
1E+6
1E+3
1E+0
1E+0

1E+2

1E+4

1E+6

1E+8

1E+10

n
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

34

La notacin O

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

35

La notacin O
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
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

36

La notacin O

Reglas:

Si f(n) es un polinomio de grado d, entonces f(n) es


O(nd), 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(n2)

Usar la expresin ms simple para la clase


Decir 3n + 5 es O(n) en vez de 3n + 5 es O(3n)

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

37

La notacin O

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

38

La notacin O

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.

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

39

La notacin O
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)

35
30

X
A

25
20
15
10
5

Computar el array A de medias


prefijas de otro array X tiene
aplicaciones en anlisis financiero
Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

0
1 2 3 4 5 6 7
40

La notacin O
Medias prefijas (Cuadrtico)
mediasPrefijas1(vector,n) vector
INICIO
A nuevo Array de n enteros
i0
MIENTRAS (i < n)
s X[0]
j1
MIENTRAS (j <= i)
s s + X[j]
jj+1
FIN-MIENTRAS
A[i] s / (i + 1)
ii+1
FIN-MIENTRAS
DEVOLVER A
FIN

OPERACIONES
n
1
n+1
n
n
1,2,3,4,,n
1,2,3,,n-1
1,2,3,,n-1
n
n
n
1

Tiempo de ejecucin = O(7n +3 + (n +1)n/2 + 2(n-1+1)n/2) O(n2)


Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

41

La notacin O
Medias prefijas (Lineal)
mediasPrefijas2(vector,n) vector
INICIO
A nuevo Array de n enteros
s0
i0
MIENTRAS (i < n)
s s + X[j]
A[i] s / (i + 1)
ii+1
FIN-MIENTRAS
DEVOLVER A
FIN

OPERACIONES
n
1
1
n+1
n
n
n
n
1

Tiempo de ejecucin = O(n)

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

42

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
i1
MIENTRAS (i < n)
x T[i]
ji-1
MIENTRAS (j > 0 Y T[j] > x)
T[j+1] T[j]
jj-1
FIN-MIENTRAS
T[j+1] x
ii+1
FIN-MIENTRAS
FIN

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

43

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

44

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

45

Anlisis del caso mejor, peor y medio

La complejidad en el caso promedio estar entre


O(n) y O(n2).

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

Estructura de Datos
Ingeniera en Informtica. Universidad Carlos III de Madrid

46

Vous aimerez peut-être aussi