Está en la página 1de 33

TC 4001 Fundamentos de Computacin (Anlisis de Algoritmos) Introduccin a Anlisis de Algoritmos

Dr. Hugo Terashima M. terashima@itesm.mx http://homepages.mty.itesm.mx/terashima h //h i / hi

Contenidos

Presentacin Introduccin Clasificacin de Problemas Caractersticas de Algoritmos Motivacin al A li i d Al M ti i l Anlisis de Algoritmos it Conceptos bsicos Notaciones Asintticas Conclusiones

Motivacin

Problema de Garey and Johnson (1979)

Motivacin

Problema de Garey and Johnson (1979) Cmo saber que el problema es fcil (o difcil)? Existe algn algoritmo que lo resuelve? El algoritmo es exacto o aproximado? Todo ello es debido a que el problema es muy difcil, no hay algoritmo que lo resuelva o es que no tengo la capacidad de resolverlo?

Clasificacin de Problemas
PROBLEMAS

ABIERTOS

NO RESOLVIBLES

RESOLVIBLES

NP

Herramientas Matemticas

Caractersticas de un Algoritmo
Correctitud (Correctness) Cantidad de Trabajo hecho (Tiempo, No. de ops., etc.) Cantidad de espacio utilizado Simplicidad, Simplicidad claridad Optimalidad

Ejemplo

cont = 1; ; while (cont <= n) { x = x + a[cont]; x = x + b[cont]; cont = cont + 1; }

1 n+1 n n n n (goto implcito) 1 goto en falso. falso

TOTAL: 5n + 3

Ejemplo

z = 0; for (x = 1; x<=n; x++) for (y = 1; y<=n; y++) y< n; z = z + a[x,y];

