Académique Documents
Professionnel Documents
Culture Documents
Notacin Asinttica
DR. JESS A. GONZLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE
Introduccin
2
!! 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
3
!! 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
Introduccin
4
!! 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
Introduccin
5
!! 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
!!
Principio de Invarianza
6
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
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
!!
Crecimiento de Funciones
9
!! Orden de crecimiento de funciones !! Caracteriza eficiencia de algoritmos !! Permite comparar performance relativo de algoritmos !! Es posible en ocasiones calcular el tiempo de
ejecucin exacto
No siempre vale la pena el esfuerzo !! Las constantes y trminos de orden ms bajo son dominados por los efectos del tamao de la entrada
!!
Crecimiento de Funciones
10
Geom. Dicho de una curva: Que se acerca de continuo a una recta o a otra curva sin llegar nunca a encontrarla.
Crecimiento de Funciones
11
! Eficiencia Asinttica de Algoritmos ! Cuando el tamao de la entrada es suficientemente grande que slo el orden de crecimiento del tiempo de ejecucin es relevante. ! Slo importa cmo incrementa el tiempo de ejecucin con el tamao de la entrada en el lmite
!
Notacin Asinttica
12
!! Eficiencia Asinttica !! Orden de crecimiento del algoritmo conforme el tamao de la entrada se acerca al lmite (incrementa sin frontera) !! Para determinar la complejidad de un algoritmo, se
Notacin O
13
!! f(n) = O(g(n)), g(n) es una cota superior de f(n) !! Dada una funcin g(n), denotamos como O(g(n)) al
Propiedades de O
14
Para cualquier funcin de f se tiene que f " O(f). f " O(g) $ O(f) % O(g). O(f) = O(g) & f " O(g) y g " O(f). Si f " O(g) y g " O(h) $ f " O(h). Si f " O(g) y f " O(h) $ f " O(min(g,h)) . Regla de la suma: Si f1 " O(g) y f2 " O(h) $ f1 + f2 " O(max(g,h)). Regla del producto: Si f1 " O(g) y f2 " O(h) $ f1 f2 " O(g h) . Si existe lim n "! Si k ' 0 y k < ( entonces O(f) = O(g).
f ( n) = k , dependiendo del valor de k obtenemos: g ( n)
Si k = 0 entonces f " O(g), es decir, O(f) % O(g), pero sin embargo se verifica que g ) O(f).
Notacin Omega: !
15
f(n) !! Dada una funcin g(n), denotamos al conjunto de funciones !(g(n)) de la siguiente forma:
!(g(n)) = {f:N"R+ | ! c constante positiva y n0: 0 < cg(n) ! f(n), # n " n0}
Propiedades de Omega
16
Para cualquier funcin de f se tiene que f " *(f). f " *(g) $ *(f) % *(g). *(f) = *(g) & f " *(g) y g " *(f). Si f " *(g) y g " *(h) $ f " *(h). Si f " *(g) y f " *(h) $ f " *(max(g,h)) . Regla de la suma: Si f1 " *(g) y f2 " *(h) $ f1 + f2 " *(g + h). Regla del producto: Si f1 " *(g) y f2 " *(h) $ f1 f2 " *(g h) . Si existe lim n "!
f ( n) = k , dependiendo del valor de k obtenemos: g ( n) Si k ' 0 y k < ( entonces *(f) = *(g).
Si k = 0 entonces g " *(f), es decir, *(g) % *(f), pero sin embargo se verifica que f ) *(g).
de f(n) tanto superior como inferior respectivamente !! Diremos que f(n) " " (g(n)) si f(n) pertenece tanto a O(g(n)) como a ! (g(n))
"(g(n)) = {f:N"R+ | !c1,c2 constantes positivas, n0: 0 < c1g(n) ! f(n) ! c2g(n), # n " n0}
Propiedades de Theta
18
Para cualquier funcin f se tiene que f " +(f). f " +(g) $ +(f) % +(g). +(f) = +(g) & f " +(g) y g " +(f). Si f " +(g) y g " +(h) $ f " +(h). Regla de la suma: Si f1 " +(g) y f2 " +(h) $ f1 + f2 " +(max(g,h)). Regla del producto: Si f1 " +(g) y f2 " +(h) $ f1 f2 " +(g h) . Si existe lim n "! Si k ' 0 y k < ( entonces +(f) = +(g).
f ( n) = k , dependiendo del valor de k obtenemos: g ( n)
Notacin Theta
19
!! Teorema 2.1 !! f(n) = " (g(n)) s y solo si f(n) = O(g(n)) y f(n) = ! (g(n)).
!! 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)
":
" (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 ecuacin se analiza por casos:
!!
!!
!!
!! !!
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)
Ejemplo O (1/2)
23
!! 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 (2/2)
24
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)
Notacin o
25
Notacin #
26
Orden de Complejidad
27
!! La familia O(f(n)),
de complejidad
!!
Se elige como representante del orden de complejidad a la funcin f(n) ms sencilla de la familia
complejidad
Orden de Complejidad
28
!! 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
Orden de Complejidad
29
140 120 100 80 60 40 20 0 1 2 3 4 5 6 7 8 9 10 Constante Log Lineal Casi lineal Cuadrtico Cbico Potencia Factorial
Consejos
30
Consejo 1
31
!! 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
f(c) considera el tiempo de comparacin de n con cada uno de los casos case 1 case k
Consejo Instruccin if
33
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;
Tarea
38