You are on page 1of 44

Ingeniera Informtica Algoritmos y Estructura de datos III Seccin G

Anlisis de Algoritmos
Cristian Cappo (ccappo@pol.una.py) 17/Agosto/2011 2do. Semestre

En esta clase

Algoritmos como tecnologa Anlisis de algoritmos y clculo asinttico Anlisis de casos: mejor, peor y promedio Clculo de tiempo de ejecucin de un programa Notaciones asintticas: O , , Ejercicios

Algoritmos como tecnologa

Qu es un algoritmo?

Es una secuencia de pasos concreta que transforma unos datos de entrada. Es un procedimiento bien definido que toma algn valor o conjunto de valores, como entrada, y produce algn valor o conjunto de valores, como salida [CLRS] Podemos ver al algoritmo como una herramienta que resuelve un determinado problema computacional.
[CLRS] Cormen-Leiserson-Rivest-Stein. Introduction to Algorithms, 2 nd Edition, MIT 3 Press, 2001

Propiedades de un algoritmo

Es correcto Tiene pasos concretos Bien definido (no ambiguo) Es finito Termina

Algoritmos como tecnologa

Por qu no es suficiente solo encontrar un solo algoritmo para un problema determinado?

RECURSOS LIMITADOS (procesador,memoria, ancho de banda, etc) TIEMPO DE RESPUESTA Buena codificacin Fcil de usar Fcil de implementar Eficiente
5

Cmo escoger el algoritmo ms conveniente?


Algoritmos como tecnologa

Eficiencia de un algoritmo

Cuando se escribe la solucin a un problema generalmente existen dos cosas inmersas en el diseo:

Fcil de entender, codificar y depurar (Ingeniera de Software). Uso eficiente de los recursos computacionales (Anlisis de algoritmos).

Cuando logro ambas cosas tengo un programa elegante.


6

Algoritmos como tecnologa

Eficiencia de un algoritmo
Una mquina ms rpida o un algoritmo ms eficiente?

Algoritmos como tecnologa

Eficiencia de un algoritmo

Suponga el problema de ordenar un arreglo de nmeros. Existen varios algoritmos, nosotros elegiremos dos para comparar:
Ordenacin por insercin (InsertionSort) Ordenacin por mezcla (MergeSort).

Ambos son algoritmos correctos


Ms adelante analizaremos formalmente la correctitud de un algoritmo

Algoritmos como tecnologa

Eficiencia de un algoritmo (cont.)

Suponga que tiene dos mquinas A y B

A puede ejecutar 1.000.000.000 (109) instrucciones por segundo B puede ejecutar 10.000.000 (107) instrucciones por segundo (Note que es 100 veces ms lenta que A) c1 es 2 y c2 es 50 (constantes multiplicativas para InsertSort y MergeSort respectivamente). Qu significa esto?

Se quiere ordenar 1 milln de nmeros (n=1.000.000)... la pregunta es quin ganar?

Algoritmos como tecnologa

Eficiencia de un algoritmo (cont.)

InsertSort toma alrededor de un tiempo de c1 n en ordenar n items.

MergeSort toma alrededor de un tiempo de c 2 n log 2 n (asumimos log en base 2) c1 y c2 son factores constantes.

10

Algoritmos como tecnologa


InsertSort en la mquina A

2. 10 instrucciones = 2000 segundos 9 10 instrucciones / segundo


MergeSort en la mquina B

6 2

33 minutos, 20 segundos

50. 10 log 10 instrucciones 100 segundos 7 10 instrucciones / segundo 1 minuto, 40 segundos


- Qu pasa cuando n = diez millones? 2d, 7h, 33m, 20s vs 19m, 22s - Con cul algoritmo se quedara? - Cunto tardar InsertSort si ahora la mquina A es 10 veces ms rpida? - Cul es el efecto de la rapidez de la mquina?

11

Algoritmos como tecnologa

Como escojo el mejor algoritmo?

