You are on page 1of 12

Backtracking

Algoritmos y Programación II

– Si mN es muy elevado. tenemos un problema. nos encontramos con mN combinaciones a probar hasta que encontremos una que nos satisfaga. . – Si tenemos N elementos y cada elemento puede ser configurado de m maneras.Idea Existen muchos problemas que se plantean como la búsqueda de una combinación de componentes o toma de decisiones que satisfagan ciertas condiciones. para llegar a la solución.

Idea .

juegos y otros tipos.Backtracking (método de retroceso ó vuelta atrás) Es una técnica general de resolución de problemas. aplicable tanto a problemas de optimización. .

. x2. xn). .... .. xn) y tal vez optimizando una cierta función objetivo.. satisfaciendo unas restricciones P(x1.Backtracking (método de retroceso ó vuelta atrás) La solución de un problema de backtracking se puede expresar como una tupla (x1. x2..

.. el algoritmo se encontrará en un cierto nivel k. xk)... con una solución parcial (x1. se genera y se avanza al nivel k+1. . Si se puede añadir un nuevo elemento a la solución xk+1.Backtracking (método de retroceso ó vuelta atrás) En cada momento.

Se sigue hasta que la solución parcial sea una solución completa del problema.Backtracking (método de retroceso ó vuelta atrás) Si no. o hasta que no queden más posibilidades. se prueban otros valores de xk. . entonces se retrocede al nivel anterior k-1. Si no existe ningún valor posible por probar.

Sin embargo.Backtracking (método de retroceso ó vuelta atrás) El resultado es equivalente a hacer un recorrido en profundidad en el árbol de soluciones. no se almacena en ningún lugar. este árbol es implícito. .

Backtracking (método de retroceso ó vuelta atrás) Ejemplo. 7}. . 2. encontrar si existe algún subconjunto cuya suma sea exactamente 7. 1. Dado un conjunto de números enteros {4.

Esquemas de Backtracking Existen tres tipos de problemas a resolver utilizando la técnica de Backtracking: – Búsqueda de una solución – Búsqueda de todas las soluciones – Búsqueda de la solución óptima .

repeat obtener_siguiente_alternativa.Búsqueda de todas las soluciones proc buscar_todas_las_soluciones (paso : T). . borrar_paso endif. if es_solución then procesar_solución else buscar_todas_las_soluciones (nuevo_paso) endif. until no_más_alternativas. if es_alternativa_válida then almacenar_paso. begin inicializar_alternativas. end.

Preguntas… .