Big O notation o notación Big O: Todo lo que necesitas saber 2025

Big O notation o notación Big O: Todo lo que necesitas saber 2025

juan correa

Juan Correa

Desarrollador de Software Senior

¿Crees que aprender Big O notation o notación Big O es sólo para pasar entrevistas técnicas?

Pues...¡No! Big O notation es una herramienta elemental como programador, ya que te ayuda a entender la eficiencia de tus algoritmos y a mejorar el rendimiento de tu código.

En este artículo, aprenderás qué es Big O notation, por qué es importante, cómo calcularla y ejemplos de algoritmos con Big O notation.

Si lo prefieres, también puedes ver el curso de Big O notation en video:

Table of Contents

Qué es Big O notation o notación Big O

Big O notation o notación Big O es una forma de medir la eficiencia de un algoritmo en términos de cuánto tiempo o espacio necesita para ejecutarse en función del tamaño de la entrada.

La clave aquí es la relación entre el tiempo o espacio y el tamaño de la entrada.

Por qué Big O notation es importante

En la vida real, cuando desarrollas una aplicación, es probable que tengas que trabajar con grandes cantidades de datos. Por ejemplo, una base de datos con millones de registros o un archivo de texto con miles de líneas.

En estos casos, la eficiencia de tus algoritmos es crucial para que tu aplicación funcione correctamente y no se quede colgada.

Ya sea que estés desarrollando un endpoint de una API, un componente de UI o un script de automatización, Big O notation te ayudará a:

  • Evaluar la eficiencia de tus algoritmos: ¿Cuánto tiempo o espacio necesita tu algoritmo para ejecutarse en función del tamaño de la entrada?
  • Comparar algoritmos: ¿Cuál es el algoritmo más eficiente para resolver un problema?
  • Optimizar tu código: ¿Cómo puedes mejorar la eficiencia de tu algoritmo?

Cualquier milisegundo o incluso micro segundo que puedas ahorrar en la ejecución de tu algoritmo, puede hacer una gran diferencia en la experiencia del usuario.

Y es parte de lo que separa a un buen programador de un excelente programador.

Notaciones de Big O comunes

Las notaciones de Big O más comunes son:

  • O(1) - Constant time o notación constante
  • O(log n) - Logarithmic time o notación logarítmica
  • O(n) - Linear time o notación lineal
  • O(n log n) - Linearithmic time o notación lineal-logarítmica
  • O(n^2) - Quadratic time o notación cuadrática
  • O(2^n) - Exponential time o notación exponencial
  • O(n!) - Factorial time o notación factorial
Big O notation o Big O
Big O notation o Big O

Si quieres ver ejemplos de algoritmos con estas notaciones, da click en el siguiente enlace:

Cómo calcular el Big O de un algoritmo

Para calcular el Big O de un algoritmo, sigue estos pasos:

  1. Identifica el tamaño de la entrada: ¿Cuál es el tamaño de la entrada de tu algoritmo? Por ejemplo, el número de elementos en un array o el número de nodos en un árbol.
  2. Identifica las operaciones fundamentales: Puedes ver esto como cuántos pasos va a ejecutar tu algoritmo según el input que reciba. Por ejemplo, si tienes un bucle for que recorre un array de n elementos, el bucle se ejecutará n veces.
  3. Encuentra la relación entre el tiempo o espacio y el tamaño de la entrada: ¿Cuántas operaciones fundamentales realiza tu algoritmo en función del tamaño de la entrada?
  4. Elimina las constantes y los términos de menor importancia: ¿Cuál es el término dominante en la relación? Por ejemplo, si tienes O(2n + 1), elimina la constante 2 y el término 1 para obtener O(n).
  5. Identifica la notación de Big O: ¿Cuál es la notación de Big O de tu algoritmo? Por ejemplo, O(1), O(log n), O(n), O(n log n), O(n^2), O(2^n) o O(n!).

Para ver un ejemplo de análisis, sigue leyendo.

Ejemplo 1: O(1) - Tiempo constante

function sum(a, b) {
  return a + b
}

En este caso, la función sum realiza una sola operación fundamental, que es la suma de dos números. No importa cuánto sean a y b, la función siempre realizará una sola operación.

Por lo tanto, la notación de Big O de esta función es O(1).

Ejemplo 2: O(n) - Tiempo lineal

function sumArray(arr) {
  let sum = 0
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i]
  }
  return sum
}

En este caso, la función sumArray recorre un array de n elementos y realiza una operación fundamental en cada iteración del bucle for.

Por ejemplo: Si el array tiene 5 elementos, el bucle se ejecutará 5 veces. Si el array tiene 10 elementos, el bucle se ejecutará 10 veces.

Representamos el número de operaciones fundamentales como n, donde n es el número de elementos en el array.

Por lo tanto, la notación de Big O de esta función es O(n).

Ejemplo 3: O(n^2) - Tiempo cuadrático

function sumMatrix(matrix) {
  let sum = 0
  for (let i = 0; i < matrix.length; i++) {
    for (let j = 0; j < matrix[i].length; j++) {
      sum += matrix[i][j]
    }
  }
  return sum
}

En este caso, la función sumMatrix recorre una matriz de n filas y m columnas y realiza una operación fundamental en cada celda de la matriz.

Por ejemplo: Si la matriz es de 2x2, el bucle anidado se ejecutará 4 veces. Si la matriz es de 3x3, el bucle anidado se ejecutará 9 veces.

Representamos el número de operaciones fundamentales como n^2, donde n es el número de filas y m es el número de columnas en la matriz.

Por lo tanto, la notación de Big O de esta función es O(n^2).

