Tiempo medio de ejecución por operación sobre una secuencia de ejecuciones sucesivas. 6

La eficiencia de los algoritmos Análisis y Diseño de Algoritmos La eficiencia de los algoritmos        Comparación de algoritmos Principio d

2 downloads 44 Views 570KB Size

Recommend Stories


Una larga secuencia de encuentros y desencuentros
Gloria A. FRANCO RUBIO (2008), "Historia y narración histórica. Algunas reflexiones", en Gloria FRANCO RUBIO y Fina LLORCA ANTOLÍN (edas.), Las mujere

Secuencia didáctica 6 El párrafo Unidad 2
Secuencia didáctica 6 El párrafo Unidad 2 Estructura del párrafo Una estructura se forma con la organización de los elementos y da por resultado la u

LEVANTAMIENTO DE UN LOTE POR MEDIO DE UNA POLIGONAL
METODOS PARA MEDIR UN TERRENO CON TRANSITO Y CINTA LEVANTAMIENTO DE UN LOTE POR MEDIO DE UNA POLIGONAL LEVANTAMIENTO DE UN LOTE POR MEDIO DE UNA POLI

6 Medio 3 Polimodal
Operativo Nacional de Evaluación Informe de resultados Interpretación pedagógica de logros y dificultades FÍSICA - QUÍMICA 2000 5°/6° Medio 3° Pol

Story Transcript

La eficiencia de los algoritmos Análisis y Diseño de Algoritmos

La eficiencia de los algoritmos      



Comparación de algoritmos Principio de invarianza Eficiencia Notaciones asintóticas Cálculo de la eficiencia de un algoritmo Resolución de recurrencias: Método de la ecuación característica  Recurrencias homogéneas  Recurrencias no homogéneas  Cambios de variable  Transformaciones del rango Apéndice: Fórmulas útiles

1

Comparación de algoritmos A menudo dispondremos de más de un algoritmo para resolver un problema dado, ¿con cuál nos quedamos? USO DE RECURSOS  Computacionales:  

 No 

Tiempo de ejecución Espacio en memoria

computacionales: Esfuerzo de desarrollo (análisis, diseño & implementación) 2

Comparación de algoritmos Factores que influyen en el uso de recursos  Recursos     

Diseño del algoritmo Complejidad del problema (p.ej. tamaño de las entradas) Hardware (arquitectura, MHz, MBs…) Calidad del código 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 diferirán más 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)

4

Eficiencia

Medida del uso de los recursos computacionales requeridos por la ejecución de un algoritmo en función del tamaño de las entradas. T(n)

Tiempo empleado para ejecutar el algoritmo con una entrada de tamaño n

5

Eficiencia Tipos de análisis ¿Cómo medimos el tiempo de ejecución 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 ejecución).



Caso promedio Caso difícil de caracterizar en la práctica.



Análisis probabilístico Asume una distribución de probabilidad sobre las posibles entradas.



Análisis amortizado Tiempo medio de ejecución por operación sobre una secuencia de ejecuciones sucesivas.

6

Eficiencia Ejemplo 

Algoritmo 1:

T(n) = 10-4 2n segundos n = 38 datos T(n) = 1 año



Algoritmo 2:

T(n) = 10-2 n3 segundos n = 1000 bits T(n) = 1 año

¿Cuál es mejor? Se precisa un análisis asintótico 7

Notaciones asintóticas

Estudian el comportamiento del algoritmo cuando el tamaño de las entradas es lo suficientemente grande, sin tener en cuenta lo que ocurre para entradas pequeñas y obviando factores constantes.

8

Notaciones asintóticas Orden de eficiencia Un algoritmo tiene un tiempo de ejecución de orden f(n),, para una función dada f, si existe una constante f(n) positiva c y una implementación del algoritmo capaz de resolver cada caso del problema en un tiempo acotado superiormente por c·f (n) (n),, donde n es el tamaño del problema considerado.

9

Notaciones asintóticas Notación O Decimos que una función 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)) ⇔ ∃c∈R, ∃n0∈N, tal que ∀n>n0∈N, T(n) ≤ cf(n)

10

