Complejidad Temporal y Espacial
Operaciones elementales, modelo RAM, conteo línea por línea, función de eficiencia T(n), ciclos simples, ciclos anidados, ciclos mixtos for + while y complejidad espacial.
Operaciones elementales, modelo RAM, conteo línea por línea, función de eficiencia T(n), ciclos simples, ciclos anidados, ciclos mixtos for + while y complejidad espacial.
Principio de correctitud, formulación de un invariante de ciclo y demostración en los tres momentos obligatorios: inicialización, mantenimiento y finalización. Se aplica a Insertion Sort y Bubble Sort.
Patrones típicos de ciclos, análisis de búsqueda secuencial por mejor caso, peor caso y caso promedio, tabla de crecimiento de funciones comunes y comparación formal mediante límites.
Las seis notaciones asintóticas del curso: O, Omega, Theta, o, omega y tilde. Incluye interpretación intuitiva, definición formal, criterio con límites en las dos convenciones y ejemplos resueltos.
Tabla unificada que resume las seis notaciones asintóticas, su tipo de cota, sus criterios con las dos convenciones de límites y si incluyen igualdad con la función de referencia.
Relaciones de implicación, inclusión y exclusión entre O, Ω, Θ, o, ω y ~. Incluye lectura pedagógica de cada relación y una tabla de cuándo usar cada notación.
Teorema general de los límites para notaciones asintóticas y demostraciones completas paso a paso usando cálculo del límite, aplicación del teorema y verificación formal.
Tabla de referencia que compara pares de funciones comunes usando los límites en ambas convenciones y marca qué notaciones asintóticas aplican: O, Ω, Θ, o, ω y ~.
Sumatorias simples, dobles y patrones frecuentes usados en análisis de algoritmos. Incluye fórmulas cerradas, orden asintótico, contexto de aparición en código y propiedades útiles para transformar sumatorias.
Consolidación rápida de los módulos 1 al 9: receta para analizar algoritmos iterativos, receta para demostrar pertenencia asintótica, técnicas de límites, operaciones elementales, advertencias típicas, notación del curso y sumatorias más usadas.
Estructura de un algoritmo recursivo, ambientes de ejecución, pila, casos base, caso general, árboles de llamadas, ecuaciones de recurrencia, Fibonacci, Torres de Hanói, clasificación de recurrencias y recursión de cola.
Método directo para resolver recurrencias divide y vencerás de la forma T(n)=aT(n/b)+f(n). Incluye condiciones de aplicabilidad, extracción de parámetros, cálculo del exponente crítico, casos 1, 2 y 3, condición de regularidad, ejemplos resueltos y casos donde el teorema no aplica.
Método visual y algebraico para resolver ecuaciones de recurrencia representando llamadas recursivas como niveles de un árbol. Incluye aplicabilidad, construcción de niveles, altura, hojas, suma total, patrones de dominancia y ejemplos resueltos.
Método algebraico para resolver ecuaciones de recurrencia lineales con coeficientes constantes mediante el polinomio característico. Incluye aplicabilidad, ERLH, raíces distintas, raíces repetidas, casos no homogéneos, Fibonacci, Torres de Hanói y errores frecuentes.
Método de sustitución para verificar cotas asintóticas mediante una suposición razonable y una prueba inductiva. Incluye cuándo usarlo, cómo elegir la suposición, cómo cerrar desigualdades, cómo ajustar casos base y ejemplos donde otros métodos no aplican directamente.
Módulo integral de Programación Dinámica que cubre desde los fundamentos teóricos (requisitos, estructuras y modelado recursivo) hasta la implementación avanzada de problemas clásicos como Fibonacci y LCS. Incluye comparación detallada de enfoques Top-Down vs Bottom-Up, reconstrucción de soluciones mediante tablas de caminos y patrones comunes de modelado 1D/2D.
Técnica de diseño algorítmico que construye una solución por etapas tomando en cada paso la mejor decisión local disponible, sin reconsiderar decisiones pasadas. Incluye componentes formales, modelo voraz, prueba de correctitud, cambio de monedas, contraejemplo, heurística de Warnsdorff, selección de actividades y comparación con Programación Dinámica.
Técnica de búsqueda sistemática que construye soluciones paso a paso, explora en profundidad y retrocede cuando una solución parcial no puede extenderse hacia una solución válida. Incluye modelado como n-tupla, árbol de decisiones, poda por factibilidad, esquema general, N-Reinas 4×4, análisis de complejidad y comparación con fuerza bruta y algoritmos voraces.
Técnica de optimización que extiende backtracking usando cotas para decidir qué ramas del árbol de búsqueda no pueden mejorar la mejor solución conocida. Incluye conceptos clave, estrategias de recorrido, poda por suboptimalidad, mochila entera 0/1, cotas fraccionarias y comparación con backtracking y fuerza bruta.
Módulo de síntesis para decidir qué técnica algorítmica usar según la estructura del problema: iteración, recursión, divide y vencerás, resta y vencerás, programación dinámica, voraces, backtracking, Branch and Bound y fuerza bruta. Compara requisitos, garantías, costos, memoria, tipo de problema, señales de uso y errores frecuentes.