You are on page 1of 37

An alisis de la complejidad de algoritmos

Rafael del Vado V rseda Dpto. de Sistemas Inform aticos y Computaci on Universidad Complutense de Madrid Curso 2008-2009

Rafael del Vado V rseda (UCM)

1 / 37

Bibliograf a

Pe na, R. Dise no de programas. Formalismo y abstracci on (Tercera Edici on). Prentice Hall, 2005. Cap tulo 1 Mart Oliet, N.; Palomino Tarjuelo, M.; Verdejo L opez, J. A. Introducci on a la computaci on. Colecci on Base Universitaria, Anaya, 2006. Cap tulo 4 Mart Oliet, N.; Segura D az, C. M.; Verdejo L opez, J. A. Especicaci on, derivaci on y an alisis de algoritmos. Colecci on Prentice Practica, Pearson, Prentice Hall, 2006. Cap tulo 3

Rafael del Vado V rseda (UCM)

2 / 37

Una leyenda ajedrec stica


Mucho tiempo atr as, el espabilado visir Sissa ben Dahir invent o el juego del ajedrez para el rey Shirham de la India. El rey ofreci o a Sissa la posibilidad de elegir su propia recompensa. Sissa le dijo al rey que pod a recompensarle en trigo o bien con una cantidad equivalente a la cosecha de trigo en su reino de dos a nos, o bien con una cantidad de trigo que se calcular a de la siguiente forma:
un grano de trigo en la primera casilla de un tablero de ajedrez, m as dos granos de trigo en la segunda casilla, m as cuatro granos de trigo en la tercera casilla, y as sucesivamente, duplicando el n umero de granos en cada casilla, hasta llegar a

la u ltima casilla. El rey pens o que la primera posibilidad era demasiado cara mientras que la segunda, medida adem as en simples granos de trigo, daba la impresi on de serle claramente favorable. As que sin pens arselo dos veces pidi o que trajeran un saco de trigo para hacer la cuenta sobre el tablero de ajedrez y recompensar inmediatamente al visir.

Rafael del Vado V rseda (UCM)

3 / 37

Es una buena elecci on?

El n umero de granos en la primera la result o ser: 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 = 255 La cantidad de granos en las dos primeras las es:

2i = 216 1 = 65 535
i=0

15

Al llegar a la tercera la el rey empez o a pensar que su elecci on no hab a sido acertada, pues para llenar las tres las necesitaba

2i = 224 1 = 16 777 216


i=0

23

granos, que pesan alrededor de 600 kilos . . .

Rafael del Vado V rseda (UCM)

4 / 37

Endeudado hasta las cejas

En efecto, para rellenar las 64 casillas del tablero hacen falta

2i = 264 1 = 18 446 744 073 709 551 615 1,84 1019


i=0

63

granos, cantidad equivalente a las cosechas mundiales actuales de 1000 a nos!!. La funci on 2n 1 (exponencial) representa el n umero de granos adeudados en funci on del n umero n de casillas a rellenar. Toma valores desmesurados aunque el n umero de casillas sea peque no. El coste en tiempo de algunos algoritmos expresado en funci on del tama no de los datos de entrada es tambi en exponencial. Por ello es importante estudiar el coste de los algoritmos y ser capaces de comparar los costes de algoritmos que resuelven un mismo problema.

Rafael del Vado V rseda (UCM)

5 / 37

Motivaci on

Entendemos por eciencia el rendimiento de una actividad en relaci on con el consumo de un cierto recurso. Es diferente de la efectividad. Ejemplo para ver la importancia de que el coste del algoritmo sea peque no.
n 10 102 103 104 10
5

log10 n 1 ms 2 ms 3 ms 4 ms 5 ms 6 ms

n 10 ms 0,1 s 1s 10 s 1,67 m 16,67 m

n log10 n 10 ms 0,2 s 3s 40 s 8,33 m 1,67 h

n2 0,1 s 10 s 16,67 m 1,16 d 115,74 d 31,71 a

n3 1s 16,67 m 11,57 d 31,71 a 317,1 sig 317 097,9 sig

2n 1,02 s 4,02 1020 sig 3,4 10291 sig 6,3 103000 sig 3,16 1030093 sig 3,1 10301020 sig

106

Es un error pensar que basta esperar algunos a nos para que algoritmos tan costosos se puedan ejecutar con un coste en tiempo razonable.

Rafael del Vado V rseda (UCM)

6 / 37

Qu e medimos y c omo?

