Análisis de complejidad big o

Post on 25-May-2015

334 views 4 download

description

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

Transcript of Análisis de complejidad big o

Análisis de complejidad

Notación 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).

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.

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.

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.

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

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)

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”.

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.

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 )

Notación Theta

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

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

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.

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.

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.

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

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.

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

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

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.

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.

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.

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.

• Entregar MRR7 el 4 de noviembre.