Medir el tiempo de respuesta.. pero dependo de:


Del subconjunto de pruebas escogidas Del ordenador donde hago las pruebas Del lenguaje de programacin utilizado Del compilador utilizado De la calidad de la programacin
Entre otras cosas

Para hacer esto tengo que codificar/programar y en ocasiones esto no es trivial, no es fcil.
12

Algoritmos como tecnologa


9000 8000

Cmo elijo un algoritmo?


7000 6000 5000 4000 3000 2000 1000 0 0 50 100

Corro el programa Mido el tiempo Grafico el resultado

Tiempo (ms)

Escribo el programa

Tamao entrada

13

Algoritmos como tecnologa

Cmo escojo el mejor algoritmo?


Otra alternativa:

Predecir el comportamiento del algoritmo sin necesidad de implementarlo. Para ello nos ayudar el anlisis de algoritmo y el clculo asinttico.

14

Anlisis de algoritmos y clculo asinttico

El anlisis de algoritmos estudia desde el punto de vista terico, los recursos computacionales que necesita la ejecucin de un programa de computadora: su eficiencia. Es un tcnica de estimacin. Es particularmente til para determinar si vale o no la pena implementar un algoritmo en particular. El clculo asinttico es una tcnica de caracterizacin de los algoritmos para poder 15 luego compararlos.

Anlisis de algoritmos

Utilizamos una descripcin de alto nivel para el algoritmo (generalmente) Caracterizamos el tiempo de ejecucin como una funcin de la entrada N, T(N) Se toma en cuenta todos las posibles entradas (instancias del problema) Permite evaluar la velocidad del algoritmo independientemente del entorno de HW o SW.
16

Anlisis de algoritmos

El modelo RAM (Random Access Machine)

Las instrucciones son ejecutadas una tras otra sin concurrencia. Un banco de celdas de memoria potencialmente ilimitado. Las celdas de memoria estn numeradas y accederlas toma una unidad de tiempo constante. Las operaciones son similares a cualquier computadora tradicional.

Entender que esto es una simplificacin de la realidad Por qu le parece? Se imagina otro modelo diferente?
17

Anlisis de algoritmos
120

mejor caso promedio caso peor caso


100 80 60 40 20 0

Peor caso (usual)

Tiempo mximo necesario para un problema de tamao N

Caso promedio

1000 2000 3000 4000 Tiempo esperado para un problema Tamao entrada de tamao N. Implica estudio estadstico de la distribucin de las instancias de los problemas.

Es el mejor estudio aunque es ms difcil su clculo

Mejor caso

Es el ms engaoso. 18

Tiempo de ejecucin

Tipos de anlisis

Ejemplo de los casos (1)

Considere el algoritmo de buscar un elemento en un arreglo desordenado:


Cul es el peor caso? Cul es el mejor caso? Cul el el caso promedio? Cmo calculara el tiempo para cada caso?

[16, 20, 30, 50, 26, 17, 59, 89, 78, 65, 7, 8, 1, 4, 5]

Buscamos el 16

Buscamos el 5

19

Ejemplo de casos (2)


Considere ahora el algoritmo de ordenacin por insercin:
int key, i; for ( int j=1; j < A.length; j++ ) { key = A[j]; i = j-1 ; while ( i >= 0 && A[i] > key ) { A[i+1] = A[i]; --i; } A[i+1] = key ; } 20 // Cdigo ejemplo en Java

Funcionamiento de insertSort
0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5

0 1

0 1

0 1

A = { 5,2 4,6,1,3}

21

Correctitud del algoritmo

Cmo s que el algoritmo de insercin es correcto?

Usamos el concepto de lazo invariante o loop invariant Ver pgina 17 de [CLRS]

22

Lazo invariante (LI)

Nos ayuda a entender porque un algoritmo es correcto. Existen tres cosas acerca del LI:

Inicializacin

Esta es verdadera antes de la primera iteracin del lazo

