CURSO DE PROGRAMACIÓN COMPETITIVA 2021

Este sitio servirá para apoyo al curso de programación competitiva de la URJC 2021 que se llevará a cabo desde el 26 de febrero de 2021 hasta el 14 de mayo de 2021

Índice de contenidos

Bloque 1 - Teoría (26-02)

Bloque 2 - Teoría (05-03)

Bloque 1 y 2 - Práctica (12-03)

Bloque 3 - Teoría (26-03)

  • Diapositivas
  • Grabación de la sesión
  • Algoritmos de Ordenamiento
    • Bubble Sort / Selection Sort
    • Quicksort
    • Mergesort
    • Otro tipo de algoritmos de ordenamiento y búsquedas
  • Algoritmos Voraces
  • Búsqueda Binaria
  • Búsqueda Ternaria

Seminario 1 - Estructuras de Datos Avanzadas (26-03)

Leonardo Santella, finalista mundial ICPC realizó el seminario con el siguiente índice.

Fenwick Tree/Binary Indexed Tree (BIT)

  • Range Sum* query/update
  • O(NlogN)
  • LSB(X)/LogN iterations max. Las operaciones bitwise son más rápidas. Usar un array para representar el árbol. ¿Por qué se llama árbol?
  • Aplicaciones en el mundo real
  • Inversión counting
  • ¿Este algoritmo no resuelve el problema de RMQ? ¿Se puede usar lazy propagation?
  • Ejercicios recomendados

Segment Tree

  • RMax/MinQ, RSQ
  • O(NlogN) update/query
  • Patrón de recursión similar al mergesort. Lazy propagation. Persistentency
  • Aplicaciones en el mundo real
  • Variantes como Lazy Propagation Segment Tree, Persistent Segment Tree
  • Ejercicios recomendados

Bloque 3 - Práctica (09-04)

Bloque 4 - Teoría (16-04)

Bloque 4 - Práctica (23-04 y 24-04)

Bloque 5 - Teoría (30-04)

Bloque 5 - Práctica (07-05)

Seminario 2 - Estructuras de Datos Avanzadas - Trie y Suffix Array (12-05)

Leonardo Santella, finalista mundial ICPC realizó el seminario con el siguiente índice.

Trie

  • Idea general del algoritmo
  • ¿Qué problema resuelve?
  • Análisis de Complejidad en tiempo
  • Observaciones
  • Pseudocódigo del algoritmo
  • Ejemplo
  • Notas adicionales
  • Ejercicios recomendados
  • Preguntas/Dudas

Suffix Array

  • Idea general del algoritmo
  • Suffix Trie / Suffix Tree
  • Que problema resuelve?
  • Análisis de Complejidad en tiempo
  • Observaciones
  • Pseudocódigo del algoritmo
  • Ejemplo
  • Notas adicionales
  • Ejercicios recomendados
  • Preguntas/Dudas

Bloque 6 - Teoría (14-05)

Bloque 6 - Práctica (21-05)

  • Problemas
  • Soluciones
  • Clasificación
  • Explicación de Problemas
  • Programación Dinámica I
    • Introducción
    • Estructura
    • Memoización
    • Tipos de Programación Dinámica
    • Ejemplos
      • Fibonacci
      • Contar caminos
      • Knapsack