Está en la página 1de 15

Notacin Asinttica

Anlisis de Algoritmos

Temas

Introduccin
Notacin O
Notacin Omega
Notacin Theta

1
Introduccin

Por qu el anlisis de algoritmos?


Determinar tiempos de respuesta (runtime)
Determinar recursos computacionales
Aproximacin terica
Generaliza el nmero de operaciones que
requiere un algoritmo para encontrar la solucin a
un problema

Introduccin

Ventajas
Eleccin de algoritmos eficientes para resolver
problemas especficos
No depende de lenguajes de programacin ni de
hardware
Desventajas
Para muchos casos, en anlisis no es trivial

2
Introduccin

Para realizar el anlisis de un algoritmo, es


necesario:
Conocer la complejidad del problema que resuelve el
algoritmo
Conocer la dimensin de la entrada (nmero de
elementos)
Determinar el nmero de operaciones a realizar
La complejidad de un algoritmo se representa a
travs de una funcin matemtica
Polinomios
Logaritmos
Exponentes

Introduccin

Funciones
f(n) = cn (algoritmos lineales)
f(n) = cn2 (algoritmos cuadrticos)
f(n) = cn3 (algoritmos cbicos)
Un algoritmo puede estar compuesto de dos
o ms operaciones, por lo que determinar la
complejidad depende de identificar la
operacin ms costosa en el algoritmo
Por ejemplo, sume 2 matrices e imprima el
resultado. de que orden es el problema?

3
Principio de la Invarianza

A travs de un anlisis terico, se puede


obtener funciones que representen el nmero
de operaciones, independientemente de
cmo se implementaron
Anlisis Principio de la Invarianza
Dos implementaciones distintas de un mismo
algoritmo no van a diferir en su eficiencia en ms
de una constante multiplicativa c

Anlisis Peor Caso Caso Promedio -


Mejor Caso
El tiempo que requiere un algoritmo para dar una
respuesta, se divide generalmente en 3 casos
Peor Caso: caso ms extremo, donde se considera el
tiempo mximo para solucionar un problema
Caso promedio: caso en el cual, bajo ciertas restricciones,
se realiza un anlisis del algoritmo
Mejor caso: caso ideal en el cual el algoritmo tomar el
menor tiempo para dar una respuesta
Por ejemplo, Cul es el peor y mejor caso de el
algoritmo de ordenamiento burbuja?

4
Operacin Elemental (OE)

Es aquella operacin cuyo tiempo de


ejecucin se puede acotar superiormente por
una constante que solamente depender de
la implementacin particular usada
No depende de parmetros
No depende de la dimensin de los datos de
entrada

Notacin Asinttica

Para determinar la complejidad de un


algoritmo, se siguen los siguientes pasos:
Se analiza el algoritmo para determinar una
funcin que represente el nmero de operaciones
a realizar por el mismo
Se define en trminos de funciones matemticas,
el orden de la funcin
Se clasifica de acuerdo a su complejidad

5
Orden O

Dada una funcin g(n), denotamos como O(g(n)) al


conjunto de funciones tales que:
O(g(n)) = {f:NR+ | c constante positiva y noN : f(n)
cg(n), n n0}

Notacin Omega

Dada una funcin g(n), denotamos al conjunto de


funciones (g(n)) de la siguiente forma:
(g(n)) = {f:NR+ | c constante positiva y n0: 0 < cg(n)
f(n), n n0}

NOTA: f(n) (g(n)) si y solo si g(n)O(f(n))

6
Notacin Theta

Diremos que f(n)(g(n)) si f(n) pertenece tanto a


O(g(n)) como a (g(n))
(g(n)) = {f:NR+ | c1,c2 constantes positivas, n0: 0 < c1g(n)
f(n) c2g(n), n n0}

Ejemplo Theta (1/3)

Considere la funcin f(n) = n2 3n


Debido a que f(n) es un polinomio cuadrtico, se
deduce que su estructura general tiene la forma
an2 + bn + c
Para n muy grande, an2 domina al resto de la
ecuacin
Por tanto, se propone una g(n) = n2 de tal forma
que se demostrar si f(n) (n2)

7
Ejemplo Theta (2/3)

Para demostrarlo, se debe apelar a la


