Notación asintótica (O, o, Ω, Θ)

Nivel UniversitarioDificultad ★★★★★Concepto⌖ Ver en el mapa

¿Qué es?

Los símbolos de Landau comparan funciones salvo factores constantes: f=O(g)f = O(g) (no crece más deprisa), f=Ω(g)f = \Omega(g) (no más despacio), f=Θ(g)f = \Theta(g) (al mismo ritmo), f=o(g)f = o(g) (estrictamente más despacio). Nacieron en teoría de números, la informática los adoptó para clasificar algoritmos y el análisis numérico para medir errores.

¿Por qué existe?

Los tiempos exactos dependen de la máquina, el compilador y la entrada. Lo que sobrevive a cualquier cambio de hardware es la forma del crecimiento: duplicar la entrada cuadruplica el tiempo de un algoritmo O(n2)O(n^2) en cualquier ordenador. La notación asintótica captura justo eso y tira el resto.

Intuición

f=O(g)f = O(g): a partir de cierto punto, la gráfica de ff se queda por debajo de una copia estirada C gC\,g. O es una cota superior, Ω una cota inferior y Θ un sándwich. La o pequeña dice que el cociente f/gf/g tiende a cero: en análisis numérico, e(h)=o(h)e(h) = o(h) significa «el error se anula más deprisa que el paso».

Definición formal

Cuando n→∞n \to \infty (o x→ax \to a):

  • f=O(g)  ⟺  ∃C,n0: ∣f(n)∣≤C ∣g(n)∣f = O(g) \iff \exists C, n_0:\ |f(n)| \le C\,|g(n)| para n≥n0n \ge n_0
  • f=Ω(g)  ⟺  g=O(f)f = \Omega(g) \iff g = O(f)
  • f=Θ(g)  ⟺  f=O(g)f = \Theta(g) \iff f = O(g) y f=Ω(g)f = \Omega(g)
  • f=o(g)  ⟺  lim⁡f(n)/g(n)=0f = o(g) \iff \lim f(n)/g(n) = 0

Fórmulas

3n2+10nlog⁡n+7=Θ(n2)3n^2 + 10 n \log n + 7 = \Theta(n^2)
T(n)=2T(n/2)+Θ(n)  ⟹  T(n)=Θ(nlog⁡n)T(n) = 2T(n/2) + \Theta(n) \implies T(n) = \Theta(n \log n)
merge sort, por el teorema maestro
sin⁡x=x+O(x3)(x→0)\sin x = x + O(x^3) \quad (x \to 0)
el mismo símbolo para magnitudes pequeñas

Ejemplo

¿Es nlog⁡n=O(n1,1)n \log n = O(n^{1{,}1})? Sí: nlog⁡nn1,1=log⁡nn0,1→0\frac{n\log n}{n^{1{,}1}} = \frac{\log n}{n^{0{,}1}} \to 0, así que incluso es o(n1,1)o(n^{1{,}1}). Pero el punto de cruce es enorme: log⁡n=n0,1\log n = n^{0{,}1} hacia n≈1015n \approx 10^{15}. La asintótica dice quién gana al final, no cuándo.

¿Por qué importa?

Es el vocabulario del diseño de algoritmos («esto es O(nlog⁡n)O(n \log n)»), de los métodos numéricos («Runge–Kutta 4 tiene error O(h4)O(h^4)»), de Monte Carlo («error O(N−1/2)O(N^{-1/2})») y de la teoría del aprendizaje (cotas de generalización). Una notación, tres comunidades.

Aplicaciones en informática

  • Análisis de algoritmos y complejidad★★★★★fundamentalComputación científica y algoritmos

    El lenguaje estándar de tiempo y memoria: O(n)O(n), Θ(nlog⁡n)\Theta(n\log n), cotas inferiores Ω(n)\Omega(n).

  • Cálculo científico★★★★★frecuenteComputación científica y algoritmos

    Los errores de discretización se expresan como O(hp)O(h^p): dividir el paso por dos divide el error por 2p2^p.

  • Métodos de Monte Carlo★★★★★frecuenteComputación científica y algoritmos

    El error de Monte Carlo es O(N−1/2)O(N^{-1/2}) en cualquier dimensión: 100 veces más muestras por cada cifra más.

¿Dónde se utiliza?

Temas de informática a los que se llega desde aquí, con la cadena de ideas que lleva a ellos:

Qué depende de él

Ejercicios

1Cálculo directo

Ordena por crecimiento: n3/2n^{3/2}, 2n2^{\sqrt n}, nlog⁡2nn \log^2 n, (log⁡n)10(\log n)^{10}, nlog⁡nn^{\log n}.

Solución

(log⁡n)10≪nlog⁡2n≪n3/2≪nlog⁡n≪2n(\log n)^{10} \ll n\log^2 n \ll n^{3/2} \ll n^{\log n} \ll 2^{\sqrt n} (compara logaritmos: 10log⁡log⁡n10\log\log n, log⁡n\log n, 1,5log⁡n1{,}5\log n, log⁡2n\log^2 n, n\sqrt n).

2Informática

Un algoritmo tarda 1 s con n=1000n = 1000. Estima el tiempo para n=106n = 10^6 si es Θ(n2)\Theta(n^2) y si es Θ(nlog⁡n)\Theta(n\log n).

Solución

Θ(n2)\Theta(n^2): factor 10610^6 → unos 11,6 días. Θ(nlog⁡n)\Theta(n\log n): factor 1000⋅log⁡106log⁡103=20001000 \cdot \frac{\log 10^6}{\log 10^3} = 2000 → unos 33 minutos.

↑ ↓ para navegar · ↵ · Esc