2. ejemplo conteo 4

6
<http://www.lab.dit.upm.es/~lprg/material/apuntes/o/> class Polinomio { private double[] coeficientes; Polinomio (double[] coeficientes) { this.coeficientes= new double[coeficientes.length]; System.arraycopy(coeficientes, 0, this.coeficientes, 0, coeficientes.length); } double evalua_1 (double x) { double resultado= 0.0; for (int termino= 0; termino < coeficientes.length; termino++) { double xn= 1.0; for (int j= 0; j < termino; j++) xn*= x; // x elevado a n resultado+= coeficientes[termino] * xn; } return resultado; } } Si es N el grado del polinomio y es el número de coeficientes. El bucle más exterior (1) se ejecuta N veces. El bucle interior (2) se ejecuta, respectivamente 1 + 2 + 3 + ... + N veces = N*(1+N)/2 => O(n 2 ) Ejemplo 1: Análisis de Su algoritmos jueves, 25 de septiembre de 2014 10:46 Cap2.3 Análisis Algorítmico página 1

Upload: mary-dunnia-lopez-n

Post on 11-Jan-2017

156 views

Category:

Education


2 download

TRANSCRIPT

Page 1: 2. ejemplo conteo 4

<http://www.lab.dit.upm.es/~lprg/material/apuntes/o/>

class Polinomio private double[] coeficientes;Polinomio (double[] coeficientes) this.coeficientes= new double[coeficientes.length]; System.arraycopy(coeficientes, 0, this.coeficientes, 0, coeficientes.length); double evalua_1 (double x) double resultado= 0.0; for (int termino= 0; termino < coeficientes.length; termino++) double xn= 1.0; for (int j= 0; j < termino; j++)

xn*= x; // x elevado a n resultado+= coeficientes[termino] * xn; return resultado;

Si es N el grado del polinomio y es el número de coeficientes. El bucle más exterior (1) se ejecuta N veces. El bucle interior (2) se ejecuta, respectivamente

1 + 2 + 3 + ... + N veces = N*(1+N)/2 => O(n2)

Ejemplo 1: Análisis de Su algoritmosjueves, 25 de septiembre de 2014 10:46

Cap2.3 Análisis Algorítmico página 1

Page 2: 2. ejemplo conteo 4

<http://www.lab.dit.upm.es/~lprg/material/apuntes/o/>

double evalua_2 (double x) double resultado= 0.0; for (int termino= 0; termino < coeficientes.length; termino++) resultado+= coeficientes[termino] * potencia(x, termino); return resultado;

private double potencia (double x, int n) if (n == 0) return 1.0; // si es potencia impar ... if (n%2 == 1) return x * potencia(x, n-1); // si es potencia par ... double t= potencia(x, n/2); return t*t;

Si el exponente es par, el problema tiene una evolución logarítmica; mientras que-

si es impar, su evolución es lineal. Si "j" es impar entonces "j-1" es par, el caso peor es que en la mitad de los casos-

tengamos "j" impar y en la otra mitad sea par. El caso mejor, es que siempre sea "j" par.-

Potencia --> Su análisis es algo poco claro.

31 30 15 14 7 6 3 2 1Un ejemplo de caso peor sería x=31, que implica la siguiente serie para j:

2 * eis (log2(j)),cuyo número de términos podemos acotar superiormente por

En el caso mejor visitaremos eis(log2(j)) valores pares de "j"; -

En el caso peor podemos encontrarnos con otros tantos números impares-

entremezclados.

donde eis(r) es el entero inmediatamente superior

Por tanto, la complejidad de Potencia es de orden O(log n).

Insertada la función Potencia en la función EvaluaPolinomio, la complejidad compuestaes del orden

O(n log n), al multiplicarse por N un subalgoritmo de O(log n)

Ejemplo 2: Análisis de Sub algoritmosjueves, 25 de septiembre de 2014 10:46

Cap2.3 Análisis Algorítmico página 2

Page 3: 2. ejemplo conteo 4

double evalua_3 (double x) double xn= 1.0; double resultado= coeficientes[0]; for (int termino= 1; termino < coeficientes.length; termino++) xn*= x; resultado+= coeficientes[termino] * xn; return resultado;

Queda en un algoritmo de O(n).

Ejemplo 3: Análisis de Subalgoritmosjueves, 25 de septiembre de 2014 10:46

Cap2.3 Análisis Algorítmico página 3

Page 4: 2. ejemplo conteo 4

void calcula (int n) int x=0; while (x <n) x=x+1 ; CalPro(x); return x; T (CalPro(m)) = 5; (caso mejor)T (CalPro(m)) = 4m -5 (caso peor)

Linea x n T(Caso mejor) T(caso peor)

1 0 4 1 1

2 (n+1) (n+1)

3 1 * (n) 1 * (n)

4 5 * (n) 4 (1)-5 = -14 (2)-5 = 34(3)-5 = 7

-1 3 7 n=3

= ((-1 + (4n-5))/2)*n

= 2n2 - 3nEl sumatorio de todas las instrucciones está en la formula 2n2 - 3n

1+1n+1 n+2nm-3n+1

5 1 1

= 3 + 7nΩ(n)

=2n2 - n + 3Ο( n2)

1234

5

Ejemplo 4: Análisis de Sub algoritmosjueves, 25 de septiembre de 2014 10:46

Cap2.3 Análisis Algorítmico página 4

Page 5: 2. ejemplo conteo 4

void calcula (int n) int x=0; while (x <n) CalPro(x); x=x+1 ; return x; T (CalPro(m)) = 5; (caso mejor)T (CalPro(m)) = 4m -5 (caso peor)

Linea x n T(Caso mejor) T(caso peor)

1 0 4 1 1

2 (n+1) (n+1)

3 5 * (n) 4 (0)-5 = -54 (1)-5 = -14(2)-5 = 34(3)-5 = 7

-5 -1 3 7 n=4

= ((-5 + (4(n-1)-5))/2)*n= (2n-7)*n= 2n2-7nEl sumatorio de todas las instrucciones está en la formula 2n2 - 7n

4 1 * (n) 1 * (n)

5 1 1

= 3 + 7nΩ(n)

= 2n+3+2n2-7n = 2n2-5n +3Ο( n2)

1234

5

Ejemplo 5: Análisis de Sub algoritmosjueves, 25 de septiembre de 2014 10:46

Cap2.3 Análisis Algorítmico página 5

Page 6: 2. ejemplo conteo 4

1+ 1+1 = 1 + 21.1+ 1+1 = 1 + 22.13.================================ n n n n

T(n) = 1 +( ∑ ( 2 + 1 +( ∑ ( 2 + 1 )) + 1 )) + 1 = 2 + ( ∑ ( 4 + ∑3 ) ) = i=1 j=i i=1 j=i n n i-1 n = 2 + ( ∑ ( 4 + ∑3 - ∑3 ) ) = 2 + ( ∑ ( 4 + 3* (n-1+1) - 3*(i-1-1+1))) i=1 j=1 j=1 i=1 n = 2 + ( ∑ (4 + 3n-3i+3)) = 3/2 n^2 + 11/2 n + 2 i=1

O(n^2)

a=a+1 for j=i ; j<=n ; j++

for i=1; i<=N; i++

Se pueden analizar los 3 con criterios diversos, sin embargo no hay una condición, no hay preguntas que hagan un mejor o peor caso

NO TIENE CASO MEJOR - PEOR --> Por tanto NO hay caso PROMEDIO

Analizar los 3 casos Ω - O - ϴ

viernes, 28 de marzo de 2014 16:51

Cap2.3 Análisis Algorítmico página 6