Apuntes DAM
Volver al inicio

Técnicas de diseño de algoritmos

Algoritmos2 algoritmos · 4 ejercicios corregidos · código en Java, Python, JavaScript, C# y PHP

Antes de aprender algoritmos concretos conviene conocer las estrategias que hay detrás de casi todos. Ante un problema nuevo, la pregunta no es «¿qué algoritmo me sé?», sino «¿cómo lo ataco?»: ¿se puede partir en trozos más pequeños del mismo tipo? ¿hay que probar combinaciones y deshacer las que no sirven? ¿basta con elegir en cada paso lo que parece mejor? ¿se repiten los mismos cálculos una y otra vez?

Cada técnica responde a una de esas preguntas. La recursividad es la herramienta; divide y vencerás, backtracking y programación dinámica son formas de usarla; los algoritmos voraces son la apuesta rápida que a veces acierta y a veces no. Saber reconocerlas es lo que permite resolver problemas que no has visto nunca.

Los algoritmos

Cuál elegir

TécnicaCuándo encajaEjemplos
Divide y vencerásSe parte en subproblemas independientes y las soluciones se combinanMergesort, quicksort, búsqueda binaria, potencia rápida
Backtracking (vuelta atrás)Hay que explorar combinaciones y se puede descartar pronto las imposiblesN reinas, sudoku, laberintos, subconjuntos

Divide y vencerás y programación dinámica parten el problema igual; la diferencia es si los subproblemas se repiten. Si se repiten, guardarlos (memoización) convierte un algoritmo exponencial en uno polinómico.