Introducción a la Complejidad
¿Por qué importa?
Section titled “¿Por qué importa?”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 ().
Las Tres Notaciones
Section titled “Las Tres Notaciones”Para describir el crecimiento, usamos tres letras griegas:
1. Big-O () - El Techo (Peor Caso)
Section titled “1. Big-O (OOO) - El Techo (Peor Caso)”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: significa que el tiempo crece cuadráticamente en el peor escenario.
2. Big-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 (si el dato está al inicio), pero eso no nos salva de recorrer todo el arreglo.
3. Big-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 comparaciones, por lo que es .
Reglas de Cálculo
Section titled “Reglas de Cálculo”Al calcular la complejidad, seguimos dos reglas simples:
-
Ignorar Constantes:
- Razón: Para muy grande, multiplicar por 2 no cambia la curva de crecimiento.
-
Dominancia de Términos:
- Razón: El término cuadrático crece mucho más rápido que el lineal. El resto se vuelve irrelevante.