Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos...

28
Análisis de Algoritmos Jeannette Galleguillos

Transcript of Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos...

Page 1: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

Análisis de Algoritmos

Jeannette Galleguillos

Page 2: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

MOTIVACION

• Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia

• Interesan– TIEMPO– MEMORIA

• Normalmente podemos mejorar uno empeorando el otro

Page 3: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• El tiempo de ejecución de un programa depende de:– La entrada– El compilador– El computador– El algoritmo utilizado

Page 4: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• El computador y el compilador afectan en un factor constante. Será por lo tanto la entrada la que nos interesará.

• Usaremos el tamaño de la entrada como un parámetro de la función de tiempo:

• T(n)=cuánto demora para una entrada de tamaño n.

• Esto no es necesariamente cierto, en algunos casos el tiempo de ejecución depende de cuál es la entrada particular además de su tamaño.

Page 5: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Normalmente T(n) será una cota superior es decir no puede ser peor que eso.

• Muy poco se vé el caso promedio suponiendo todas las entradas de tamaño n equiprobables.

Page 6: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

NOTACION

• Para independizarnos del computador y del compilador, nos interesará la tasa de crecimiento del tiempo de ejecución en función de n, más que de la forma explícita de la función.

• Diremos que:f(n)=O(g(n)) “de orden g(n)”

Si existe c,n0 tal que para todo n>=n0

f(n) <=cg(n)

Page 7: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• g(n) es una cota superior para la tasa de crecimiento de f(n).

• Como es obvio, nos interesará la cota superior más pequeña posible.

• Para que esto sea útil, g(n) debe resultar una función simple, ej:

T(n)=n2

Page 8: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

Ejercicios:

)3()(

)2()(3)(

)()(

0,)( 01

1

n

nn

k

kk

kk

k

OnT

OnTNonT

nOnT

aconanananT

Page 9: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

CALCULO TIEMPO DE EJECUCION

• La hipótesis es que basta comparar órdenes para comparar métodos.

• Pero:– Qué pasa si las constantes son grandes y n

típicamente pequeño

• Que el orden sea mejor quiere decir:– Cuando la entrada crezca lo suficiente será mejor– Cuando el computador sea más rápido este programa

mejorará más su rendimiento que el otro

Page 10: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Normalmente consideraremos los siguientes casos:

• O(n) razonable

• O(n2) lento

• O(2n) demasiado lento

• O(log n) bueno (log en base 2)

Page 11: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Cómo calcularlo

• Instrucción simple– Toda instrucción simple es O(1)

(asignar arreglos no es simple)

• Secuencia de instruccionesSi T(n)=T1(n) + T2(n)

y T1(n)=O(f1(n)) y T2(n)=O(f2(n))

=> T(n)=O(max(f1(n), f2(n))

Page 12: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Podemos ver:

• Secuencia de instrucciones simples es O(1)

• Una instrucción O(n2) seguida de una O(n3) es O(n3)

• Entonces importa la etapa más cara

Page 13: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Iteración• Si una instrucción que demora T1(n)=O(f1(n)) se

itera V(n)=O(f2(n))

• Tenemos

Si T(n)=T1(n)·V(n), T1(n)=O(f1(n)), V(n) =O(f2(n))

Entonces T(n)=O(f1(n)·f2(n))

De aquí:

O(cf(n))=O(f(n))

Page 14: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Ejemplo: “Ordenamiento por selección”

• For k=1 to n do• { //buscar mínimo entre k y n• posmin=k;• for i=k+1 to n do• { if a[i]<a[posmin]• posmin=i; // O(1)• }• aux=a[k];• a[k]=a[posmin]; • a[posmin]=aux;• }

O(1)

n-k veces n veces

Page 15: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Esto quiere decir que toma un tiempo proporcional al cuadrado del número de elementos a ser ordenados

• Veremos que es posible ordenar en tiempo O(n log n) que es mucho mejor ya que para n grande log n es mucho más pequeño que n.

• En algunos casos es sencillo determinar cotas superiores precisas como en el caso anterior, pero hay muchos casos que aún no han sido resueltos y continúan siendo analizados.

Page 16: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

for(i=1;i>=n;i++)

for(j=1; j<=n;j++) O(n)

printf(“algo\n”); //O(1)

Este algoritmo tiene orden O(n2)

O(n)

Page 17: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

Reglas• Asignación, entrada, salida:

O(1)• Secuencia de instrucciones:

O(max(f(n),g(n))• If-else:

la mayor de ambas (peor caso)• Ciclo:

O(V(n)·T(n))

Page 18: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

RECURSION

• Al analizar un programa recursivo llegamos a una ecuación de recurrencia. Ejemplo: Factorial

• Hay muchas técnicas para resolver recurrencias. Cuando son sencillas podemos expandirlas hasta entender cómo operan, transformándolas en sumatorias:

0si

0si

,)1()(

n

n

dnT

cnT

Page 19: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

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

• = T(n-2) + 2d

• = T(n-3) + 3d

• ...

• = T(0) + nd

• = c + nd = O(n).

Page 20: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Ejemplos:• Máximo de un arreglo de tamaño n:

])[),1,((2

1],1[),(

nanaMaxMax

nsianaMax

Page 21: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• int max(int a[], int n)• { int m;• if n=1• max=a[1];• else• {• m=max(a,n-1);• if m>a[n]• max=m;• else• max=a[n];• }• }

Verificar que esta función calcula

correctamente el máximo de los elementos del

arreglo y resolver la función T(n).

Page 22: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Ejercicio 1:

• Escriba una función recursiva que calcule la siguiente suma, y obtenga su T(n) y O(n):

• 1) 1 + 2 + 3 +...+ n

• 2) 2 + 4 + 6 ....+ 2n

Page 23: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Función:

• int valor ( int x)

• {

• if (x == 1)

• return 1;

• return ( n + valor(n-1));

• }

Page 24: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

1 si n=1

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

T(n)= T(n-1) +1 T(n-2) +2 = ... = T(n-k)+k= ...=1 + nEs de orden O(n).

Page 25: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

• Dada la siguiente función recursiva obtenga su función T(n) y O(n)

1)int recu1(int x){ if (x==1) return 1; return( recu(x/2))}

Page 26: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

2)int recu2( int x){ if (x==1) {//algo de O(1) return 1; } recu2(x/2); recu2(x/2);}Se deja como ejercicio obtener T(n) y O(n)

Page 27: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.

c , si n=1

T(n)=

2T(n-1) +d, si n>1

Se deja como ejercicio resolver la recurrencia y calcular O(n)

Page 28: Análisis de Algoritmos Jeannette Galleguillos. MOTIVACION Muchas veces queremos comparar métodos de resolución de problemas (algoritmos) en cuanto a eficiencia.