Вы находитесь на странице: 1из 12

Backtracking

Algoritmos y Programación II
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.

– Si tenemos N elementos y cada elemento puede ser configurado


de m maneras, nos encontramos con mN combinaciones a
probar hasta que encontremos una que nos satisfaga.
– Si mN es muy elevado, tenemos un problema.
Idea
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, juegos
y otros tipos.
Backtracking (método de
retroceso ó vuelta atrás)

La solución de un problema de backtracking se puede


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

En cada momento, el algoritmo se encontrará en un


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

Si no, se prueban otros valores de xk.


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

El resultado es equivalente a hacer un recorrido en


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

Ejemplo. Dado un conjunto de números enteros {4, 2, 1,


7}, encontrar si existe algún subconjunto cuya suma
sea exactamente 7.
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
Búsqueda de todas las soluciones

proc buscar_todas_las_soluciones (paso : T);


begin
inicializar_alternativas;
repeat
obtener_siguiente_alternativa;
if es_alternativa_válida then
almacenar_paso;
if es_solución then
procesar_solución
else
buscar_todas_las_soluciones (nuevo_paso)
endif;
borrar_paso
endif;
until no_más_alternativas;
end;
Preguntas…

Вам также может понравиться