Big-O: cuánto tarda tu código cuando los datos crecen
O(1), O(n), O(log n), O(n²)... con un visualizador que compara la búsqueda lineal y la binaria contando pasos.
Big-O no mide segundos: mide cómo CRECE el trabajo cuando crecen los datos. Un algoritmo O(n) con el doble de datos tarda el doble; uno O(n²), cuatro veces más. Por eso importa antes de que tu programa vaya lento con datos reales.
Lineal vs binaria: míralo
Las dos buscan un número en una lista ordenada. La lineal mira uno a uno; la binaria descarta la mitad en cada paso. Sube el tamaño y compara las comparaciones:
Las complejidades que verás
| Notación | Nombre | Ejemplo típico | 1 000 datos ≈ |
|---|---|---|---|
O(1) | constante | acceder a lista[5], mapa.get(k) | 1 paso |
O(log n) | logarítmica | búsqueda binaria, árboles equilibrados | ~10 pasos |
O(n) | lineal | recorrer una lista, max(), búsqueda lineal | 1 000 pasos |
O(n log n) | casi lineal | ordenar bien (sort, merge sort) | ~10 000 pasos |
O(n²) | cuadrática | dos bucles anidados, comparar todos con todos | 1 000 000 pasos |
O(2ⁿ) | exponencial | fuerza bruta, Fibonacci recursivo ingenuo | inviable |
Reconocerlo en el código
// O(1): no depende del tamaño
function primero(lista) { return lista[0]; }
// O(n): un bucle sobre los datos
function suma(lista) {
let total = 0;
for (const x of lista) total += x; // n iteraciones
return total;
}
// O(n²): un bucle dentro de otro
function hayDuplicados(lista) {
for (let i = 0; i < lista.length; i++)
for (let j = i + 1; j < lista.length; j++) // n · n
if (lista[i] === lista[j]) return true;
return false;
}
// O(n): el mismo problema con un Set
function hayDuplicados2(lista) {
const vistos = new Set();
for (const x of lista) {
if (vistos.has(x)) return true; // has() es O(1)
vistos.add(x);
}
return false;
}
Set o un Map suele bajar un O(n²) a O(n).Comprueba lo aprendido
for anidados sobre una lista de n elementos?Siguiente paso
Estructuras de datos visualizadas · Algoritmos de ordenación y búsqueda