Tema 2 - Notación Asintótica

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 37

Anlisis y Diseo de Algoritmos

Notacin Asinttica
1 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 de una funcin matemtica


Polinomios Logaritmos Exponentes

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
Por ejemplo, sume 2 matrices e imprima el resultado. de que orden es el problema?

Principio de Invarianza
6

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


7

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?

Operacin Elemental (OE)


8

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

Crecimiento de Funciones
9

Orden decrecimiento 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

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

El tamao de la entrada incrementa sin frontera

Usualmente el algoritmo asintticamente ms

eficiente es la mejor opcin, excepto para entradas muy pequeas

Notacin Asinttica
11

Eficiencia Asinttica
Orden de crecimiento del algoritmo conforme el tamao de la entrara se acerca al lmite (incrementa sin frontera)

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 el orden de la funcin en trminos de funciones matemticas, Se clasifica de acuerdo a su complejidad

Notacin O
12

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 conjunto de funciones tales que:
O(g(n)) = {f:N R+ | c constante positiva y noN : f(n) cg(n), n n0}

Propiedades de O
13

1. 2. 3. 4. 5. 6. 7. 8.
a) b)

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
14

f(n) = (g(n)), g(n) es una cota asinttica inf. de 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}

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

Propiedades de Omega
15

1. 2. 3. 4. 5. 6. 7. 8.
a) b)

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 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).
f ( n) =k g ( n)

, dependiendo del valor de k obtenemos:

Notacin Theta
16

f(n) = (g(n)), c2g(n) y c1g(n) son las cotas asintticas 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
17

1. 2. 3. 4. 5. 6. 7.
a) b)

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
f ( n) = k , dependiendo del valor de k obtenemos: g ( n) Si k 0 y k < entonces (f) = (g).

Si k = 0 entonces los rdenes exactos de f y g son distintos.

Notacin Theta
18

Teorema 2.1
f(n) = (g(n)) si y slo s f(n) = O(g(n)) y f(n) = (g(n)).

Ejemplo Theta (1/3)


19

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)

Ejemplo Theta (2/3)


20

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 c1 3/n 3/n c2

Esta ecuacin se analiza por casos:

Ejemplo Theta (3/3)


21

Para el caso c1 3/n

Como c1 es constante positiva, entonces


0 < - 3/n n>6

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)

Por tanto, si n0 = 7, entonces c1 3/7, lo que es igual a c1 1/14. Sea c1 = 1/14

Ejemplo O (1/2)
22

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)
23

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)

Notacin o
24

f(n) = o(g(n)), g(n) es una cota superior de f(n) que no es asintticamente justa (tight)

Notacin
25

f(n) = (g(n)), g(n) es una cota inferior de f(n) que no es asintticamente justa (tight)

Orden de Complejidad
26

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
27

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
28

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

Consejos
29

Consejos para Identificar f(n) que Represente el Nmero de Operaciones Elementales (OE) de un Algoritmo

Consejo 1
30

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


31

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

Consejo Instruccin if
32

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


33

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

Consejo Instruccin while


34

for (i = 0; i <= n; i++) { S; }

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

Consejo Llamado a Funciones NO Recursivas


35

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)

Consejo para Funciones Recursivas


36

El tiempo de ejecucin de una funcin recursiva se calcula a travs de la solucin de funciones de recurrencia (siguiente tema)

Tarea
37

Ejercicios 2.1-3, 2.2-2 (del Cormen, Leiserson, Rivest, Stein) Cules de las siguientes afirmaciones es cierta?
n2 O(n3) 2n+1 O(2n) n2 (n3)

También podría gustarte