La eciencia es mayor cuanto menor es la complejidad o el coste (consumo de recursos). Necesitamos determinar c omo se ha de medir el coste de un algoritmo, de forma que sea posible compararlo con otros que resuelven el mismo problema y decidir cu al de todos es el m as eciente. Una posibilidad para medir el coste de un algoritmo es contar cu antas instrucciones de cada tipo se ejecutan, multiplicar este n umero por el tiempo que emplea la instrucci on en ejecutarse, y realizar la suma para los diferentes tipos.
ta tc ti tv

= = = =

tiempo tiempo tiempo tiempo

de de de de

asignaci on comparaci on incremento acceso a un vector

Rafael del Vado V rseda (UCM)

7 / 37

Ejemplo
Ordenaci on por selecci on del vector V [1..n] para i = 1 hasta n 1 hacer pmin : = i ; para j = i + 1 hasta n hacer si V [j] < V [pmin] entonces pmin : = j fsi fpara ; intercambiar (V [i], V [pmin]) fpara

control del primer bucle: ta + (n 1)ti + ntc primera asignaci on: (n 1)ta control del bucle interno, para cada i: ta + (n i)ti + (n i + 1)tc instrucci on si, para cada i, tiempo m nimo: (n i)(2tv + tc ) tiempo m aximo: (n i)(2tv + tc ) + (n i)ta

intercambiar: (n 1)(2tv + 3ta )

Rafael del Vado V rseda (UCM)

8 / 37

Ejemplo

El bucle interno en total en el caso peor, el m as desfavorable,


n1 i=1

(ta + tc + (n i)(ti + 2tc + 2tv + ta ))

Para no cansarnos, concluimos que


2 Tm n = An Bn + C

2 Tm ax = A n B n + C

Rafael del Vado V rseda (UCM)

9 / 37

Factores

El tiempo de ejecuci on de un algoritmo depende en general de tres factores:


1

El tama no de los datos de entrada. Por ejemplo: Para un vector: su longitud.

Para un n umero natural: su valor o el n umero de d gitos. Para un grafo: el n umero de v ertices y/o el n umero de aristas.
2

El contenido de esos datos. El c odigo generado por el compilador y el computador concreto utilizados.

Rafael del Vado V rseda (UCM)

10 / 37

Si el tiempo que tarda un algoritmo A en procesar una entrada concreta x lo denotamos por tA (x), denimos la complejidad de A en el caso peor como
TA (n) = m ax{tA (x) | x de tama no n }

Otra posibilidad es realizar un an alisis de la eciencia en el caso promedio. Para ello necesitamos conocer el tiempo de ejecuci on de cada posible ejemplar y la frecuencia con que se presenta, es decir, su distribuci on de probabilidades. Denimos la complejidad de un algoritmo A en el caso promedio como
TMA (n) =

x de tama no n

p ( x ) tA ( x )

siendo p(x) [0..1] la probabilidad de que la entrada sea x.

Rafael del Vado V rseda (UCM)

11 / 37

Medidas asint oticas


El u nico factor del que van a depender las funciones que representan el coste de un algoritmo es el tama no de los datos de entrada.
+. Por eso, trabajamos con funciones f : IN IR0

No nos importa tanto las funciones concretas, sino la forma en la que crecen. Denici on El conjunto de las funciones del orden de f (n), denotado O(f (n)), se dene como
+ O(f (n)) = {g : IN IR0 | c IR+ , n0 IN.n n0 .g(n) cf (n)}

Asimismo, diremos que una funci on g es del orden de f (n) cuando g O(f (n)). Decimos que el conjunto O(f (n)) dene un orden de complejidad. cf (n) g(n )

Si el tiempo de un algoritmo est a descrito por una funci on T (n) O(f (n)) diremos que el tiempo de ejecuci on del algoritmo es del orden de f (n).
Rafael del Vado V rseda (UCM) 12 / 37

Ejemplos
log n O(n)

Encontramos n0 = 1 y c = 1 tal que n 1. log n n Lo demostramos por inducci on. Base: n = 1, log 1 = 0 1 Paso inductivo: h.i. log n n log(n + 1) log 2n log 2 + log n = 1 + log n h.i. n + 1
( n + 1 ) 2 O ( n2 )

Demostramos por inducci on que n 1.(n + 1)2 4n2 Base: n = 1, (1 + 1)2 4 12 Paso inductivo: h.i. (n + 1)2 4n2 Para n + 1

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

4(n + 1)2 4n2 + 4 + 8n 4n2 + 6n + 1


0

Rafael del Vado V rseda (UCM)

13 / 37

Ejemplos

3n O(2n )

Si perteneciera, tendr amos c IR+ , n0 IN tal que 3n c 2n para todo n n0 .