definicin de :
(n2) = {f(n) | c1,c2 constantes positivas, n0: 0 < c1n2 f(n)
c2 n2, n n0}, donde f(n) = n2 3n
Se deben encontrar c1, c2 y n0 para los cuales se
cumple
0 < c1n2 n2 3n c2 n2
0 < c1 3/n c2
Esta ecuacin se analiza por casos:
c1 3/n
3/n c2

Ejemplo Theta (3/3)

Para el caso c1 3/n


Como c1 es constante positiva, entonces
0 < - 3/n
n>6
Por tanto, si n0 = 7, entonces c1 3/7, lo
que es igual a c1 1/14. Sea c1 = 1/14
Para el caso 3/n c2, cuando n
entonces 3/n . Por tanto, c2 = 1/2
Para c1 = 1/14, c2 = y n0 = 7 se cumple
que f(n) (n2)

8
Ejemplo O

Considere la funcin f(n) = 2n2 + 3n + 1


Debido a que f(n) es un polinomio cuadrtico, se
deduce que su estructura general tiene la forma
an2 + bn + c
Para n muy grande, an2 domina al resto de la
ecuacin
Por tanto, se propone una g(n) = n2 de tal forma
que se demostrar si f(n) O(n2)

Ejemplo O

Para demostrarlo, se debe apelar a la


definicin de O:
O(n2) = {f(n) | c constante positiva, n0: 0 < f(n) c n2, n
n0}, donde f(n) = 2n2 + 3n + 1
Se deben encontrar c y n0 para los cuales se
cumple
0 < 2n2 + 3n + 1 c n2
0 < 2 + 3/n + 1/n2 c
Notemos que si n , 2 + 3/n + 1/n2 2
Si n = 1 entonces 2 + 3/n + 1/n2 = 6
Por tanto, para c = 6 y n0 = 1, se demuestra que f(n)
O(n2)

9
Orden de Complejidad

La familia O(f(n)), (f(n)), (f(n)) define un


orden de complejidad
Se elige como representante del orden de
complejidad a la funcin f(n) ms sencilla de la
familia
Se identifican diferentes familias de orden de
complejidad

Orden de Complejidad

O(c) : Orden constante


O(log n): orden logartmico
O(n): orden lineal
O(n log n): orden casi lineal
O(n2): Orden cuadrtico
O(n3): Orden cbico
O(nc): Orden polinmico de grado c
O(2n): Orden exponencial
O(n!): Orden factorial

10
Orden de Complejidad

140

120 Cons tante


Log
100
Lineal
80 Cas i lineal
60 Cuadrtico
Cbico
40
Potencia
20 Factorial
0
1 2 3 4 5 6 7 8 9 10

Consejos para Identificar f(n)


que Represente el Nmero de
OE de un Algoritmo

11
Consejo 1

Se asume que el tiempo de una OE es de


orden 1
La constante c del principio de la invarianza se
asume, por fines prcticos, como 1
El tiempo de ejecucin de una secuencia de
instrucciones (elementales o no
elementales), se obtiene sumando los
tiempos de ejecucin de cada instruccin

Consejo Instruccin case

El tiempo de ejecucin de una instruccin


switch(n) case 1: S1, , case k: Sk es:

f(n) = f(c) + max{f(S1), , f(Sk)}

f(c) considera el tiempo de comparacin de n


con cada uno de los casos case 1 case k

12
Consejo Instruccin if

El tiempo de ejecucin de una instruccin if


C then S1 else S2 es:
f(n) = f(C) + max{f(S1), f(S2)}
if (n == 0)
for (i = 0; i<n; i++)
r += i;
else
r = 2;

Consejo Instruccin while

Tiempo de ejecucin de la instruccin:


while (c) {
S
}
es definido por:
f(n) = f(c) + (#iteraciones)*(f(c)+f(s))

Nota: las instrucciones for, repeat, loop son


equivalentes a una instruccin while

13
Consejo Instruccin while

for (i = 0; i <= n; i++) i = 1;


{ while (i <= n)
S; {
} S;
i++;
}

Consejo Llamado a Funciones NO


Recursivas
El tiempo de ejecucin de una llamada a una
funcin F(A1, , As) es:
1, por el llamado a la funcin, ms
Tiempo de evaluacin de los parmetros A1, ,
As
Tiempo de ejecucin de la funcin (s)

f(A1, , As) = 1 + f(A1) + + f(As) + f(s)

14
Consejo para Funciones Recursivas

El tiempo de ejecucin de una funcin


recursiva se calcula a travs de la solucin
de funciones de recurrencia (siguiente tema)

15