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: