Una vez diseñado un algoritmo, es necesario analizar los recursos que consume, refiriéndose al tiempo y espacio que requiere su ejecución.

Los recursos que utiliza pueden ser:

  • Memoria
  • Ancho de Banda
  • Hardware
  • Tiempo Computacional

Hay muchas propiedades, además de tiempo y espacio, que son de interés para ser estudiadas, por lo que es difícil en ocasiones analizar un algoritmo.

  • El primer enfoque para analizar algoritmos, se concentró en determinar el crecimiento del peor de los casos en lo que respecta a la eficiencia de un algoritmo.
  • El segundo enfoque se concentró en categorizar el mejor, el peor, y el promedio de la eficiencia de un algoritmo.

Complejidad de un Algoritmo

Vamos a definir algunas funciones que permiten analizar la complejidad de un algoritmo. Estas funciones tienen una base matemática y estudian el comportamiento de los algoritmos en los casos límites.

Big-O

Se dice que la tasa de crecimiento de un algoritmo es Big-O:

Esto quiere decir que la tasa de crecimiento no superara . Es la cota superior

Big-Omega

Se dice que la tasa de crecimiento de un algoritmo es Big-Omega:

Esto quiere decir que, para algún valor de , la tasa de crecimiento nunca será menor a . Es la cota inferior

Small-o

Se dice que la tasa de crecimiento de un algoritmo es Small-o:

Esto quiere decir que la tasa de crecimiento es estrictamente menor a la de .

Big-Theta

Se dice que la tasa de crecimiento de un algoritmo es Big-Theta:

Esto quiere decir que la tasa de crecimiento va a estar acotada por una tasa superior y una inferior. Es tanto Big-O, como Big-Omega.

Teorema Maestro

Es el “libro de cocina” para resolver recurrencias de la forma:

Donde el algoritmo es una función recursiva que divide el problema veces y resuelve .

  • Equivale al tamaño del problema
  • Equivale a la cantidad de llamadas recursivas que hago
  • Equivale a en cuanto divido el problema
  • Es el costo de dividir y combinar el problema

Entonces, el algoritmo posee las siguientes cotas asintóticas: