Skip to content
Clases

Introducción a la Complejidad

En programación competitiva, no medimos el tiempo en “segundos”, sino en operaciones fundamentales.

  • Las computadoras varían en velocidad.
  • Los compiladores optimizan diferente.
  • Lo constante es: Cómo crece el número de operaciones conforme crece la entrada (NN).

Para describir el crecimiento, usamos tres letras griegas:

Describe el límite superior. Nos asegura que el algoritmo nunca será más lento que esto.

  • Uso: Es la más importante en CP. Si tu peor caso pasa en tiempo, tu solución sirve.
  • Ejemplo: O(N2)O(N^2) significa que el tiempo crece cuadráticamente en el peor escenario.

2. Big-Omega (Ω\Omega) - El Piso (Mejor Caso)

Section titled “2. Big-Omega (Ω\OmegaΩ) - El Piso (Mejor Caso)”

Describe el límite inferior.

  • Uso: Rara vez útil en CP. Saber que un algoritmo es “al menos” rápido no nos dice si fallará con datos difíciles.
  • Ejemplo: Linear Search tiene Ω(1)\Omega(1) (si el dato está al inicio), pero eso no nos salva de recorrer todo el arreglo.

3. Big-Theta (Θ\Theta) - El Ajuste Exacto

Section titled “3. Big-Theta (Θ\ThetaΘ) - El Ajuste Exacto”

Describe el comportamiento cuando el límite superior e inferior son iguales (el algoritmo siempre tarda lo mismo, sin importar la suerte).

  • Ejemplo: Merge Sort siempre hace NlogN\approx N \log N comparaciones, por lo que es Θ(NlogN)\Theta(N \log N).

Al calcular la complejidad, seguimos dos reglas simples:

  1. Ignorar Constantes:

    • O(2N)O(2N) \to O(N)O(N)
    • O(500)O(500) \to O(1)O(1)
    • Razón: Para NN muy grande, multiplicar por 2 no cambia la curva de crecimiento.
  2. Dominancia de Términos:

    • O(N2+N+100)O(N^2 + N + 100) \to O(N2)O(N^2)
    • Razón: El término cuadrático crece mucho más rápido que el lineal. El resto se vuelve irrelevante.