1. Resumen AA
Ing. Mary LópezProgramacion II
Universidad Autónoma Gabriel Rene Moreno
FICCT
Semestre I/2015
2. Justificación
Desde el punto de vista computacional, es necesario
disponer de alguna forma de comparar una solución
algorítmica con otra.
De esta forma se puede conocer cómo se
comportarán al tratar problemas "grandes".
Recuerde para desarrollar software se necesita:
- Conocer la metodología con que se va a afrontar
dicho problema.
- Conocer de manera especifica y clara las
funciones que puede realizar el computador y las
formas en que se pueden manipular los
elementos o dispositivos que lo conforman.
Buscar el Optimo uso de los recursos.
3. Tomar en cuenta …
La idea que subyace tras el concepto de
complejidad temporal de un algoritmo es
básicamente, medir cuánto tarda en resolver el
problema.
Para resolver cualquier problema, son necesarios
datos de entrada sobre los que trabaja el
algoritmo. Por lo tanto los datos de entrada influyen
en la talla del problema.
4. El tamaño del Problema
El algoritmo tardará más o menos en solucionar un
problema DEPENDIENDO de una talla u otra.
No puede tardarse lo mismo en ordenar un array de
100 que otro de 100000.
Resulta mas practico en vez de medir tiempos:
Contar las instrucciones que debe realizar el
algoritmo. Asumiendo que cada instrucción se
ejecuta en un tiempo constante
Luego complejidad es saber cómo crece el número
de instrucciones necesarias para resolver el problema
con respecto a la talla del problema
5. La complejidad no es un
número: es una función
• La línea verde. Su número de
instrucciones, y por tanto su
tiempo de ejecución crece
linealmente conforme n se hace
más grande.
• La línea azul El número de
instrucciones necesarias se
mantiene constante, por muy
grande que sea n.
• La línea granate. El número de
instrucciones crece
proporcionalmente al cuadrado
de n conforme este crece.
Nro. Instrucciones
N
6. Asíntotas y órdenes de
complejidad
Las asíntotas son rectas a las cuales la
función se va aproximando
indefinidamente, cuando por lo menos
una de las variables (x o y) tienden al
infinito.
Se puede agrupar todas las complejidades
que crecen igual en un mismo saco y luego
llamarlo orden de complejidad
7. Orden Nombre Comentario
O(1) constante
Todos aquellos algoritmos que responden en un tiempo constante, sea cual
sea la talla del problema. Son los que aplican alguna fórmula sencilla,
Por ejemplo, hallar el máximo de dos valores
O(log n) logarítmico
Los que el tiempo crece con criterio logarítmico, no importando cuál sea la
base mientras ésta sea mayor que 1. Así normalmente no se indica la base.
No suelen ser muchos e implican que un bucle realiza menos iteraciones que
la talla del problema, lo cual no suele ser muy común.
Por ejemplo, la búsqueda binaria en un vector ordenado.
O(n) lineal
El tiempo crece linealmente con respecto a la talla.
Por ejemplo, encontrar el máximo de un vector de talla n.
O(n log n)
Ene logarítmico
log lineal
linearítmico
n X logaritmo de n
Éste orden tiene muchos nombres. Es un orden relativamente bueno, porque
la mayor parte de los algoritmos tienen un orden superior.
Por ejemplo, el algoritmo de ordenación Quicksort.
O(nc)
con c>1
polinómico
Aquí están muchos de los algoritmos más comunes.
Cuando c es 2 se le llama cuadrático, cuando es 3 se le llama cúbico, y en
general, polinómico.
Este orden es el último de los aceptables (Solo si c sea relativamente bajo).
Los ordenes que le siguen a este describen algoritmos complicados de tratar
cuando n es muy grande.
O(cn)
con c>1
exponencial
Aunque pudiera no parecerlo, es mucho peor que el anterior. Crece
muchísimo más rápido.
O(n!) factorial
Es el típico de aquellos algoritmos que para un problema complejo prueban
todas las combinaciones posibles.
O(nn) combinatorio Tan intratable como el anterior
9. Peor caso, mejor caso
Conviene distinguir dos métricas: qué es lo peor que nos
puede pasar para un problema de tamaño n, y qué es lo
mejor que nos puede pasar para un problema de tamaño n
Observando el algoritmo anterior:
En el peor caso es O(6n+6) A esta notación se le
denomina "O Grande" (del inglés "Big-O"), o
simplemente "Complejidad en el peor caso". Aunque
es una "O", realmente viene de la letra griega O
micrón.
Para el mejor caso es Ω(6). A esta notación se le
denomina "Omega" (por la letra griega omega
mayúscula Ω) o simplemente, "complejidad en el
mejor caso".
Notas del editor
La recta es asíntota a la función grafica, ya que se aproxima continuamente de tal manera que
La distancia entre las 2 tiende a cero
Caso Peor:
2
3(n+1)
3n
1
======
6n+6
Caso Mejor:
2
3
1
==
6