análisis de algoritmos generalidades

11
1 Análisis de algoritmos Generalidades Agustín J. González 1er. Sem. 2004

Upload: jaguar

Post on 20-Jan-2016

23 views

Category:

Documents


0 download

DESCRIPTION

Análisis de algoritmos Generalidades. Agustín J. González 1er. Sem. 2004. Definiciones. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Análisis de algoritmos Generalidades

1

Análisis de algoritmosGeneralidades

Agustín J. González

1er. Sem. 2004

Page 2: Análisis de algoritmos Generalidades

2

Definiciones• Algoritmo: Es un procedimiento computacional bien definido que toma

algunos valores, o un conjunto de valores, como entrada y produce algunos valores, o conjunto de valores, como salida. Así es como un algoritmo es una secuencia de pasos computacionales que transforma una entrada en una salida.

• Análisis de Algoritmo: Analizar un algoritmo es predecir los recursos que el algoritmo requiere. Ocasionalmente, recursos tales como memoria, ancho de banda de comunicación, o número de compuertas lógicas son de gran interés, pero más común se desea medir la cantidad de tiempo computacional.

• Tamaño de la entrada: Depende del problema en estudio. Puede ser número de datos a ser ordenados, número de bits a ser multiplicados, o el par número de nodos y arcos de un grafo.

• Tiempo de ejecución: Normalmente se mide como el número de operaciones primitivas o "pasos" ejecutados.

Page 3: Análisis de algoritmos Generalidades

3

Análisis de Algoritmos

InsertionSort(int A[], int n) {

int j, i, key;

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

key = A[j];

/* inserta A[j] en la secuencia ordenada A[0...j-1] */

i = j-1;

while( 0 <= i && key < A[i] ){

A[i+1] = A[i];

i --;

}

A[i+1]=key;

}

}

Análisis de algoritmos consiste en predecir los recursos que el algoritmo requiere. Lo veremos con un ejemplo simple.

Page 4: Análisis de algoritmos Generalidades

4

Análisis de AlgoritmosAlgoritmo

InsertionSort(int A[], int n) {

int j, i, key;

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

key = A[j];

/* inserta A[j] en la secuencia ordenada

A[0...j-1] */

i = j-1;

while( 0<=i && key < A[i] ){

A[i+1] = A[i];

i --;

}

A[i+1]=key;

}

}

Costo

c0

c1

c2

0

c4

c5

c6

c7

0

c8

0

0

Veces

1

n (hemos simplificado al mayor)

n-1

n-1

Suma desde j=1 hasta n-1 de tj

Suma desde j=1 hasta n-1 de (tj - 1)

Suma desde j=1 hasta n-1 de (tj -1)

n-1

n-1

1

1

1

nn-1

1 1 1

0 1 2 4 5 6 7 81 1 1

( ) ( 1) ( 1) ( 1) ( 1) ( 1)n n n

j j jj j j

T n c c n c n c n c t c t c t c n

tj es el número de iteraciones del while para cada j; 0<tj<=j

Page 5: Análisis de algoritmos Generalidades

5

Costo de Insertion-Sort

• ¿Cuál es el mejor caso?

• El arreglo está ya ordenado. ¿cuánto tiempo toma?

• ¿Cuál es el peor caso?

• El arreglo está ordenado pero en orden inverso.

1 1 1

0 1 2 4 5 6 7 81 1 1

( ) ( 1) ( 1) ( 1) ( 1) ( 1)n n n

j j jj j j

T n c c n c n c n c t c t c t c n

0 1 2 4 5 8

2

Mejor caso:

( 1) ( 1) ( 1) ( 1)

Peor caso

....

T(n) c c n c n c n c n c n

an b

T(n) an bn c

Page 6: Análisis de algoritmos Generalidades

6

Casos: peor, promedio, mejor

• Peor caso de tiempo de ejecución es el límite superior para el tiempo de ejecución considerando cualquier entrada. El algoritmo no supera este valor en ningún caso.

• El mejor caso tiene definición análoga a la de peor caso.

• Caso promedio: la idea es obtener el valor esperado para el tiempo. Normalmente se obtiene suponiendo todas las entradas posibles con igual probabilidad.

Page 7: Análisis de algoritmos Generalidades

7

Crecimiento de Funciones• Normalmente estamos interesados en el comportamiento de los

algoritmos para grandes entradas (muchos datos de entrada).

• Notación asintótica: para una función dada g(n), denotamos por (g(n)) al conjunto de funciones:

• Aún cuando (g(n)) es un conjunto, se acostumbra a notar

• f(n) = (g(n)) Queremos decir que f(n) pertenece a (g(n))

• Ejemplo: demostrar que f(n)=an2+bn+c es (n2) con a,b,c>0

})()()(0:0,0,0:)({))(( 2121 oo nnngcnfngcnccnfng

Page 8: Análisis de algoritmos Generalidades

8

Notación Asintótica

g(n)

O(g(n))

o(g(n))

(g(n))

(g(n))

no

c2*g(n)

c1*g(n)

(g(n)) es le conjunto de funciones en la zona amarilla

Page 9: Análisis de algoritmos Generalidades

9

Notación O, , o,

})()(0:0,0:)({))(( oo nnncgnfncnfngO

})()(0:0,0:)({))(( oo nnnfncgncnfngΩ

0)(

)())(()(:

})()(0:0,0:)({))((

ng

nflimngonfOjo

nnncgnfncnfngo

n

oo

)(

)())(()(:

})()(0:0,0:)({

ng

nflimngnfOjo

nnnfncgncnfω(g(n))

n

oo

Page 10: Análisis de algoritmos Generalidades

10

Analogía que puede ayudar

• f(n) = (g(n)) ~ a > b

• f(n) = (g(n)) ~ a b

• f(n) = (g(n)) ~ a = b

• f(n) = O(g(n)) ~ a b

• f(n) = o(g(n)) ~ a < b

g(n)(g(n))

O(g(n))o(g(n))

(g(n))(g(n))

Page 11: Análisis de algoritmos Generalidades

11

Ejercicios• Probar que:• f(n)=(g(n)) y g(n)=(h(n)) f(n)=(h(n))• Si f(n)>0 y g(n)>0, probar que

máx(f(n),g(n)) = (f(n)+g(n))

• Ordenar las siguientes funciones por orden de crecimiento

)ln(ln2)!lg(lg)3/2(

1)!(lg!)2(2lglg223

2lglg

nnnn

nnnn)(nn

nn

})()()(0:0,0,0:)({))(( 2121 oo nnngcnfngcnccnfng