Estructuras de Datos y Algoritmos · Programación

Complejidad asintótica (Big-O)

Acota el costo temporal y espacial de un algoritmo con notación Big-O, compara órdenes de crecimiento y traduzca la complejidad a decisiones de ingeniería.

Complejidad asintótica (Big-O)

Diagrama de estructuras de datos: arbol binario, lista enlazada y tabla hash.
Estructuras de datos fundamentales y analisis de complejidad algoritmica.

Mapa conceptual

El costo está en la curva, no en el punto Un algoritmo O(n²) sobre 1 000 elementos hace un millón de operaciones: instantáneo. Sobre 10 millones hace 10¹⁴: años. Mismo código, mismo computador; la única variable es n. Por eso la complejidad importa más que el lenguaje.

Big-O describe el término que domina cuando n crece, ignorando constantes y términos menores. Dos bucles anidados sobre n dan O(n²); un bucle simple y uno anidado siguen siendo O(n²). Un bucle más un anidado independientes (n + n²) es O(n²), porque n se desprecia frente a n².

La jerarquía de crecimiento

Crecimiento relativo (n en potencias de 2)

n2n4n8n16n
log n01234
n124816
n log n0282464
n²141664256

La escala real importa: n = 10⁶ hace que O(n) sea factible (~un millón de pasos), O(n log n) cómodo, O(n²) inviable (10¹² pasos) y O(2ⁿ) inimaginable.

Nota el salto: pasar de O(n²) a O(n log n) sobre 1 000 elementos multiplica por 100 la velocidad; sobre un millón, por 10 000.
ComplejidadAlgoritmo típicon = 1 000
O(1)acceso a índice, hash1 operación
O(log n)búsqueda binaria≈ 10 operaciones
O(n)recorrido lineal1 000 operaciones
O(n log n)mergesort, quicksort medio≈ 10 000
O(n²)burbuja, dos bucles anidados1 000 000
O(2ⁿ)fuerza bruta de subconjuntosabsurdo

No es solo tiempo: espacio

La complejidad espacial mide memoria extra. Un algoritmo in-place (ordena sin copiar la lista) es O(1) de espacio; uno que construye una copia es O(n). A veces se cambia espacio por tiempo: una tabla hash usa memoria extra para comprar búsquedas constantes.

Promedio, peor caso y amortizado El análisis amortizado es la sutileza que distingue al profesional: una operación puede ser cara de vez en cuando (duplicar un arreglo dinámico) pero barata en promedio. Decir «añadir es O(1)» es cierto amortizado aunque un crecimiento aislado cueste O(n).

¿Cuál es la complejidad temporal del siguiente código? for i in range(n): for j in range(n): x += 1

Un algoritmo O(n) es siempre más rápido en la práctica que uno O(n log n).

Ordena las clases de complejidad de más rápida (menos trabajo) a más lenta.

Más rápida
Intermedia
Más lenta

Une cada situación con la decisión de ingeniería que la complejidad sugiere.

Errores al estimar

Ejemplo resuelto

  1. Analiza: for i in range(n): if i in lista_grande: ...
  2. El bucle exterior es O(n).
  3. Pero i in lista sobre una lista es O(m) con m el tamaño de la lista.
  4. Total: O(n·m), no O(n).
  5. Arreglo: convertir lista_grande a un conjunto (set) hace la pertenencia O(1) y el todo O(n).

En ciencia de datos, el 90 % de la lentitud de un pipeline no está en el modelo sino en estructuras mal elegidas: un in sobre una lista dentro de un bucle, un DataFrame filtrado fila a fila, o ordenar varias veces. Leer Big-O te dice dónde duele antes de escribir una línea.

Tabla de bolsillo

O(1)
constante
O(log n)
dobla o parte a la mitad
O(n)
lineal: recorre una vez
O(n log n)
ordenar eficiente
O(n²)
dos bucles anidados
O(2ⁿ)
subconjuntos, fuerza bruta
amortizado
promedio tras muchas operaciones
in-place
O(1) de espacio

Análisis de algoritmos (repaso formal)
Notación asintótica, mejores y peores casos con ejemplos.

Tienes que responder «¿esta transacción es fraudulenta?» para 10⁷ transacciones. Un enfoque compara cada transacción con las 10⁴ anteriores (O(n·m)) y otro mantiene un conjunto de patrones vistos (O(n)). Calcula órdenes de magnitud de ambos y argumenta cuál usarías.

VisuAlgo
Visualizaciones animadas de estructuras de datos y algoritmos.