Temas
Esta sección es tu mapa y tu brújula. El mapa te muestra el camino a seguir (qué temas aprender y en qué orden), mientras que la brújula son las herramientas de referencia rápida que te mantendrán orientado cuando estés resolviendo problemas.
Roadmap de temas
La programación competitiva es un campo muy amplio y abrumador si intentas abordarlo todo a la vez. Este roadmap te guiará desde los conceptos básicos hasta los más avanzados. En el Club de Algoritmia los estudiamos y practicamos durante todo el curso.
Nivel fundamental (El Kit de supervivencia)
Elije un lenguaje de programación y domina estos temas para resolver la mayoría de problemas de nivel introductorio:
Análisis de algoritmos: Aprende a analizar la complejidad temporal y espacial de tus algoritmos con notación “Big O”. En la mayoría de los casos esto te permitirá saber si el algoritmo que has pensado es suficientemente rápido antes de implementarlo.
Estructuras de datos básicas: arreglos (arrays), matrices, pilas (stacks), colas (queues) y listas enlazadas. Necesitarás saber ordenar una lista y buscar eficientemente entre sus elementos.
Estructuras de datos clave: mapas/diccionarios (maps/dicts), conjuntos (sets), colas de prioridad.
Nivel intermedio
Aquí agregas armas potentes para problemas más complejos:
Teoría de grafos:
- Implementación: matriz de adyacencias vs lista de adyacencias,
- Recorridos: BFS, DFS.
- Caminos mínimos: Dijkstra, Bellman-Ford, Floyd-Warshall.
- Recubrimientos mínimos: Prim, Kruskal.
Programación dinámica (DP): practica con problemas clásicos como Fibonacci, Knapsack, LCS.
Técnicas Voraces (Greedy)
Estructuras de Datos Avanzadas: Segment Tree, Fenwick Tree (BIT), Union-Find (DSU)…
Advertencia: Estas estructuras no suelen estar implementadas en las librerías estándar de los lenguajes! Debes saber implementarlas o incluirlas en tu dossier
Nivel avanzado
Temas para competir a nivel élite:
Algoritmos de Strings: KMP, Z-Algorithm, hashing de cadenas, tries, suffix arrays/trees…
Teoría de Números: primalidad (Criba de Eratóstenes), MCD (Euclides), aritmética modular…
Geometría Computacional: operaciones con puntos, líneas, polígonos, envolvente convexa (Convex Hull)…
Flujo Máximo y Redes: algoritmos como Edmonds-Karp, Dinic.
Dossieres
Muchas competiciones te permiten utilizar un documento que hayas preparado previamente. El dossier puede ser la clave para optimizar tu tiempo en competiciones y para escapar victorioso si no recuerdas como implementar algún algoritmo.
Guarda implementaciones probadas y optimizadas para no tener que escribir código complejo (en el que se puede escapar un bug fácilmente) desde cero. En muchos casos tendrás que adaptarlo al problema en cuestión, pero puede facilitar mucho tu tarea.
A continuación te dejamos una checklist con contenido que recomendamos incluir:
- Implementación de estructuras de datos (cola de prioridad, segment Tree, DSU…)
- Algoritmos de grafos (Dijkstra, Kruskal)
- Entrada y salida rápida
Visualizador de Algoritmos
Usa sitios como VisuAlgo para ver animaciones de algoritmos y estructuras de datos. Es especialmente útil para entender grafos, árboles y algoritmos de búsqueda.