3 )n c para todo n n . Esto implica que ( 2 0

Pero esto es falso porque dado c cualquiera, basta tomar n = log1,5 c para que n (3 2 ) > c, es decir, no se puede acotar superiormente.

Rafael del Vado V rseda (UCM)

14 / 37

Propiedades

O(a f (n)) = O(f (n)) con a IR+


() g O(a f (n)) c IR+ , n0 IN tal que n n0 .g(n) c a f (n) Tomando c = c a se cumple que n n0 .g(n) c f (n), luego g O(f (n)) () g O(f (n)) c IR+ , n0 IN tal que n n0 .g(n) c f (n) c Entonces tomando c = a se cumple que n n0 .g(n) c a f (n), luego g O(a f (n))

La base del logaritmo no importa: O(loga n) = O(logb n), con a, b > 1.


logb n = loga n loga b

Rafael del Vado V rseda (UCM)

15 / 37

Propiedades

Si f O(g) y g O(h), entonces f O(h).


f O(g) c1 IR+ , n1 IN tal que n n1 .f (n) c1 g(n) g O(h) c2 IR+ , n2 IN tal que n n2 .g(n) c2 h(n) Tomando n0 = m ax(n1 , n2 ) y c = c1 c2 , se cumple

n n0 .f (n) c1 g(n) c1 c2 h(n)


Y por tanto f O(h).

Rafael del Vado V rseda (UCM)

16 / 37

Propiedades

Regla de la suma: O(f + g) = O(m ax(f , g)). + () h O(f + g) c IR , n0 IN.n n0 .h(n) c (f (n) + g(n)) Pero f m ax(f , g) y g m ax(f , g), luego
h(n) c (m ax(f (n), g(n)) + m ax(f (n), g(n))) = 2 c m ax(f (n), g(n)) Luego tomando c = 2 c se cumple que n n0 .h(n) c m ax(f (n), g(n)) y por tanto h O(m ax(f , g)). () h O(m ax(f , g)) c IR+ , n0 IN.n n0 .h(n) c m ax(f (n), g(n)) Pero m ax(f , g) f + g, luego h O(f + g) trivialmente.

Regla del producto: Si g1 O(f1 ) y g2 O(f2 ), entonces g1 g2 O(f1 f2 ).

Rafael del Vado V rseda (UCM)

17 / 37

Teorema del l mite

l mn g(n) = m IR+ l mn g(n) = 0 l mn g(n) = +


f ( n) f ( n)

f ( n)

f O (g) y g O (f ) f O (g) y g O (f ) f O (g) y g O (f )

O (f ) = O (g) O (f ) O (g) O (f ) O (g)

Demostraci on de .

f (n ) | < . > 0.n0 IN tal que n n0 .| g (n )

Tomando = 1, tenemos n n0 .f (n) < g(n) f O(g) Demostramos g O(f ) por reducci on al absurdo. g O(f ) n0 IN, c IR+ tal que n n0 . g(n) cf (n)

n0 IN, c IR+ tal que n n0 .

1 c

f (n ) g (n )

1 1 f (n) = l m l m =0 n c n g( n ) c
1 c

0 contradicci on con c IR+ .

Rafael del Vado V rseda (UCM)

18 / 37

Ejemplos
log n O(n)

l m

n = log n

=L Hopital l m

n ln 2 ln 2 = l m = l m n ln 2 = n 1/n n ln n

P(x) = ak xk + ak1 xk1 + . . . + a1 x + a0 , con ak IR+ , P(x) O(xk )

l m

P (x) = ak > 0 xk

O(nk ) O(2n )

l mn

2n nk

= = =

2n (ln 2)2 2n ln 2 = l mn k(k1)nk2 = (k veces) knk1 2n (ln 2)k (ln 2)k l mn k!n0 = k! l mn 2n =

=L Hopital =

l mn

O(2n ) O(n! )
n

l m

n! n n1 4321 44 4321 3 = l m ... l m ... = l m 2n3 = n 2 n 2 2 2n 2 2222 2222 4 n


19 / 37

Rafael del Vado V rseda (UCM)

Cotas inferiores

+ . El conjunto (f (n)), le Denici on Sea f : IN IR0 do omega de f (n), se dene como + (f (n)) = {g : IN IR0 | c IR+ , n0 IN.n n0 . g(n) cf (n)}

g(n ) cf (n)

Cuando decimos que el coste de un algoritmo est a en (f (n)) lo que estamos diciendo es que la complejidad del algoritmo no es mejor que la representada por la funci on f . Principio de dualidad g (f ) f O(g)

Rafael del Vado V rseda (UCM)

20 / 37

Teorema del l mite

l mn g(n) = m IR+ l mn g(n) = 0 l mn g(n) = +


f ( n) f ( n)

f ( n)

g (f ) y f (g) g (f ) y f (g) g (f ) y f (g)

Rafael del Vado V rseda (UCM)

21 / 37

Orden exacto

Denici on El conjunto de funciones (f (n)), le do del orden exacto de f (n), se dene como (f (n)) = O(f (n)) (f (n)).
+ (f (n)) = {g : IN IR0 | c1 , c2 IR+ , n0 IN.n n0 . c1 f (n) g(n) c2 f (n) }

c2 f (n) g(n ) c1 f (n)

Rafael del Vado V rseda (UCM)

22 / 37

Teorema del l mite

l mn g(n) = m IR+ l mn g(n) = 0 l mn g(n) = +


f ( n) f ( n)

f ( n)

g (f ) y f (g) f O(g) pero f (g) g O(f ) pero g (f )

Ejemplo: P(x) = ak xk + ak1 xk1 + . . . + a1 x + a0 , con ak > 0, Q(x) = bl xl + bl1 xl1 + . . . + b1 x + b0 , con bl > 0, entonces l mn Q(x) = 0 si k < l l mn Q(x) =
P ( x) P ( x) ak bl P ( x)

P(x) O(Q(x)) P(x) (Q(x)) P(x) (Q(x))

si k = l

l mn Q(x) = si k > l

Rafael del Vado V rseda (UCM)

23 / 37

Jerarqu a de ordenes de complejidad

O(1) O(log n) O(n) O(n log n) O(n2 ) . . . O(nk ) . . . O(2n ) O(n!) razonables en la pr actica tratables intratables

La notaci on O(f ) nos da una cota superior del tiempo de ejecuci on T (n) de un algoritmo. on f (n) tal que Normalmente estaremos interesados en la menor funci T (n) O(f (n)). Ejemplos: cotas superiores hay muchas, pero algunas son poco informativas 3n O(n) 3n O(n2 ) 3n O(2n )

Rafael del Vado V rseda (UCM)

24 / 37

Ordenes de complejidad

2n 105 104 103 102 10

n3

n2 nlog(n) n log(n) 10 20 30 40

Rafael del Vado V rseda (UCM)

25 / 37

Supongamos que tenemos 6 algoritmos diferentes tales que su menor cota superior est a en O(log n), O(n), O(n log n), O(n2 ), O(n3 ) y O(2n ). Supongamos que para un tama no n = 100 todos tardan 1 hora en ejecutarse. Qu e ocurre si duplicamos el tama no de los datos? T (n ) k1 log n k2 n k3 n log n k4 n2 k5 n3 k6 2n n = 100 1h. 1h. 1h. 1h. 1h. 1h. n = 200 1, 15h. 2h. 2, 3h. 4h. 8h. 1, 27 1030 h.

Rafael del Vado V rseda (UCM)

26 / 37

Qu e ocurre si duplicamos la velocidad del computador? O lo que es lo mismo, qu e ocurre si duplicamos el tiempo disponible? T (n ) k1 log n k2 n k3 n log n k4 n2 k5 n3 k6 2n t = 1h. n = 100 n = 100 n = 100 n = 100 n = 100 n = 100 t = 2h. n = 10000 n = 200 n = 178 n = 141 n = 126 n = 101

Rafael del Vado V rseda (UCM)

27 / 37

An alisis de algoritmos
Podemos simplicar el c alculo del coste (en el caso peor) de un algoritmo gracias a la teor a presentada.
1

Las instrucciones de asignaci on, entrada/salida, o expresiones aritm eticas tienen un coste en (1). Para calcular el coste de una composici on secuencial se utiliza la regla de la suma. Si el coste de S1 est a en (f1 (n)) y el coste de S2 est a en (f2 (n)), entonces el coste de S1 ; S2 est a en (m ax(f1 (n), f2 (n))). El coste de una instrucci on condicional si B entonces S1 si no S2 fsi est a en (m ax(fB (n), f1 (n), f2 (n))). Para calcular el coste de una instrucci on iterativa mientras B hacer S fmientras utilizamos la regla del producto. Si el n umero de iteraciones est a en (fiter (n)), el coste total del bucle est a en (fB,S (n) fiter (n)). Si el coste de cada iteraci on es distinto, realizamos una suma desde 1 hasta fiter (n) de los costes individuales.

Rafael del Vado V rseda (UCM)

28 / 37

Ejemplos
Producto de matrices cuadradas. fun producto (A[1..n, 1..n], B[1..n, 1..n] de ent) dev C[1..n, 1..n] de ent var i, j, k : nat, s : ent para i = 1 hasta n hacer para j = 1 hasta n hacer s := 0 ; para k = 1 hasta n hacer s : = s + A[i, k] B[k, j] fpara ; C [ i, j ] : = s fpara fpara un T ( n ) ( n3 )

Rafael del Vado V rseda (UCM)

29 / 37

Ejemplos

Ordenaci on por selecci on. proc ord-selecci on (V [1..n] de ent) para i = 1 hasta n 1 hacer pmin : = i ; para j = i + 1 hasta n hacer si V [j] < V [pmin] entonces pmin : = j fsi fpara ; intercambiar (V [i], V [pmin]) fpara fproc T (n) ( (n i)) = (n2 )
i=1 n1

Rafael del Vado V rseda (UCM)

30 / 37

Ejemplos
Determinar si una matriz cuadrada es sim etrica. fun sim etrica? (V [1..n, 1..n] de ent) dev b : bool var i, j : nat b : = cierto ; i : = 1 ; mientras i n b hacer j := i + 1 ; mientras j n b hacer b : = (V [i, j] = V [j, i]) ; j := j + 1 fmientras ; i := i + 1 fmientras un Tm n ( n ) ( 1 )
2 Tm ax (n) (n )

Rafael del Vado V rseda (UCM)

31 / 37

Instrucci on cr tica
Se puede simplicar m as el c alculo si hacemos uso del concepto de instrucci on cr tica: instrucci on que m as veces se ejecuta. Calcular el n umero de veces que se ejecuta la instrucci on cr tica. proc ord-selecci on (V [1..n] de ent) para i = 1 hasta n 1 hacer pmin : = i ; para j = i + 1 hasta n hacer si V [j] < V [pmin] entonces pmin : = j fsi fpara ; intercambiar (V [i], V [pmin]) fpara fproc
n1 i=1

(n i ) =

(n 1 + (n (n 1)))(n 1) n (n 1) = 2 2

Rafael del Vado V rseda (UCM)

32 / 37

Ejemplo
proc ord-inserci on (V [1..n] de ent) para i = 2 hasta n hacer elem : = V [i] ; j := i 1 ; mientras j > 0 c elem < V [j] hacer V [ j + 1] : = V [ j ] ; j := j 1 fmientras ; V [j + 1] : = elem fpara fproc caso peor: Tm ax (n) =

i=
i=2 n

(n+2)(n1) 2

( n2 )

caso mejor: Tm n ( n ) = caso promedio: ( n2 )

1 = n 1 (n )
i=2

Rafael del Vado V rseda (UCM)

33 / 37

Limitaciones pr acticas

Si tenemos dos algoritmos con costes T1 (n) = 3n3 y T2 (n) = 600n2 , cu al es mejor? En principio es mejor el segundo, ya que O(n2 ) O(n3 ). Pero esto es para valores de n sucientemente grandes. Aqu n 200.

Rafael del Vado V rseda (UCM)

34 / 37

Complejidad en promedio: ejemplo

fun b usqueda-sec (V [1..n] de ent, x : ent) dev i : nat i := 1 ; mientras i n c V [i] = x hacer i := i + 1 fmientras un Caso peor: (n) Caso mejor: (1) Caso medio? TMA (n) =

x de tama no n

p ( x ) tA ( x )

Rafael del Vado V rseda (UCM)

35 / 37

Primer an alisis: x est a con seguridad en V. Todos los elementos son distintos y x puede 1 aparecer en cualquier posici on con la misma probabilidad, n . Hacemos clases de vectores, seg un lo que tarde el algoritmo. Clases C1 si V [1] = x C2 si V [1] = x y V [2] = x . . . Cn si (i : 1 i < n : V [i] = x) V [n] = x i 1 2 i n probabilidad 1/n 1/n . . . 1/n . . . 1/n comparaciones 1 2 TMA (n) = i n 1 n n+1 i= n i 2 =1

Rafael del Vado V rseda (UCM)

36 / 37

Segundo an alisis: x est a con probabilidad p, 0 p 1. La probabilidad de que est e en la posici on i es


p n.

Una clase m as, n + 1, i : 1 i n : V [i] = x. Se realizan n comparaciones. TMA (n)


n+1 = ( n i = 1 n i ) + (1 p)n = p 2 + (1 p)n p

( 2 p ) n+p 2

(n )

Rafael del Vado V rseda (UCM)

37 / 37