Este es el último de los Post sobre la notación Big-O, vamos a revisar los distintos tipos de rendimientos de cada uno de los tipos de expresión y vamos a ver como combinar las diferentes complejidades.

Los posts anteriores fueron

Grafico de complejidad de Big-O

Chartset

Referencia:Bigocheatsheet

Como se muestra en el Análisis y lo fuimos revisando en los posts anteriores, las expresiones constantes y algorítmica son las de mejor rendimiento y las exponenciales y factoriales las de peor rendimiento

Veamos la complejidad de estos algoritmos con números

Notación Big O 10 elementos 100 elementos 1000 elementos
O(1) 1 1 1
O(n) 10 100 1000
O (log n) 1 2 3
0 (n^2) 100 10000 1000000
0 (2^n) 1024 12676506e+30 10715086071862673e +301
O (n!) 3628800 933 e+167 Infitito

Como se puede ver y se revisó en los posts anteriores, a mayor cantidad de elementos, el algoritmo demora mucho más tiempo, cabe destacar que estos no son números expresados en segundos, de hecho, en la actualidad, los procesadores son capaces de procesar algoritmos mal diseñados en cuestión de milisegundos, pero siempre hay que tener en cuenta el número de elementos y el impacto que puede tener en nuestros algoritmos.

Operaciones según el tipo de estructura de datos

La siguiente tabla muestra el tipo de Notación Big0 aplicada a cada una de las estructuras de datos y cuando se utilizan

Chartset

Referencia:Bigocheatsheet

Si comparamos un Arreglo con una Pila (stack) y con una cola (queue) podemos ver (según la table) que, tanto en el peor de los casos como en el mejor de los casos, el acceso en un arreglo es más optimo que en una cola y una pila, pero insertar y eliminar elementos es más optimo en una pila y una cola, la búsqueda tiene la misma complejidad para los tres 0(n) - Lineal.

Es importante entender este tipo de aspectos al trabajar con las diferentes estructuras de datos.

¿Qué pasa cuando en un código se aplican varias complejidades?

Supongamos que en nuestro algoritmo tenemos

O(1) 
O(n)
O(n^2)

O= O(1)+O(n)+O(n2) ==> O(n2)

Siempre se considera la mayor complejidad cuando evaluamos un código, de hecho, si convertimos esta notación en una función matemática

f(x)=1+x+x^2

La grafica nos quedará de la siguiente manera

Chartset