Está en la página 1de 32

La eficiencia de los algoritmos

Anlisis y Diseo de Algoritmos

La eficiencia de los algoritmos









Comparacin de algoritmos
Principio de invarianza
Eficiencia
Notaciones asintticas
Clculo de la eficiencia de un algoritmo
Resolucin de recurrencias:
Mtodo de la ecuacin caracterstica
 Recurrencias homogneas
 Recurrencias no homogneas
 Cambios de variable
 Transformaciones del rango
Apndice: Frmulas tiles

Comparacin de algoritmos
A menudo dispondremos de ms de un algoritmo para
resolver un problema dado, con cul nos quedamos?
USO DE RECURSOS
 Computacionales:



 No


Tiempo de ejecucin
Espacio en memoria

computacionales:
Esfuerzo de desarrollo (anlisis, diseo & implementacin)
2

Comparacin de algoritmos
Factores que influyen en el uso de recursos
 Recursos






Diseo del algoritmo


Complejidad del problema (p.ej. tamao de las entradas)
Hardware (arquitectura, MHz, MBs)
Calidad del cdigo
Calidad del compilador (optimizaciones)

 Recursos



computacionales:

no computacionales:

Complejidad del algoritmo


Disponibilidad de bibliotecas reutilizables
3

Principio de invarianza


Dos implementaciones de un mismo algoritmo no


diferirn ms que en una constante multiplicativa.

Si t1(n) y t2(n) son los tiempos de dos


implementaciones de un mismo algoritmo,
se puede comprobar que:

c, d , t1 (n) ct2 (n); t 2 (n) dt1 (n)

Eficiencia

Medida del uso de los recursos computacionales


requeridos por la ejecucin de un algoritmo en funcin
del tamao de las entradas.
T(n)

Tiempo empleado para ejecutar el


algoritmo con una entrada de tamao n

Eficiencia
Tipos de anlisis
Cmo medimos el tiempo de ejecucin de un algoritmo?


Mejor caso
En condiciones ptimas (no se usa por ser demasiado optimista).

Peor caso
En el peor escenario posible (nos permite acotar el tiempo de ejecucin).

Caso promedio
Caso difcil de caracterizar en la prctica.

Anlisis probabilstico
Asume una distribucin de probabilidad sobre las posibles entradas.

Anlisis amortizado
Tiempo medio de ejecucin por operacin
sobre una secuencia de ejecuciones sucesivas.

Eficiencia
Ejemplo


Algoritmo 1:

T(n) = 10-4 2n segundos


n = 38 datos
T(n) = 1 ao

Algoritmo 2:

T(n) = 10-2 n3 segundos


n = 1000 bits
T(n) = 1 ao

Cul es mejor? Se precisa un anlisis asinttico


7

Notaciones asintticas

Estudian el comportamiento del algoritmo cuando el


tamao de las entradas es lo suficientemente grande,
sin tener en cuenta lo que ocurre para entradas
pequeas y obviando factores constantes.

Notaciones asintticas
Orden de eficiencia
Un algoritmo tiene un tiempo de ejecucin de orden
f(n),, para una funcin dada f, si existe una constante
f(n)
positiva c y una implementacin del algoritmo capaz
de resolver cada caso del problema en un tiempo
acotado superiormente por cf (n)
(n),, donde n es el
tamao del problema considerado.

Notaciones asintticas
Notacin O
Decimos que una funcin T(n) es O(f(n))
si existen constantes n0 y c
tales que T(n) cf(n) para todo n n0:
T(n) es O(f(n))
cR, n0N, tal que n>n0N, T(n) cf(n)

10

Notaciones asintticas
Ejemplos
T(n) = 3n
 T(n) es O(n), O(n log n), O(n2), O(n3) y O(2n).
T(n) = (n+1)2
 T(n) es O(n2), O(n3) y O(2n).
 T(n) no es O(n) ni O(n log n).
T(n) = 32n2 + 17n + 32(n)
(n) = 32n2 + 17n + 32.
 T(n) es O(n2) pero no es O(n).
