05.03.2015 Views

Backtracking

Backtracking

Backtracking

SHOW MORE
SHOW LESS

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…

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!