Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Rafael del Vado V rseda Dpto. de Sistemas Inform aticos y Computaci on Universidad Complutense de Madrid Curso 2008-2009
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
2 / 37
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.
3 / 37
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
23
4 / 37
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.
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
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.
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
= = = =
de de de de
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
8 / 37
Ejemplo
2 Tm ax = A n B n + C
9 / 37
Factores
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.
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 )
11 / 37
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
13 / 37
Ejemplos
3n O(2n )
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.
14 / 37
Propiedades
15 / 37
Propiedades
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.
17 / 37
f ( n)
Demostraci on de .
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)
1 c
f (n ) g (n )
1 1 f (n) = l m l m =0 n c n g( n ) c
1 c
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
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
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)
20 / 37
f ( n)
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) }
22 / 37
f ( n)
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)
si k = l
l mn Q(x) = si k > l
23 / 37
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 )
24 / 37
Ordenes de complejidad
n3
n2 nlog(n) n log(n) 10 20 30 40
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.
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
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.
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 )
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
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 )
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
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 )
1 = n 1 (n )
i=2
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.
34 / 37
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 )
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
36 / 37
( 2 p ) n+p 2
(n )
37 / 37