T(n) = 3n3 + 345n2
 T(n) es O(n3) pero no es O(n2).
T(n) = 3n
 T(n) es O(3n) pero no es O(2n).

11

Notaciones asintticas
Notaciones y
Notacin (cota inferior)
T(n) es (f(n)) cuando
cR+, n0N: nn0 T(n) cf(n)
cf(n)
Notacin (orden exacto)
T(n) es (f(n)) cuando
T(n) es O(f(n)) y T(n) es (f(n))
12

rdenes de eficiencia
rdenes de eficiencia ms habituales
N

O(log2 n)

O(n2)

O(n log2 n)

O(n2)

O(2n)

O(n!)

10

3 s

10 s

30 s

0.1 ms

1 ms

4s

25

5 s

25 s

0.1 ms

0.6 ms

33 s

1011 aos

50

6 s

50 s

0.3 ms

2.5 ms

36 aos

100

7 s

100 s

0.7 ms

10 ms

1017 aos

1000

10 s

1 ms

10 ms

1s

10000

13 s

10 ms

0.1 s

100 s

100000

17 s

100 ms

1.7 s

3 horas

1000000

20 s

1s

20 s

12 das

Tiempos calculados suponiendo 1 s por operacin elemental.


O(1) O(log n) O(n) O(n log n) O(n2) O(n3) O(2n) O(n!)

13

rdenes de eficiencia
Orden lineal: O(n)
Tiempo de ejecucin proporcional al tamao de la entrada.

Ejemplo: Calcular el mximo de n nmeros a1, , an.


max a1
for i = 2 to n {
if (ai > max)
max ai
}

14

rdenes de eficiencia
Orden cuadrtico: O(n2)
Aparece cuando tenemos que enumerar todas las
parejas posibles de elementos de un conjunto.
Ejemplo: Dado un conjunto de puntos en el plano (x1, y1), ,
(xn, yn), encontrar la pareja ms cercana.
min (x1 - x2)2 + (y1 - y2)2
for i = 1 to n {
for j = i+1 to n {
d (xi - xj)2 + (yi - yj)2
if (d < min)
min d
}
}
15

rdenes de eficiencia
rdenes O(log n) y O(n log n)
Aparecen en muchos algoritmos recursivos
p.ej. Estrategia divide y vencers
Ejemplos:

O(log n)
O(n log n)

Bsqueda binaria
Mergesort,, Heapsort
Mergesort
Heapsort

Orden exponencial O(2n)


Aparece en muchos problemas de tipo combinatorio
Ejemplo: Enumerar todos los subconjuntos de un conjunto dado.
16

Clculo de la eficiencia
Operacin elemental
Operacin de un algoritmo cuyo tiempo de ejecucin
se puede acotar superiormente por una constante.


En nuestro anlisis, slo contar el nmero de


operaciones elementales y no el tiempo exacto
necesario para cada una de ellas.

En la descripcin de un algoritmo, puede ocurrir que


una lnea de cdigo corresponda a un nmero de
variable de operaciones elementales.
p.ej.

