05.03.2015 Views

Backtracking

Backtracking

Backtracking

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<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!