Mantenimiento

Esta es verdadera antes de una iteracin y permanece verdadera luego de la siguiente iteracin.

Terminacin

Cuando el lazo termina, la invarianza brinda una propiedad til que nos ayuda a comprender la correctitud del algoritmo. 23

Lazo invariante en InsertSort


El subarreglo A[0..j-1] esta ordenado, es decir los elementos originales en las posiciones 0 a j pero ordenados. Decimos entonces que esta propiedad de A[0..j-1] es el lazo invariante del algoritmo

Inicializacin:

Es verdadero ya que se mantiene antes de la primera iteracin. El subarreglo A[0..j-1] consiste en un solo elemento, esta ordenado. El cuerpo indica que antes y luego de cada iteracin la propiedad de A[0..j-1] se mantiene. El ciclo externo termina cuando j=n. Sustituyendo n por j en la propiedad A[0..j-1] tenemos el subarreglo A[0..n-1] que consiste en los elementos originales de A pero ordenados. Pero el subarreglo A[0..n-1] es el arreglo completo y por tanto, el arreglo A esta ordenado, tenindose as que el algoritmo es correcto. 24

Mantenimiento:

Terminacin:

Ejemplo de los casos (InsertSort)

Mejor caso del algoritmo

Cuando no se ingresa al ciclo mientras y ocurre cuando? Cuando se ingresa la mitad de las veces... aunque depende..de qu? Cuando siempre se ingresa.

Caso promedio

Peor caso

25

Calcular el tiempo de ejecucin de un algoritmo

Algunas consideraciones sobre las operaciones


Una asignacin

= 1 OE (Operacin elemental)

Una comparacin = 1 OE Acceso a arreglo = 1 OE Llamada a funcin= 1 OE Una operacin simple = 1 OE (resta, suma, .., etc) Consideramos todas las operaciones del mismo costo (aunque no es real, porqu?)
26

Calcular el tiempo de ejecucin de un algoritmo


Inspeccionando el cdigo podemos determinar el nmero de operaciones elementales. Analicemos el siguiente algoritmo, encontrar el mximo elemento de en un arreglo (Recibimos el vector A y su tamao n )

Algoritmo findMax(A, n) Maximo A[0] for i 1 to n 1 do if A[i] > Maximo then Maximo A[i] { incremento del contador i } return Maximo

# Operaciones 2 1+n 2(n 1) 2(n 1) (peor caso) 2(n 1) 1 Total 7n - 2


27

Clculo del tiempo de ejecucin de un algoritmo

El algoritmo findMax ejecuta 7n-2 operaciones en el caso peor. Definimos entonces :


a = Tiempo que toma la operacin elemental ms rpida b = Tiempo que toma la operacin elemental ms lenta

Decimos que T(n) es el tiempo para findMax. Entonces


a 7n 2 T n b 7n 2

De aqu concluimos que el tiempo de ejecucin T(n) esta limitado por dos funciones lineales. 28

Clculo del tiempo de ejecucin de un algoritmo

El cambio del entorno de HW o SW


Afecta a T(n) en un factor constante, pero NO afecta la tasa de crecimiento de T(n)

Por tanto la tasa de crecimiento lineal del tiempo de ejecucin de T(n) es una propiedad intrnseca del algoritmo findMax

29

Clculo asinttico

El clculo asinttico1 de un algoritmo me permite clasificarlo de acuerdo a su tasa de crecimiento (growth rate). Ignoramos las constantes que puedan tenerse y nos concentramos en el grado dominante. De esta forma puedo comparar algoritmos de una forma ms sencilla.
1

Propuesto por Donal Knuth en su libro El arte de programar computadores (primera edicin : 1968)

30

Tasas de crecimiento usuales en orden creciente


Funcin C lg n lg n n lg n n2 n3 2n n!
2

Nombre Constante Logartmica

Logartmica al cuadrado Lineal n lg n Cuadrtica Cbica Exponencial Factorial