1 1 asignacin + (n+1) comparaciones (n+2)*n = n2 +2n n*n = n2 2n2 (incremento + goto implcito n ( t en falso for y) (goto f l f ) 2n (incremento + goto implcito) 1 (goto en falso for x) TOTAL: 4n2 + 6n + 4

Motivacin

Por qu analizar algoritmos? Ejemplo 1: Suponer que se tiene una supercomputadora que puede ejecutar 100 millones de instrucciones por segundo y otra PC que puede realizar 1 milln de instrucciones por segundo. Si un algoritmo con complejidad de 2 2 se corre en l supercomputadora d l i l jid d d 2n la d y otro del mismo tipo con complejidad 50nlogn se corre en la PC. Para un tamao de n=106 elementos cunto tiempo se lleva en la supercomputadora? cunto en la PC?

Motivacin
Por qu analizar algoritmos? Considera una computadora que realiza 1000 operaciones por segundo

Motivacin

Por qu analizar algoritmos? Considera una computadora que realiza 10000 operaciones por segundo (10 veces ms que en el d l caso anterior)

Motivacin

Qu representa un algoritmo con tiempo exponencial? n3 vs. 2n

Consideremos una misma mquina con capacidad de 109 ops/seg. y un tamao de problema de 103, Qu tiempo se lleva con cada algoritmo?

Comportamiento de las funciones

n2

n sqrt(n) n log n n log n


14

Conceptos Bsicos de AA

PROBLEMA

Algoritmo A1

Algoritmo A2

Algoritmo Am

f1(n)

f2(n) ( )

fm(n)

Conceptos Bsicos de AA

Lmite inferior (del problema) Lmite L it superior i Caso Peor (del algoritmo) Caso Promedio (del algoritmo) Optimalidad

Conceptos Bsicos de AA

Considerar el algoritmo de bsqueda secuencial en un arreglo de n elementos El elemento a buscar es elementos. x. Cul C l es el caso peor? l ? Cul es su caso promedio si x existe? Cmo vara la complejidad si hay una probabilidad q de que x est en la lista?

Notaciones Asintticas
n

PROBLEMA

Algoritmo A1

Algoritmo A2

Algoritmo Am

f1(n)

f2(n)

fm(n) ( )

Necesitamos una notacin menos precisa pero que nos diga la manera cmo esa N it t i i di l funcin crece en trminos de n !!!!!!!!

Notaciones Asintticas

O(g) funciones que crecen no ms rpido que g

(g) funciones que crecen a la misma razn que g

(g) funciones que crecen al menos tan rpido que g

Notaciones Asintticas
Definicin 1.- Sea g:N R*. O(g) es el conjunto de funciones f:N R* tal que para alguna constante c E R+ y algn n0 E N, f(n) <= cg(n) para toda n >= n0

cg(n)

f(n)

n0

Definicin

Ejemplos:
n+5 es O(n) pues n+5 <= 2n para toda n >= 5 (n+1)2 es O(n2) pues (n+1)2 <= 4n2 para n>= 1 (n+1)2 NO es O(n) pues para cualquier c > 1 no se cumple que (n+1)2 <= c*n

Ordenes ms comunes
O(1) O(log(n)) O(n) O(nlog(n)) O(n2 ) O(n2log(n)) O(n3 ) O (nm ) O(mn ) O(n!) Constante Logartmico Lineal Cuadrtico Cbico Polinomial exponencial factorial
22

Notaciones Asintticas
Definicin 2.- Sea g:N R*. (g) es el conjunto de funciones f:N R* tal que para alguna constante c E R+ y algn n0 E N, f(n) >= cg(n) para toda n >= n0

f(n)

cg(n)

n0

Notaciones Asintticas
Definicin 3.- Sea g:N R*. (g)=O(g) (g) ( f E (g) f es de orden g)

c1g(n)

f(n)

c2g(n)

n0

En resumen...

Cmo analizar la complejidad de tiempo de un algoritmo? Contando la C t d l cantidad d operaciones tid d de i bsicas Las que ms se repiten Convirtiendo a Notacin Asinttica Tomando el trmino ms representativo

25

Ejemplo: Sumar los datos de un arreglo

suma = 0; for (int i=1; i<=n; i++) suma + arreglo[ i ]; += l [ ]


Cmo obtener la complejidad de tiempo del algoritmo? Operacin bsica: suma = suma + arreglo[ i ] ; Se realiza n veces Algoritmo de orden n: O(n)

26

Otro mtodo para calcular la complejidad

Consiste en aplicar reglas a los estatutos g estructurados: 1.Secuencia de instrucciones 2.Decisiones ( j 2D i i (ejemplo: if) l 3.Ciclos (ejemplo: while) 4.Recursividad 4 Recursividad

27

Regla 1: Secuencia de instrucciones

O(g1(n)) O(g2(n)) O(g3(n))

O( mayor(g1(n), g2(n), , gm(n) )


Ejemplo: j p Una secuencia de 3 ciclos:

O(gm(n))

Tendr como orden total


O(n2).
28

Ciclo 1 = O(n) Ciclo 2 = O(log n) Ciclo 3 = O(n2)

Regla 2: Decisiones

O( mayor(g1(n) g2(n)) ) (n),


O(g1(n)) O(g2(n)) Ejemplo: Una d decisin con:
Rama then = O(n log n) Rama else = O(log n) ( g )

Tendr como orden total


O(n log n) n).
29

Regla 3: Ciclos

O( m * g(n) )
O(g(n)) Se repite m veces Ejemplo: Un ciclo cuya instruccin:
Tiene un O(log n) Se repite n/2 veces

Tendr como orden total


O( n log n) = O(n log n) n).
30

Consideraciones especiales

En decisiones y ciclos anidados: Analizar el cdigo desde la instruccin ms interna hacia el ms externa. Tip para los ciclos: Normalmente cul es el orden de la instruccin interna? Si la variable d control se incrementa o l i bl de t l i t decrementa con un valor constante: Orden LINEAL. Si la variable de control se multiplica o divide por un valor constante: Orden LOGARTIMICO.
31

Conclusiones

Existen diferentes problemas que tienen su complejidad intrnseca y que es importante investigar Es relevante analizar algoritmos no importa el incremento en la capacidad computacional Analizar algoritmos permite escribir mtodos ms eficientes y resolver problemas ms grandes

Bibliografa

Libro de Sara Baase: Captulo 1