x max
max{A[k],
{A[k], 0 <= k < n}

17

Clculo de la eficiencia
Operaciones elementales


Algunas operaciones matemticas no son operaciones


elementales.
p.ej.

sumas y productos
dependen de la longitud de los operandos.
operandos.

Por convencin, en la prctica, suma, diferencia,


producto, divisin, mdulo, operaciones booleanas,
comparaciones y asignaciones se consideran
operaciones, salvo que explcitamente se establezca lo
contrario.
18

Clculo de la eficiencia
Reglas de clculo de la eficiencia
1.
2.
3.
4.
5.
6.

Sentencias simples
Bloques de sentencias
Sentencias condicionales
Bucles
Llamadas a funciones
Funciones recursivas

19

Clculo de la eficiencia
Reglas de clculo de la eficiencia
1. Sentencias simples
Consideraremos que cualquier sentencia simple
(lectura, escritura, asignacin, etc.)
va a consumir un tiempo constante, O(1)
O(1),,
salvo que contenga una llamada a una funcin.

20

Clculo de la eficiencia
Reglas de clculo de la eficiencia
2. Bloques de sentencias


Tiempo total de ejecucin = Suma de los tiempos de


ejecucin de cada una de las sentencias del bloque.

Orden de eficiencia = Mximo de los rdenes de


eficiencia de cada una de las sentencias del bloque.

21

Clculo de la eficiencia
Reglas de clculo de la eficiencia
3. Sentencias condicionales
El tiempo de ejecucin de una sentencia condicional
es el mximo del tiempo del bloque if
y del tiempo del bloque else
else..
Si el bloque if es O(f(n)) y el bloque else es O(g(n)),
la sentencia condicional ser O(max
O(max{f(n),
{f(n), g(n)}).
g(n)}).

22

Clculo de la eficiencia
Reglas de clculo de la eficiencia
4. Bucles


Tiempo de ejecucin
= Suma de los tiempos invertidos en cada iteracin

En el tiempo de cada iteracin se ha de incluir el


tiempo de ejecucin del cuerpo del bucle y tambin el
asociado a la evaluacin de la condicin (y, en su
caso, la actualizacin del contador).

Si todas las iteraciones son iguales, el tiempo total de


ejecucin del bucle ser el producto del nmero de
iteraciones por el tiempo empleado en cada iteracin.

23

Clculo de la eficiencia
Reglas de clculo de la eficiencia
5. Llamadas a funciones
Si una determinada funcin P tiene una eficiencia de
O(f(n)), cualquier llamada a P es de orden O(f(n)).


Las asignaciones con diversas llamadas a funcin


deben sumar las cotas de tiempo de ejecucin de
cada llamada.

La misma consideracin es aplicable a las


condiciones de bucles y sentencias condicionales.

24

Clculo de la eficiencia
Reglas de clculo de la eficiencia
6. Funciones recursivas
Las funciones de tiempo asociadas a funciones
recursivas son tambin recursivas.
p.ej.

T(n) = T(nT(n-1) + f(n)

Para analizar el tiempo de ejecucin de un algoritmo


recursivo, le asociamos una funcin de eficiencia
desconocida, T(n), y la estimamos a partir de T(k)
para distintos valores de k (menores que n).
25

Clculo de la eficiencia
Ejemplo
int fact
fact(
(int n)
{
if (n <= 1)
return 1;
else
return (n * fact
fact(n
(n 1));
}

Los bloques if y else son operaciones elementales,


por lo que su tiempo de ejecucin es O(1).
26

Clculo de la eficiencia
T(n)

= 1 + T(n - 1)
= 1 + (1 + T(nT(n-2)) = 2 + T(nT(n-2)
= 2 + (1 + T(nT(n-3)) = 3 + T(nT(n-3)

= i + T(nT(n-i)

= (n(n-1) + T(n (n
(n--1)) = (n(n-1) + 1

Por tanto, T(n) es O(n)


La implementacin recursiva del clculo del factorial es de orden lineal.

27

Clculo de la eficiencia
Ejemplo
int E(int
E(int n)
{
if (n == 1)
return 0;
else
return E(n/2) + 1;
}

n =1
1,

T (n) =
n
1+ T n > 1

T(n) es O (log2 n)
28

Clculo de la eficiencia
T(n) = T(n/2) + 1
= (T(n/4) + 1) + 1 = T(n/4) + 2
= (T(n/8) + 1) +2 = T(n/8) + 3

= T(n/2i) + i

= T(n/2log(n)) + log2(n)
= T(1) + log2(n)
Por tanto, T(n) es O(log n)
29

Clculo de la eficiencia
El mismo desarrollo se podra realizar ms cmodamente
con un cambio de variable: n=2m  m = log2(n)
T(2m) = T(2m-1) + 1=
= (T(2m-2) + 1) + 1
= (T(2m-3) + 1) + 2

= T(2m-i) + i

= T(2m-m) + m
= T(1) + log2(n)
30

Clculo de la eficiencia
Ejemplo

n
T ( n ) = T + n 2 , n 2; T (1) = 1
2


Cambio de variable:

n = 2m
n2 = (2m)2=(22)m=4m

T(2m) = T(2m-1) + 4m=


= T(2m-2) + 4m-1 + 4m

= T(2m-i) + [4m-(i(i--1) + + 4m-1 + 4m]

31

Clculo de la eficiencia
Ejemplo

n
T ( n ) = T + n 2 , n 2; T (1) = 1
2
T (2 m ) = T (1) + [41 + L + 4 m 2 + 4 m 1 + 4 m ]
4m+ 2 1 42 4m 1
=

= 1+ 4 = 4 =
4
1
3
3

i =1
i =0
m

42 2 1
= n
3
3
T(n) es O(n2)
32

Resolucin de recurrencias
Tcnicas de resolucin de recurrencias


Mtodo de sustitucin
1.
2.
3.
4.

Desarrollar la expresin
Adivinar la frmula de la expresin
Demostrar por induccin
Resolver constantes

rbol de recursividad
Representacin grfica intuitiva.

Expansin de recurrencias
Mtodo algebraico equivalente al rbol de recursividad.

Mtodo de la ecuacin caracterstica

33

Mtodo de sustitucin
O (1)
si n = 1

T ( n) =
4T (n / 2) + n si n > 1
T(n) es O(n3)?
Suponemos que T(k) ck3 para k<n
Demostramos por induccin que T(n) cn3
T(n) = 4T(n/2) + n
4c(n/2)3 + n = (c/2)n3 + n = cn3 ((c/2)n3 n)
cn3 siempre que ((c/2)n3 n)>0 (p.ej. c2 y n1)
PROBLEMA: Podramos encontrar una cota superior ms ajustada?
Sugerencia: Probar con T(n) cn2 y T(n) c1n2-c2n

34

rbol de recursividad
T (n ) = T ( n / 4) + T ( n / 2) + n 2

35

Ecuacin caracterstica
Recurrencias homogneas lineales
con coeficientes constantes

a0tn + a1tn 1 + L + ak tn k = 0




Lineal: No hay trminos tn-1tn-j, t2n-i


Homognea: Igualadas a 0
Con coeficientes constantes: ai constantes

Ejemplo: Sucesin de Fibonacci

f n = f n 1 + f n 2

f n f n 1 f n 2 = 0
36

Ecuacin caracterstica
Suposicin: tn = xn

a0 x n + a1 x n 1 + L + ak x n k = 0
Se satisface si x=0 o bien

a0 x k + a1 x k 1 + L + ak = 0
ecuacin caracterstica
Polinomio caracterstico

p( x ) = a0 x k + a1 x k 1 + L + ak
37

Ecuacin caracterstica
Teorema Fundamental del lgebra:

p( x ) = ( x ri )
i =1

Consideremos una raz del polinomio caracterstico, ri

p(
p(rri) = 0
Por tanto, rin es solucin de la recurrencia.
Adems, las combinaciones lineales de las soluciones de
la recurrencia tambin son soluciones:
k

tn = ci ri n
i =1

Cuando todos los ri son distintos


distintos,,
stas son las nicas soluciones

38

Ecuacin caracterstica
Resolucin de recurrencias
mediante el mtodo de la ecuacin caracterstica:
1.

2.
3.

4.

Se obtiene la ecuacin caracterstica asociada a la


recurrencia que describe el tiempo de ejecucin T(n).
Se calculan las k races del polinomio caracterstico.
Se obtiene la solucin a partir de las races del
polinomio caracterstico.
Se determinan las constantes a partir de las k
condiciones iniciales.
39

Ecuacin caracterstica
Ejemplo: Sucesin de Fibonacci

n,

fn =
f n 1 + f n 2

si n = 0 n = 1
en otro caso

f n f n 1 f n 2 = 0

p( x ) = x 2 x 1

r1 =

1+ 5
2

r2 =

1 5
2

40

Ecuacin caracterstica
Ejemplo: Sucesin de Fibonacci

f n = c1r1n + c2 r2n
c1

c2

r1c1 + r2c2

= 0

= 1

c1 =

1
5

y c2 =

1
5

n
n

1 1+ 5 1 5

fn =

5 2 2

41

Ecuacin caracterstica
Ejemplo:

0,
n=0

tn =
5,
n =1
3t + 4t , en otro caso
n 2
n 1

tn 3tn 1 4tn 2 = 0

x 2 3x 4 = ( x + 1)( x 4)

tn = c1 ( 1) n + c2 4n
A partir de las condiciones iniciales: c1 = -1, c2 = 1
42

Ecuacin caracterstica
Races mltiples
Supongamos que las races del polinomio caracterstico
NO son todas distintas.
ri con multiplicidad mi
l

mi 1

tn = cij n j ri n
i =1 j = 0

43

Ecuacin caracterstica
Ejemplo:

n,
si n = 0, 1 2

tn =
5tn 1 8tn 2 + 4tn 3 en otro caso

tn 5tn 1 + 8tn 2 4tn 3 = 0


x 3 5 x 2 + 8 x 4 = ( x 1)( x 2)2

tn = c1 (1)n + c2 2n + c3n 2n
A partir de las condiciones iniciales: c1 = -2, c2 = 2, c3 = -1/2

tn = 2n +1 n 2n 1 2

44

Ecuacin caracterstica
Recurrencias no homogneas
A partir de

a0t n + a1t n 1 + L + ak t n k = b n p (n)

donde b es una constante y p(n) un polinomio de grado d


derivamos el polinomio caracterstico

p ( x ) = ( a0 x k + a1 x k 1 + L + ak )( x b) d +1
que resolveremos igual que en el caso homogneo.
45

Ecuacin caracterstica
Ejemplo:
Las torres de Hanoi

hanoi (int n, int inicial, int final, int tmp


tmp)
)
{
hanoi (n 1, inicial, tmp
tmp,
, final)
final inicial
hanoi (n 1, tmp
tmp,
, final, inicial)
}

0,
n =0

T (n) =
2T (n 1) + 1, en otro caso

46

Ecuacin caracterstica
Ejemplo:
Las torres de Hanoi

t n 2t n 1 = 1

p ( x) = ( x 2)( x 1)
T (n) = c1 2 n + c2

t n = c1 2 n + c21n
T ( 0) = 0

T (1) = 1

c1

+ c2

2c1

+ c2

c1 = 1
= 0

c2 = 1
= 1

T ( n) = 2 n 1

47

Ecuacin caracterstica
Ejemplo:

tn = 2tn 1 + n;

t0 = 0

p( x ) = ( x 2)( x 1) 2
t n = c1 2 n + c21n + c3n1n
c1
+ c2
2c1 + c2

+ c3

4c1 + c2

+ 2c3

= 0
c1 = 2

= 1 c2 = 2
= 4
c3 = 1

tn = 2n +1 n 2

48

Ecuacin caracterstica
Recurrencias no homogneas

a0t n + a1t n 1 + L + ak t n k = b1n p1 (n) + ... + bsn ps (n)





b1, , bs constantes
pi(n) polinomio de grado di

Polinomio caracterstico:

p ( x ) = ( a0 x k + a1 x k 1 + L + ak )( x b1 ) d1 +1 L ( x bs ) d s +1
49

Ecuacin caracterstica
Cambios de variable
Cuando las recurrencias no se ajustan al tipo conocido

1,
n =1

T (n) =
3T (n / 2) + n, n > 1
aplicamos un cambio de variable n = 2i
que nos permite definir una nueva recurrencia:

ti = T (2i )
50

Ecuacin caracterstica
Cambios de variable

ti = 3ti 1 + 2i

ti = c1 3i + c2 2i

Finalmente, deshacemos el cambio de variable: i = log2(n)

T ( n ) = c1 3log2 ( n ) + c2 2log2 ( n ) = c1n log2 ( 3) + c2n

T (n) es O(n log 2 (3) )


51

Ecuacin caracterstica
Ejemplo

ti = T (2i )

1,
n =1

T ( n) =
4T ( n / 2) + n, n > 1

ti = 4ti 1 + 2i

ti = c1 4i + c2 2i

T (n) = c1 4 log 2 ( n ) + c2 2 log 2 ( n ) = c1n log 2 ( 4 ) + c2 n = c1n 2 + c2 n

T (n) es O(n 2 )
52

Ecuacin caracterstica
Ejemplo

ti = T (2i )

1,
n =1

T ( n) =
2T ( n / 2) + n, n > 1

ti = 2ti 1 + 2i

ti = c1 2i + c2i 2i

T (n) = c1 2 log 2 ( n ) + c2 log 2 (n)2log 2 ( n ) = c1n + c2 n log 2 (n)

T (n) es O(n log 2 n)


53

Ecuacin caracterstica
Recurrencia divide y vencers
a.k.a. the master method
method

n
T ( n ) = aT + cn k
b

con a 1, b 2, k 0, c > 0

( n k ),
a < bk

T ( n ) = ( n k logb ( n )), a = bk
k
( n logb ( a ) )
>
a
b

54

Ecuacin caracterstica
Transformaciones del rango

n =1
1 / 3,

T ( n) = 2 n
nT , en otro caso

2
Inicialmente, realizamos un cambio de variable:

ti = T (2i ) = 2i T 2 (2i 1 ) = 2i ti21


Como esta recurrencia no es lineal y el coeficiente 2i
no es constante, tomamos logaritmos:

ui = log(ti ) = i + 2 log(ti 1 ) = i + 2ui 1

55

Ecuacin caracterstica
Transformaciones del rango

ui = i + 2ui 1
ui 2ui 1 = i
ui = c1 2i + c21i + c3i1i
Sustituyendo en la recurrencia para ui, obtenemos:

i = ui 2ui 1 = c1 2i + c2 + c3i 2(c1 2i 1 + c2 + c3 (i 1))


i = (2 i )c3 c2
(1 + c3 )i = 2c3 c2

c3 = 1; c2 = 2
56

Ecuacin caracterstica
Transformaciones del rango

ui = c1 2i i 2
Deshacemos los cambios:

ti = 2 = 2
ui

c1 2i i 2

T (n) = tlog 2 ( n ) = 2

c1n log 2 n 2

2 c1n
=
4n

A partir de las condiciones iniciales:

T (1) = 2 c1 / 4 = 1 / 3 c1 = log 2 (4 / 3) = 2 log 2 3


2c1n 2 ( 2log 2 3) n
22n
22n
T ( n) =
=
=
=
4n
4n
4n 2 (log 2 3) n 4n3n

57

Apndice: Frmulas tiles


Progresiones aritmticas

ai +1 = ai + d
n

1
ai = n (a1 + an )

2
i =1
n

i =
i =1

1
n (n + 1)
2

58

Apndice: Frmulas tiles


Progresiones geomtricas

ai +1 = r ai
a1 (r n +1 1)
ai =

r 1
i =1
n

n +1
b
b
i
b
=

b 1
i =1
n

59

Apndice: Frmulas tiles


Sumatorias
n

a = na
i =1

i =1

i =1

a f (i) = a f (i)

(a + b ) = a + b
a b = a b
i

60

Apndice: Frmulas tiles


Sumatorias
n

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

6
i =1
2
n
1

i 3 = n (n + 1)

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

3
i =1

i =

61

Apndice: Frmulas tiles


Potencias

x y + z = x y x z
x yz = x y / x z

x y z = ( x y ) z = ( x z ) y
x

yz

Ojo!

62

Apndice: Frmulas tiles


Logaritmos

log a (n) =

log b (n)
log b (a )

log a (n m) = log a (n ) + log a (m)


log a ( n / m) = log a ( n ) log a (m)

log a (n p ) = p log a (n )

n loga ( m ) = m loga ( n )
63

También podría gustarte