31
Crecimiento

Crecimiento de algunas funciones


n3
10000 9000 8000 7000 6000

n2

t(N)

5000 4000 3000 2000 1000 0

n lg n n

Tamao de la entrada (n)

32

Tasas de crecimiento

No es afectada por factores constantes o por trminos de menor grado. Ejemplos:

1E+25 1E+23 1E+21 1E+19 1E+17 1E+15


Cuadrtico Cuadrtico Lineal Lineal

102 n 105

) 1E+13 n ( T 1E+11
1E+9 1E+7 1E+5 1E+3 1E+1 1E-1 1E-1 1E+1 1E+3 1E+5 1E+7 1E+9

tiene una tasa de crecimiento lineal

10 n 10 n
tiene una tasa de crecimiento cuadrtica.

33

Anlisis asinttico

Para realizar el anlisis debemos:

Encontrar el nmero de operaciones en el peor caso Expresar esta funcin en una notacin asinttica (por el momento en la notacin O (o grande ) Nosotros determinamos que findMax ejecuta en a lo sumo 7n-2 operaciones primitivas. Entonces decimos que el algoritmo findMax esta en O(n) tiempo

Ejemplo:

34

Notacin O (O grande)
Dada las funciones f(n) y g(n), se dice que f(n) est en O(g(n)) si existen las constantes positivas c y n0 tal que

f n cg n para n n 0

35

Notacin O
Ejemplo 1:
10,000
3n 2n+10 n

2n 10

esta en O n 1,000
100

2n 10 cn c 2 n 10 n 10 / c 2 c = 3 y n0= 10

10

1 1 10

100

1,000

36

Notacin O
Ejemplo 2:
La funcin

1.000.000 100.000 10.000 1.000 100 10 1 1

n^2 100n 10n n

n no esta en O n n cn n c
La desigualdad no puede ser satisfecha ya que c debe ser una constante
2

10

100

1.000
37

Ejemplos de Notacin O-grande

7n-2 esta en O(n) 3n3 + 20n2 + 5 esta en O(?) 3 lg n + lg lg n esta en O(?)

38

Reglas de la notacin O-grande

Si es f(n) un polinomio de grado d, entonces f(n) estan en O(nd), esto implica:


Extraer los trminos de menor orden Extraer los factores constantes Decir 2n esta en O(n) y no 2n esta en O(n2) Decir 3n + 5 esta en O(n) y NO 3n+5 esta en O(3n)
39

Utilizar la clase de funcin ms ajustada

Utilizar la expresin simple de la clase

Otras notaciones asintticas


Notacin (Omega)
f(n) esta en (g(n)) si existe una constante c y un entero constante n0 >= 1 tal que f(n) >= c.g(n) para n >= n0 Por ejemplo

n = log n
40

Otras notaciones asintticas


Notacin (theta)
f(n) esta en (g(n)) si existen las constantes c1 y c2 y un entero constante n0 >= 1 tal que c1.g(n) <= f(n) <= c2.g(n) para n >= n0

41

Notaciones asintticas, una visin intuitiva

O grande

f(n) esta en O(g(n)) si f(n) es asintticamente menor o igual que g(n) f(n) esta en (g(n)) si f(n) es asintticamente mayor o igual a g(n) f(n) esta en (g(n)) si f(n) es asintticamente igual a g(n)
42

Grande

Grande

Ejercicios

Calcule el t(n) y O() para cada uno de los trozos de cdigo mostrados abajo
Ejercicio #1 sum = 0 for ( i=1; i<=n ; i++ ) for (j=1; j<=n; j++ ) sum++; ---------------------------------Ejercicio #2 sum = 0 for (k=1; k<=n; k*=2) for (j=1; j<= n; j++) sum++; ---------------------------------Ejercicio #3 sum = 0 for (i=1; i<=n; i++) for (j=1; j<=i; j++) sum++;

43

Gracias por la atencin!!

44

You might also like