Ejemplos matemáticos de análisis de Big O

A continuación te muestro una tabla donde se compara un valor n con diferentes notaciones de Big O en términos matemáticos:

nO(1)O(log n)O(n)O(n log n)O(n^2)O(2^n)O(n!)
1013.321033.210010243628800
10016.64100664100001.27e+309.33e+157
100019.971000996710000001.07e+3014.02e+2567

Explicación:

  • Para O(1), el valor es constante sin importar el tamaño de n.
  • Para O(log n), el valor crece de forma logarítmica. Es decir, crece lentamente a medida que n aumenta.
  • Para O(n), el valor crece de forma lineal. Es decir, crece en la misma proporción que n.
  • Para O(n log n), el valor crece de forma lineal-logarítmica. Es decir, crece más rápido que O(n) pero más lento que O(n^2).
  • Para O(n^2), el valor crece de forma cuadrática. Es decir, crece más rápido que O(n) y O(n log n).
  • Para O(2^n), el valor crece de forma exponencial. Es decir, crece muy rápido a medida que n aumenta.
  • Para O(n!), el valor crece de forma factorial. Es decir, crece extremadamente rápido a medida que n aumenta.

Ejemplos de algoritmos con Big O notation

Ahora te comparto una tabla comparativa con el tipo de notación, la notación y ejemplos de diferentes algoritmos:

Tipo de notaciónNotaciónEjemplos de algoritmos
O(1)Constant timeAcceder a un elemento de un array por índice
O(log n)Logarithmic timeBúsqueda binaria
O(n)Linear timeRecorrer un array
O(n log n)Linearithmic timeAlgoritmo de ordenación QuickSort
O(n^2)Quadratic timeAlgoritmo de ordenación BubbleSort
O(2^n)Exponential timeAlgoritmo de Fibonacci recursivo
O(n!)Factorial timeAlgoritmo de permutaciones

Comparación de Big O notation, Big Omega y Big Theta

Además de Big O notation, existen otras notaciones como Big Omega y Big Theta que también se utilizan para analizar la eficiencia de los algoritmos.

Aquí te dejo una tabla comparativa de Big O notation, Big Omega y Big Theta como notación, la definición y la explicación:

NotaciónDefiniciónExplicación
Big Of(n) = O(g(n)) si f(n) <= c * g(n) para todo n >= n0Big O notation se utiliza para analizar el peor caso de un algoritmo.
Big Omegaf(n) = Ω(g(n)) si f(n) >= c * g(n) para todo n >= n0Big Omega se utiliza para analizar el mejor caso de un algoritmo.
Big Thetaf(n) = Θ(g(n)) si c1 * g(n) <= f(n) <= c2 * g(n) para todo n >= n0Big Theta se utiliza para analizar el caso promedio de un algoritmo.

En cada ejemplo:

  • f(n) es la función que representa el tiempo o espacio de un algoritmo.
  • g(n) es la función que representa el tiempo o espacio de un algoritmo ideal.
  • c es una constante positiva.
  • n0 es un número entero positivo.

Éstas notaciones son útiles para analizar diferentes escenarios de un algoritmo y tener una visión más completa de su eficiencia.

En mi experiencia, va a ser más común ver Big O notation en entrevistas técnicas y en la vida real, pero es bueno tener en cuenta las otras notaciones.

Preguntas frecuentes de Big O notation

¿Cómo se calcula Big O notation?

Para calcular Big O notation, identifica el tamaño de la entrada, las operaciones fundamentales, la relación entre el tiempo o espacio y el tamaño de la entrada, elimina las constantes y los términos de menor importancia, e identifica la notación de Big O.

¿Cuál es la diferencia entre calcular el espacio y el tiempo en Big O?

El tiempo se refiere a cuánto tiempo necesita el algoritmo para ejecutarse en función del tamaño de la entrada, mientras que el espacio se refiere a cuánta memoria necesita el algoritmo para ejecutarse en función del tamaño de la entrada.

Cuando digo tiempo, me refiero a la cantidad de operaciones fundamentales que realiza el algoritmo y NO a segundos, milisegundos o microsegundos.

Y cuando digo espacio, me refiero a la cantidad de memoria que necesita el algoritmo y NO a bytes, kilobytes o megabytes.

¿Qué significa O(1) en Big O notation?

O(1) significa que el algoritmo tiene una complejidad constante. Es decir, el tiempo o espacio que necesita el algoritmo para ejecutarse no depende del tamaño de la entrada.

¿Qué significa O(n) en Big O notation?

O(n) significa que el algoritmo tiene una complejidad lineal. Es decir, el tiempo o espacio que necesita el algoritmo para ejecutarse crece en la misma proporción que el tamaño de la entrada.

¿Qué significa O(n^2) en Big O notation?

O(n^2) significa que el algoritmo tiene una complejidad cuadrática. Es decir, el tiempo o espacio que necesita el algoritmo para ejecutarse crece en función del cuadrado del tamaño de la entrada.

¿Qué significa O(log n) en Big O notation?

O(log n) significa que el algoritmo tiene una complejidad logarítmica. Es decir, el tiempo o espacio que necesita el algoritmo para ejecutarse crece de forma logarítmica en función del tamaño de la entrada.

¿Qué significa O(n log n) en Big O notation?

O(n log n) significa que el algoritmo tiene una complejidad lineal-logarítmica. Es decir, el tiempo o espacio que necesita el algoritmo para ejecutarse crece de forma lineal-logarítmica en función del tamaño de la entrada.

Siguientes pasos

¡Felicidades! Ahora sabes qué es Big O notation, por qué es importante, cómo calcularla y ejemplos de algoritmos con Big O notation.