Notaciones asintóticas 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 asintóticas Notaciones Ω y Θ Notación Ω (cota inferior) T(n) es Ω(f(n)) cuando ∃c∈R+, ∃n0∈N: ∀n≥n0 ⇒ T(n) ≥ cf(n) cf(n) Notación Θ (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 más 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 años

50

6 µs

50 µs

0.3 ms

2.5 ms

36 años



100

7 µs

100 µs

0.7 ms

10 ms

1017 años



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 días





Tiempos calculados suponiendo 1 µs por operación 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 ejecución proporcional al tamaño de la entrada.

Ejemplo: Calcular el máximo de n números a1, …, an. max ← a1 for i = 2 to n { if (ai > max) max ← ai }

14

Órdenes de eficiencia Orden cuadrático: 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 más 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 vencerás” Ejemplos:

O(log n) O(n log n)

Búsqueda 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

Cálculo de la eficiencia Operación elemental Operación de un algoritmo cuyo tiempo de ejecución se puede acotar superiormente por una constante. 

En nuestro análisis, sólo contará el número de operaciones elementales y no el tiempo exacto necesario para cada una de ellas.



En la descripción de un algoritmo, puede ocurrir que una línea de código corresponda a un número de variable de operaciones elementales. p.ej.

x ← max max{A[k], {A[k], 0 1 ¿T(n) es O(n3)? Suponemos que T(k) ≤ ck3 para k0 (p.ej. c≥2 y n≥1) PROBLEMA: ¿Podríamos encontrar una cota superior más 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

Ecuación característica Recurrencias homogéneas lineales con coeficientes constantes

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

Lineal: No hay términos tn-1tn-j, t2n-i Homogénea: Igualadas a 0 Con coeficientes constantes: ai constantes

Ejemplo: Sucesión de Fibonacci

f n = f n −1 + f n − 2



f n − f n −1 − f n − 2 = 0 36

Ecuación característica Suposición: 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 ecuación característica Polinomio característico

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

Ecuación característica Teorema Fundamental del Álgebra:

k

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

Consideremos una raíz del polinomio característico, ri

p( p(rri) = 0 Por tanto, rin es solución de la recurrencia. Además, las combinaciones lineales de las soluciones de la recurrencia también son soluciones: k

tn = ∑ ci ri n i =1

Cuando todos los ri son distintos distintos,, éstas son las únicas soluciones

38

Ecuación característica Resolución de recurrencias mediante el método de la ecuación característica: 1.

2. 3.

4.

Se obtiene la ecuación característica asociada a la recurrencia que describe el tiempo de ejecución T(n). Se calculan las k raíces del polinomio característico. Se obtiene la solución a partir de las raíces del polinomio característico. Se determinan las constantes a partir de las k condiciones iniciales. 39

Ecuación característica Ejemplo: Sucesión 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

y

r2 =

1− 5 2

40

Ecuación característica Ejemplo: Sucesión 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

Ecuación característica 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

Ecuación característica Raíces múltiples Supongamos que las raíces del polinomio característico NO son todas distintas. ri con multiplicidad mi l

mi −1

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

43

Ecuación característica 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

Ecuación característica Recurrencias no homogéneas 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 característico

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

Ecuación característica 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

Ecuación característica 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

Ecuación característica 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

Ecuación característica Recurrencias no homogéneas

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 característico:

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

Ecuación característica 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

Ecuación característica 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

Ecuación característica 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

Ecuación característica 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

Ecuación característica Recurrencia “divide y vencerás” 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

Ecuación característica 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 ti2−1 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

Ecuación característica 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

Ecuación característica 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 ( 2−log 2 3) n 22n 22n T ( n) = = = = 4n 4n 4n 2 (log 2 3) n 4n3n

57

Apéndice: Fórmulas útiles Progresiones aritméticas

ai +1 = ai + d n

1 ai = n (a1 + an ) ∑ 2 i =1 n

∑i = i =1

1 n (n + 1) 2

58

Apéndice: Fórmulas útiles Progresiones geométricas

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

Apéndice: Fórmulas útiles Sumatorias n

∑ a = na i =1

n

n

i =1

i =1

∑ a f (i) = a∑ f (i)

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

i

j

j

i

i

j

j

60

Apéndice: Fórmulas ú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) ∑ 2  i =1 n 1 i i + = n (n + 1)(n + 2) ( 1 ) ∑ 3 i =1

∑i =

61

Apéndice: Fórmulas útiles Potencias

x y + z = x y ·x z x y−z = x y / x z

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

yz

≠x

z

y

¡Ojo!

62

Apéndice: Fórmulas ú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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.