Backtracking
Backtracking
Backtracking
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Backtracking</strong><br />
Algoritmos y Programación II
Idea<br />
Existen muchos problemas que se plantean como la<br />
búsqueda de una combinación de componentes o toma<br />
de decisiones que satisfagan ciertas condiciones, para<br />
llegar a la solución.<br />
– Si tenemos N elementos y cada elemento puede ser configurado<br />
de m maneras, nos encontramos con m N combinaciones a<br />
probar hasta que encontremos una que nos satisfaga.<br />
– Si m N es muy elevado, tenemos un problema.
Idea
<strong>Backtracking</strong> (método de<br />
retroceso ó vuelta atrás)<br />
Es una técnica general de resolución de problemas,<br />
aplicable tanto a problemas de optimización, juegos<br />
y otros tipos.
<strong>Backtracking</strong> (método de<br />
retroceso ó vuelta atrás)<br />
La solución de un problema de backtracking se puede<br />
expresar como una tupla (x 1 , x 2 , ..., x n ), satisfaciendo<br />
unas restricciones P(x 1 , x 2 , ..., x n ) y tal vez<br />
optimizando una cierta función objetivo.
<strong>Backtracking</strong> (método de<br />
retroceso ó vuelta atrás)<br />
En cada momento, el algoritmo se encontrará en un<br />
cierto nivel k, con una solución parcial (x 1 , ..., x k ). Si<br />
se puede añadir un nuevo elemento a la solución x k+1 ,<br />
se genera y se avanza al nivel k+1.
<strong>Backtracking</strong> (método de<br />
retroceso ó vuelta atrás)<br />
Si no, se prueban otros valores de x k .<br />
Si no existe ningún valor posible por probar, entonces se<br />
retrocede al nivel anterior k-1.<br />
Se sigue hasta que la solución parcial sea una solución<br />
completa del problema, o hasta que no queden más<br />
posibilidades.
<strong>Backtracking</strong> (método de<br />
retroceso ó vuelta atrás)<br />
El resultado es equivalente a hacer un recorrido en<br />
profundidad en el árbol de soluciones. Sin embargo,<br />
este árbol es implícito, no se almacena en ningún<br />
lugar.
<strong>Backtracking</strong> (método de<br />
retroceso ó vuelta atrás)<br />
Ejemplo. Dado un conjunto de números enteros {4, 2, 1,<br />
7}, encontrar si existe algún subconjunto cuya suma<br />
sea exactamente 7.
Esquemas de <strong>Backtracking</strong><br />
Existen tres tipos de problemas a resolver utilizando la<br />
técnica de <strong>Backtracking</strong>:<br />
– Búsqueda de una solución<br />
– Búsqueda de todas las soluciones<br />
– Búsqueda de la solución óptima
Búsqueda de todas las soluciones<br />
proc buscar_todas_las_soluciones (paso : T);<br />
begin<br />
inicializar_alternativas;<br />
repeat<br />
obtener_siguiente_alternativa;<br />
if es_alternativa_válida then<br />
almacenar_paso;<br />
if es_solución then<br />
procesar_solución<br />
else<br />
buscar_todas_las_soluciones (nuevo_paso)<br />
endif;<br />
borrar_paso<br />
endif;<br />
until no_más_alternativas;<br />
end;
Preguntas…