En esta página están todos los manuales de algoritmia agrupados por temas. Para ver un orden recomendado para seguir los manuales, ver aquí.

Manuales Fundamentales

Aquí están los manuales que explican los conceptos algorítmicos básicos:

  1. Introducción a la Algoritmia (I): Eficiencia
  2. Introducción a la Algoritmia (II): Costes
  3. Introducción a la Algoritmia (III): Ejemplos de análisis de costes
  4. Introducción a la Algoritmia (IV): Coste de ordenar
  5. Recursividad
  6. Algoritmos Voraces
  7. Análisis Amortizado

Algoritmos con Números

Estos manuales explican algoritmos para tratar con números, especialmente en relación a propiedades de divisibilidad.

  1. Exponenciación Rápida
  2. Algoritmo de Euclides
  3. Criba de Eratóstenes
  4. Criba de Gries-Misra

Búsqueda Completa y Programación Dinámica

La Búsqueda Completa es una técnica para resolver problemas de computación que se basa en probar todas las opciones posibles. La Programación Dinámica es una técnica más refinada, que en lugar de probar todas las opciones las agrupa en subproblemas que resuelve una sola vez.

  1. Búsqueda Completa (I): Fundamentos
  2. Búsqueda Completa (II): Ejemplos más avanzados
  3. Programación Dinámica (I): Fundamentos
  4. Programación Dinámica (II): Ejemplos más avanzados
  5. SOS DP
  6. Optimizaciones en Programación Dinámica

Estructuras de Datos de la STL

La STL (biblioteca estándar de C++) trae varias clases de estructuras de datos, es decir, métodos de organizar y procesar datos para obtener información y actualizarlos de forma eficiente. Conocerlas nos hará la resolución de problemas más sencilla.

  1. Pilas (stacks) y colas (queues)
  2. Mapas (maps) y conjuntos (sets) desordenados
  3. Mapas (maps) y conjuntos (sets) ordenados
  4. Montículos (priority queues)

Estructuras de Datos "Custom"

Aunque la STL trae numerosas estructuras de datos útiles, habrá problemas que requieran estructuras de datos que esta no contiene. En estos manuales explicaremos las principales.

  1. RSQ y Sumas Cumulativas
  2. RMQ y Sparse Table
  3. Árboles de Segmentos (I): Introducción
  4. Árboles de Segmentos (II): Implementación y Actualizaciones
  5. Árboles de Segmentos (III): Actualizaciones en rangos
  6. Árboles de Segmentos (IV): Árboles persistentes
  7. Árboles de Segmentos (V): Búsqueda binaria o "Walking"
  8. Estructura Unión-Búsqueda en conjuntos disjuntos (I): Introducción
  9. Estructura Unión-Búsqueda en conjuntos disjuntos (II): Mejoras de eficiencia
  10. Estructura Unión-Búsqueda en conjuntos disjuntos (III): Conectividad dinámica
  11. Descomposición SQRT
  12. Tries
  13. Treaps
  14. Li Chao Tree

Grafos

Aquí se explican algoritmos sobre grafos.

  1. Introducción a los grafos
  2. Graph Traversal (DFS y BFS)
  3. Camino más corto entre nodos (Dijkstra, Bellman-Ford y Floyd-Warshall)
  4. Minimum Spanning Tree (Prim y Kruskal)
  5. Componentes conexas y bicoloración
  6. Árbol de DFS, puentes y puntos de articulación
  7. SCC y 2-SAT
  8. LCA
  9. HLD
  10. CD
  11. MBM

Otros temas

  1. Geometría Computacional

Listas de problemas

En la mayoría de los manuales anteriores podrás encontrar listas de problemas relacionados con lo que se explica en el manual al lado del artículo. A continuación incluímos algunas listas de problemas adicionales sobre temas que no tienen un manual explícito que lo explique.

  1. Búsqueda dicotómica / Binary search
  2. Ad hoc
  3. Interactivos
  4. Constructivos
  5. Teoría de números
  6. Combinatoria