Análisis de complejidad big o

24
Análisis de complejidad Notación Big O

description

Notación Big O http://discrete.gr/complexity/?es

Transcript of Análisis de complejidad big o

Page 1: Análisis de complejidad  big o

Análisis de complejidad

Notación Big O

Page 2: Análisis de complejidad  big o

Repaso de comportamiento asintótico

• El eliminar todas estas constantes ornamentales hacen más sencillo identificar el comportamiento asintótico de una función contadora-de-instrucciones de un programa.

• Cualquier programa que carezca de bucles tendrá una f(n) = 1, ya que el número de instrucciones que requiere es simplemente una constante (a menos que utilice recursión).

Page 3: Análisis de complejidad  big o

Repaso de comportamiento asintótico

• Cualquier programa con un único bucle que vaya desde 1 a n tendrá f(n) = n, ya que ejecutará un número fijo de instrucciones antes del bucle, un número fijo de instrucciones después del bucle y un número constante de instrucciones dentro del bucle que corre n veces.

Page 4: Análisis de complejidad  big o

Regla General 1

• El análisis de programas sencillos se puede hacer contando los bucles anidados que contiene el programa. – Un sólo bucle sobre n ítems genera f(n)=n. – Un bucle dentro de otro bucle f( n ) = n2. – Un bucle dentro de un bucle que está dentro de

otro bucle genera f( n ) = n3.

Page 5: Análisis de complejidad  big o

Regla General 2

• Dado un conjunto de bucles que son secuenciales, el más lento de ellos determina el comportamiento asintótico del programa.

• Dos bucles anidados, seguidos por un solo bucle, asintóticamente es lo mismo que los bucles anidados por sí solos, ya que los bucles anidados dominan el bucle individual.

Page 6: Análisis de complejidad  big o

Notación Theta

• Ahora, enfoquémonos en la sofisticada notación que los científicos computacionales utilizan.

• Cuando hayamos encontrado la f asintótica exacta, diremos que nuestro programa es Θ(f( n )).

Page 7: Análisis de complejidad  big o

Notación Theta

• Por ejemplo, los programas anteriores son• Θ( 1 ), Θ( n2 ) y Θ( n2 ) respectivamente.• Θ(n) se pronuncia "theta de n". • A veces diremos que f(n), la función original

que cuenta las instrucciones que incluyen las constantes es Θ(algo)

Page 8: Análisis de complejidad  big o

Notación Theta

• Por ejemplo, podremos decir que f( n ) = 2n es una función que es Θ( n ) - nada nuevo en esto.

• También podremos escribir 2n Θ( n ), lo ∈cual se pronuncia " dos n es theta de n”.

Page 9: Análisis de complejidad  big o

Notación Theta

• No se confunda con esta notación: Todo lo que está diciendo es que si hemos contados el número de instrucciones que un programa requiere y que si esa cantidad es 2n, entonces el comportamiento asintótico de nuestro algoritmo es descrito por n, a lo cual llegamos al eliminar las constantes.

Page 10: Análisis de complejidad  big o

Notación Theta

• Dada esta notación, los siguientes son algunos enunciados puramente matemáticos.n6 + 3n Θ( n∈ 6 )2n + 12 Θ( 2∈ n )3n + 2n Θ( 3∈ n )nn + n Θ( n∈ n )

Page 11: Análisis de complejidad  big o

Notación Theta

• Llamamos esta función, esto es, lo que colocamos dentro de Θ (aquí) como complejidad temporal, o simplemente complejidad de nuestro algoritmo.

Page 12: Análisis de complejidad  big o

Notación Theta

• Entonces, un algoritmo con Θ(n) es de complejidad n.

• También tenemos nombres especiales para Θ(1), Θ(n), Θ(n2) y Θ(log(n)) ya que aparecen bastante seguido.

• Decimos que un algoritmo Θ(1) es un algoritmo temporalmente-constante, Θ(n) es linear, θ(n2) es cuadrático y Θ(log(n)) es logarítmico

Page 13: Análisis de complejidad  big o

Notación Big O

• Para evaluar la complejidad de programas complicados es modificarlos mentalmente para empeorarlos de manera que sean más fáciles de analizar y luego encontrar la complejidad de este nuevo programa que generamos.

Page 14: Análisis de complejidad  big o

Notación Big O

• Si podemos encontrar la complejidad del programa peor, entonces sabremos que nuestro programa original es como máximo así de malo, o mejor que eso.

Page 15: Análisis de complejidad  big o

Notación Big O

• De esta forma, si encontramos una buena complejidad en nuestro programa modificado, el cual es peor que el original, podremos saber que nuestro programa original también tendrá una complejidad bastante buena, tan buena como la del programa alterado, o incluso mejor.

Page 16: Análisis de complejidad  big o

Notación Big O

• Si esto es así, diremos que el algoritmo original es O( complejidad peor ).

• Por ejemplo O( n2 ) se pronuncia "O-Grande de n cuadrado".

• Lo que esto nos dice es que asintóticamente nuestro programa no es peor que n2.

• Puede que sea mejor que eso, o quizá es igual que eso.

• Dicho sea de paso, si de hecho nuestro programa es Θ( n2 ), aún podemos decir que es O( n2 ).

Page 17: Análisis de complejidad  big o

Notación Big O

• Para ayudarle a entenderlo, imagine que alteramos el programa original de un modo que no cambie tanto, pero que aún así lo hace algo peor.

• Por ejemplo podemos añadir instrucciones insignificantes al comienzo del programa.

Page 18: Análisis de complejidad  big o

Notación Big O

• Haciendo esto alteraremos la función contadora-de-instrucciones mediante una simple constante, la cual se ignora en el comportamiento asintótico.

• Por esto, un programa que es Θ( n2 ) también será O( n2 ).

Page 19: Análisis de complejidad  big o

Notación Big O

• Pero, a la inversa, un programa que es O( n2 ) podría no ser Θ( n2 ). Por ejemplo, cualquier programa que es Θ( n ) también es O( n2 ) además de ser O( n ).

Page 20: Análisis de complejidad  big o

Notación Big O

• Si nos imaginamos que un programa Θ( n ) es un bucle sencillo “for” que se repite n veces, podremos empeorarlo al envolverlo en otro bucle “for” que también se repita n veces, generando así un programa con f( n ) = n2.

Page 21: Análisis de complejidad  big o

Notación Big O

• Si generalizamos esto, cualquier programa que sea Θ( a ) es O( b ) cuando b es peor que a.

• Note que nuestra alteración al programa no tiene porqué darnos un programa que sea equivalente o comparable a nuestro programa original.

• Solamente tiene realizar más instrucciones que el original para un n dado, ya que simplemente lo estaremos usando para contar instrucciones, no para resolver nuestro problema concreto.

Page 22: Análisis de complejidad  big o

Notación Big O

• Por tanto, afirmar que nuestro programa es O( n2 ) es quedarse a resguardo: Hemos analizado nuestro algoritmo y hemos encontrado que nunca es peor que n2.

• Pero podría darse el caso de que de hecho sea n2.

• Esto nos entrega un buen estimativo de qué tan rápido corre nuestro programa.

Page 23: Análisis de complejidad  big o

Tarea MRR 7

• De los programas de ordenamiento que hemos visto (inserción y burbuja), modifiquen su análisis asintótico para que encuentren una notación Big O adecuada para dichos algoritmos.

• En tu cuaderno MRR explica cuál es tu propuesta de modificación de los algoritmos de ordenamiento para obtener una notación Big O de los mismo. Justifica tu respuesta.

Page 24: Análisis de complejidad  big o

• Entregar MRR7 el 4 de noviembre.