Divide and Conquer |
Partir el problema en subproblemas más pequeños, resolverlos y combinar. |
Cuando el problema tiene estructura recursiva y se puede dividir en mitades u otras fracciones. |
Mergesort, Quicksort, FFT. |
Encontrar el par de puntos más cercanos en un plano (Closest Pair). |
Greedy (Avaro) |
Tomar siempre la decisión localmente óptima. |
Cuando el problema tiene subestructura óptima y cumple la propiedad de intercambio. |
Kruskal, Prim, Huffman coding. |
Seleccionar actividades en un horario sin traslape (Activity Selection). |
Dynamic Programming (DP) |
Resolver subproblemas, guardar resultados y reutilizarlos. |
Cuando hay subproblemas superpuestos y estructura óptima. |
Floyd-Warshall, Knapsack, LCS. |
Máxima suma de subsecuencia, caminos mínimos en un grid. |
Backtracking / Búsqueda exhaustiva |
Explorar todas las soluciones posibles con poda. |
Cuando el espacio de búsqueda es grande pero hay reglas que permiten descartar. |
N-reinas, Sudoku solver. |
Generar todas las permutaciones de una cadena con restricciones. |
Transformación / Reducciones |
Convertir el problema a otro ya conocido. |
Cuando identificas que tu problema es equivalente a flujo, matching, SAT, etc. |
Asignación de tareas → Matching bipartito. |
“Maximum Bipartite Matching” para emparejar estudiantes y proyectos. |
Algoritmos de Grafos |
Modelar entidades como nodos y relaciones como aristas. |
Cuando el problema involucra redes, conexiones, caminos, jerarquías. |
BFS, DFS, Dijkstra, Bellman-Ford. |
Encontrar el camino más corto en un mapa de ciudades. |
Flujo / Corte mínimo |
Maximizar el flujo en una red, o encontrar el cuello de botella. |
Cuando el problema es de asignación, transporte, emparejamiento. |
Ford-Fulkerson, Edmonds-Karp. |
Organizar un torneo con restricciones de horarios. |
Geometría computacional |
Usar algoritmos especializados para el plano/espacio. |
Cuando el problema involucra coordenadas, distancias, áreas. |
Convex Hull, Line Sweep. |
Determinar si dos polígonos se intersectan. |
Aleatorización / Probabilísticos |
Introducir azar para simplificar o acelerar. |
Cuando una solución determinista es muy costosa. |
Algoritmo de Miller-Rabin (primalidad). |
Encontrar un hash perfecto con probabilidad alta. |