Boost Academy
FormaciónEvaluacionesPerfil
Volver
  • En directo

Algoritmos y estructuras de datos avanzado

8h de clase en directo·HACK A BOSS·Español

Skills que aprenderás

  • Algoritmos y estructuras de datos

Convocatorias

Necesitas un plan activo

Para acceder a los cursos en directo necesitas un plan activo. Estamos trabajando para que los planes estén disponibles pronto — ¡mantente atento!

No hay convocatorias abiertas ahora mismo, pero no te pierdas la oportunidad: guarda este curso y te avisamos en cuanto se abra una convocatoria.

Descripción

Objetivos

Temario

Requisitos técnicos

Conocimientos previos

Microcertificados relacionados

Detalles de la convocatoria

Recursos

No hay recursos disponibles todavía para esta convocatoria

Este curso capacita a desarrolladores que ya dominan estructuras lineales, mapas, árboles y recursión para resolver problemas algorítmicos de mayor complejidad aplicando los cuatro paradigmas fundamentales: programación dinámica, grafos, divide-y-vencerás y greedy. Dirigido a quienes necesitan prepararse para entrevistas técnicas de nivel avanzado, optimizar código en producción o abordar problemas de diseño algorítmico con criterio cuantitativo. Al finalizar, el participante será capaz de identificar el paradigma adecuado para un problema nuevo, diseñar la solución correspondiente, derivar su complejidad y validarla empíricamente comparando el comportamiento teórico con mediciones reales sobre entradas de tamaño creciente.

Al finalizar el curso, el participante será capaz de:

  • Diseñar una solución con programación dinámica aplicando memoización o tabulación a un problema con subproblemas solapados, comparando el coste con la versión recursiva naive
  • Modelar un problema como grafo eligiendo representación por lista o matriz de adyacencia, y aplicar BFS o DFS para resolverlo justificando la elección del recorrido
  • Implementar un heap o cola de prioridad y justificar su elección frente a una lista ordenada para el caso de uso dado, comparando la complejidad de inserción y extracción
  • Aplicar la técnica de dos punteros o ventana deslizante para reducir la complejidad de un problema sobre una secuencia de O(n²) a O(n), verificando la corrección en casos límite
  • Diseñar un algoritmo divide-y-vencerás para un problema dado, identificar su recurrencia y derivar su complejidad aplicando el Teorema Maestro o sustitución
  • Diseñar una solución greedy para un problema de optimización, verificar que la propiedad de elección local óptima se sostiene en el caso general y contraejemplificar un greedy incorrecto
  • Evaluar empíricamente el rendimiento de dos algoritmos alternativos sobre entradas de tamaño creciente, relacionar los resultados con el análisis teórico y recomendar uno según el perfil de uso
  1. Programación dinámica Subproblemas solapados y subestructura óptima como condiciones necesarias; memoización top-down con diccionario: almacenamiento en la primera llamada y reutilización en las siguientes; tabulación bottom-up: orden de relleno de la tabla desde los casos base; reducción de espacio cuando solo se necesitan los últimos k estados; problemas representativos: Fibonacci, escalera de peldaños, cambio de monedas, caminos en cuadrícula; comparativa de llamadas y tiempo entre versión naive y DP
  2. Grafos: modelado y recorridos Grafo como abstracción de relaciones entre entidades: nodos, aristas y dirección; representación por lista de adyacencia frente a matriz de adyacencia: memoria O(V+E) vs. O(V²) y coste de consultar arista; BFS con cola: recorrido por niveles y garantía de camino mínimo en grafos no ponderados; DFS con pila o recursión: detección de ciclos y exploración en profundidad; criterios de selección entre BFS y DFS según la pregunta que responde el recorrido; aplicaciones: conectividad, camino mínimo en número de saltos, componentes conexas
  3. Heaps, colas de prioridad y técnicas de optimización en secuencias Max-heap y min-heap: propiedad de heap, operaciones push y pop en O(log n), construcción en O(n) con heapify; cola de prioridad como abstracción sobre heap: uso en planificación y algoritmos de camino mínimo; módulo heapq de Python; técnica de dos punteros sobre arrays ordenados: invariante de extremos y corrección de la terminación; ventana deslizante para subsecuencias contiguas: invariante de la ventana, expansión y contracción, aplicaciones a suma mínima, longitud máxima y restricciones sobre caracteres
  4. Divide-y-vencerás y algoritmos greedy Estructura de divide-y-vencerás: caso base, división en subproblemas independientes y combinación; recurrencias y Teorema Maestro: identificación de a, b y f(n), aplicación de los tres casos; mergesort y quicksort como casos prototípicos; cuándo divide-y-vencerás no mejora sobre la solución iterativa; paradigma greedy: elección local óptima en cada paso y propiedad de subestructura óptima; verificación de la propiedad voraz por intercambio; construcción de contraejemplos para greedy incorrectos; problemas representativos: selección de actividades, cambio de monedas, árbol recubridor mínimo con Kruskal
  5. Evaluación empírica del rendimiento Discrepancia entre complejidad teórica y tiempo medido para entradas pequeñas: papel de las constantes ocultas; benchmarking con timeit: múltiples repeticiones, cálculo de media y desviación, efecto del garbage collector y la caché; diseño del experimento: tamaños de entrada representativos, entradas adversariales vs. promedio; relación entre curva empírica y función teórica; recomendación algorítmica basada en perfil de uso: listas pequeñas vs. grandes, operaciones dominantes, restricciones de memoria
  • Python 3.11 o superior para implementar soluciones, estructuras y benchmarks
  • pytest 8.x o superior para validar funciones con casos de prueba automatizados
  • timeit (módulo estándar de Python) para medición de rendimiento
  • heapq (módulo estándar de Python) para ejercicios de heap y cola de prioridad
  • collections.deque (módulo estándar de Python) para BFS y ventana deslizante
  • Entorno de desarrollo con soporte para ejecución y depuración paso a paso (VS Code o PyCharm)
  • Git para versionar las soluciones y comparar iteraciones de código

→ AED02 — Algoritmos y estructuras de datos intermedio (Intermedio, 8h)

  • Comparar soluciones algorítmicas alternativas justificando la elección según complejidad temporal, complejidad espacial y legibilidad
  • Diseñar soluciones que usen mapas o conjuntos para reducir búsquedas repetidas
  • Integrar árboles binarios básicos y aplicar recorridos preorden, inorden y postorden
  • Diseñar soluciones recursivas para problemas descomponibles y compararlas con alternativas iterativas
  • Depurar errores lógicos en algoritmos iterativos o recursivos identificando casos límite
  • Integrar análisis de complejidad en la validación de una solución y detectar cuellos de botella

Algoritmos y Estructuras de Datos

Seleccionar e implementar estructuras y algoritmos eficientes

22h de clase en directo3 Cursos
    Algoritmos y estructuras de datos