You are on page 1of 8

Tema VI: Backtracking

Indice del Tema

Tema VI Backtracking
1

Introducci on T ecnicas de Vuelta Atr as Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto Extensiones Backtracking para Enumeraci on Backtracking para Optimizaci on

Carlos Cotta
2 Departamento de Lenguajes y Ciencias de la Computaci on Universidad de M alaga http://www.lcc.uma.es/ccottap

Ingenier a Inform atica Curso 2009-2010


3

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking

Recapitulaci on

Pong amonos en lo peor

En el u ltimo tema se presentaron las t ecnicas voraces. Se plantea el problema como una secuencia de decisiones de manera que: Dichas decisiones de forma miope, intentando maximizar el benecio inmediato. Las decisiones son irreversibles. No hay vuelta atr as. Este enfoque es suciente para resolver adecuadamente muchos problemas de inter es. Incluso si un enfoque de este tipo no garantiza encontrar la soluci on optima, puede que en muchos casos proporcione soluciones de calidad aceptable.

A pesar de la simplicidad de los enfoques voraces, estos no siempre son satisfactorios: En alg un problema puede que las soluciones que proporciona sean de calidad insuciente. Si el problema presenta restricciones, es posible que no sea capaz de construir siquiera una soluci on v alida. Si se desea encontrar una soluci on con ciertas caracter sticas, es necesario en general que las decisiones no sean irreversibles, y que se pueda realizar vuelta atr as.

C. Cotta

Backtracking

C. Cotta

Backtracking

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Idea B asica

Idea B asica
De manera m as precisa, el funcionamiento de las t ecnicas de vuelta atr as es como sigue:
1 2

Al igual que en programaci on din amica o en los enfoques voraces abordamos el problema como una secuencia de decisiones (i.e., estamos una vez m as ante un m etodo constructivo). En cada etapa de la resoluci on del problema puede haber m as de una posible decisi on, en cuyo caso elegimos una de acuerdo a alg un criterio. Nos reservamos el derecho a revertir esa decisi on si m as adelante vemos que es preciso, e.g., si llegamos a un camino sin salida en la construcci on de la soluci on.

Partimos de una soluci on totalmente inespecicada. En cada momento se examinan las posibilidades para extender la soluci on parcial.
1

Si hay una o m as, elegimos una de ellas, y continuamos a partir de ah . Si no hay forma de extender la soluci on actual, se deshace la decisi on anterior, i.e., se vuelve atr as y se considera otra posibilidad distinta a la que se consider o antes.

Nos detenemos en el momento en que hemos encontrado una soluci on de las caracter sticas deseadas.

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Pseudoc odigo
Bactracking proc Bactracking (X [1 . . . i ]: TSoluci on, ok : B) variables L: ListaComponentes inicio si EsSoluci on(X ) entonces ok CIERTO en otro caso ok FALSO L Candidatos(X ) mientras ok Vac a(L) hacer X [i + 1] Cabeza(L); L Resto(L) Backtracking (X , ok ) nmientras nsi n
C. Cotta Backtracking

Arbol de B usqueda

(1)

(2) (7) (8)

X1
(3) (4) (6)

X2
(9)

X3
(10)

X11
(5)

X12 X121

X13

X31

X32
(11)

X321
(12)

X3211

C. Cotta

Backtracking

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Consideraciones

Exploraci on de Grafos en Profundidad


Podemos visualizar el funcionamiento de una t ecnica de backtracking como la exploraci on en profundidad de un grafo.
1

Dependiendo de la estructura del problema y de la naturaleza de las decisiones es posible que surjan los mismos subproblemas en diferentes ramas del arbol de b usqueda. Cada vez que se hace vuelta atr as se est a podando una parte del arbol de b usqueda: nos ahorramos considerar todas las decisiones pendientes en ese punto. En el peor caso el proceso puede ser muy ineciente, y reducirse a fuerza bruta (b usqueda exhaustiva de todas las combinaciones posibles).

Cada v ertice del grafo es un posible estado de la soluci on del problema. Cada arco del grafo representa la transici on entre dos estados de la soluci on (i.e., la toma de una decisi on).

T picamente el tama no de este grafo ser a inmenso, por lo que no existir a de manera expl cita. En cada momento s olo tenemos en una pila los nodos que van desde el estado inicial al estado actual. Si cada secuencia de decisiones distinta da lugar a un estado diferente, el grafo es un arbol (el arbol de estados).

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Denici on del Problema

Resoluci on del Problema

Q Q Q Q Q Q Q Q

Tenemos un tablero de ajedrez de N N escaques, y queremos situar sobre el mismo a N reinas, de manera que ninguna pareja de las mismas se ataquen mutuamente. N otese que se trata de un problema altamente restringido:
1 2 3

Consideramos un enfoque incremental en el que colocamos una reina en cada paso: Debido a los ataques verticales, s olo puede haber una reina en cada columna, i.e., las decisiones se reducen a determinar la la en la que se pone la reina de cada columna. Debido a los ataques horizontales, s olo puede haber una reina en cada la, i.e., las soluciones son permutaciones de los n umeros [1 . . . N ]. Cada soluci on parcial R [1 . . . i ] indica la posici on de las reinas en las i primeras columnas.

ataques en horizontal ataques en vertical ataques en diagonal

C. Cotta

Backtracking

C. Cotta

Backtracking

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Resoluci on del Problema

Algoritmo de Resoluci on
N -Reinas proc NReinas (R [1 . . . i ]: TSoluci on, N : N, ok : B) variables j : N inicio si i =N entonces ok CIERTO en otro caso ok FALSO; j 1 mientras ok (j N ) hacer si EsFactible(R , j ) entonces R [i + 1] j ; NReinas (R , N , ok ) nsi j j +1 nmientras nsi n
C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Dada una soluci on parcial R [1 . . . i ], se examinan los posibles emplazamientos de la reina (i + 1)- esima.
1

Si hay alguna posici on en la que pueda situarse una reina m as sin atacar (diagonalmente) a las anteriores, la soluci on parcial es prometedora, y se exploran recursivamente las diferentes alternativas. Si no hay ninguna posici on libre de ataques para la siguiente reina, la soluci on parcial es un callej on sin salida, y hay que hacer retroceso.

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Algoritmo de Resoluci on
N -Reinas func EsFactible (R [1 . . . i ]: TSoluci on, j : N): B variables factible : B inicio factible CIERTO k 1 mientras factible (k i ) hacer si (j =R [k ]) (i +1k = |j R [k ]|) entonces factible FALSO nsi k k +1 nmientras devolver factible n
C. Cotta Backtracking

Ejemplo

Q Q Q Q Q Q Q Q Q Q Q Q Q Q
C. Cotta Backtracking

Q Q Q

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Introducci on T ecnicas de Vuelta Atr as Extensiones

Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Denici on del Problema


Tenemos un laberinto que deseamos atravesar desde un punto de entrada hasta un punto de salida. Suponemos el laberinto discretizado en n m casillas, en cada una de las cuales puede existir un obst aculo. La soluci on al problema es un camino que transcurra desde la entrada hasta la salida a trav es de casillas no bloqueadas.
C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Soluci on al Problema
El camino puede representarse como una secuencia de movimientos. En cada casilla tenemos cuatro posibilidades a priori: Norte, Sur, Este, Oeste. Denimos un orden predeterminado para los movimientos (e.g., en el sentido del reloj empezando por el norte). En cada casilla se consideran estos movimientos en dicho orden. Si ninguno es posible, se retrocede. Dada la naturaleza del problema, es posible que se llegue de varias formas a la misma casilla (i.e., se pueden repetir estados). Para evitar ciclos, se deben marcar las casillas por las que se ya ha pasado, y considerarlas como bloqueadas.

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Conceptos Generales El Problema de las N -Reinas El Problema del Laberinto

Algoritmo de Resoluci on
Laberinto proc Laberinto (C [1 . . . r ]: TSol, L: TLab, i , j : N, ok : B) variables k : N; i ,j : Z inicio si L[i , j ]=salida entonces ok CIERTO en otro caso L[i , j ] bloqueada; ok FALSO; k 1 mientras ok (k NUMMOV ) hacer AplicaMovimiento(i , j , k , i , j ) si Bloqueada(L, i ,j ) entonces C [r + 1] k ; Laberinto (C , L, i , j , ok ) nsi k k +1 nmientras nsi C. Cotta Backtracking n

Ejemplo

C. Cotta

Backtracking

Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking para Enumeraci on Backtracking para Optimizaci on

Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking para Enumeraci on Backtracking para Optimizaci on

Backtracking puede hacer m as cosas


El enfoque y aplicaciones mostradas anteriormente corresponden a la resoluci on de problemas de decisi on o de satisfacci on, i.e., determinar si un problema tiene o no una soluci on de determinadas caracter sticas, o construir una soluci on de determinadas caracter sticas o determinar que no existe. El enfoque es generalizable sin embargo a otro tipo de situaciones:
1

Separar el trigo de la paja

En los problemas anteriores el objetivo era encontrar una soluci on v alida, i.e., en el momento en el que se halla la b usqueda termina. Para adaptar este enfoque a problemas de enumeraci on es necesario continuar la b usqueda aunque se haya encontrado una soluci on. El arbol de b usqueda ha de recorrerse completamente, visitando todos los nodos prometedores.

Problemas de conteo o de enumeraci on: determinar cu antas soluciones de las caracter sticas deseadas existen, o encontrarlas todas. Problemas de optimizaci on: encontrar la soluci on factible que maximiza una cierta funci on de calidad.
C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones Backtracking Backtracking para Enumeraci on Backtracking para Optimizaci on

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Backtracking para Enumeraci on Backtracking para Optimizaci on

Pseudoc odigo para Enumeraci on


Bactracking para enumeracion proc Bactracking (X [1 . . . i ]: TSoluci on, num: N) variables L: ListaComponentes inicio si EsSoluci on(X ) entonces num num+1 EscribeSoluci on (X ) en otro caso L Candidatos(X ) mientras Vac a(L) hacer X [i + 1] Cabeza(L); L Resto(L) Backtracking (X , num) nmientras nsi n
C. Cotta Backtracking

Tama no del Arbol de B usqueda


El proceso de enumeraci on puede ser muy costoso debido al tama no del espacio de b usqueda. Este tama no puede estimarse emp ricamente como sigue:
1

Se determina el n umero c1 de decisiones posibles en el nodo inicial. Se elige una decisi on al azar, y se repite el procedimiento, obteni endose ci , 1 i L. Si ci se toma como el promedio de decisiones factibles en el nivel i - esimo, entonces el tama no T del arbol es
L i

T = 1 + c1 + c1 c2 + c1 c2 c3 + =
i =1 j =1

cj

C. Cotta

Backtracking

Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking para Enumeraci on Backtracking para Optimizaci on

Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking para Enumeraci on Backtracking para Optimizaci on

El Problema de las N -Reinas


N -Reinas proc NReinas (R [1 . . . i ]: TSoluci on, N : N, num: N) variables j : N inicio si i =N entonces num num+1 EscribeSoluci on (R ) en otro caso para j 1 hasta N hacer si EsFactible(R , j ) entonces R [i + 1] j ; NReinas (R , N , num) nsi nmientras nsi n
C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones Backtracking Backtracking para Enumeraci on Backtracking para Optimizaci on

Ejemplo para N = 5

Q Q Q Q Q Q Q Q

Q Q Q Q Q Q

Q Q Q Q Q Q Q Q Q

Q Q Q Q Q Q Q Q

Q Q

Q Q Q Q Q

Q Q Q Q Q

Q Q Q Q Q

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Backtracking para Enumeraci on Backtracking para Optimizaci on

Complejidad de la B usqueda
1024 1021 1018 1015 1012 109 106 103 101 5 10 15 20 n umero de reinas
C. Cotta Backtracking

S olo queremos lo mejor

tama no del arbol n umero de soluciones En el caso de problemas de optimizaci on nos interesa encontrar la mejor de todas las soluciones factibles. El esquema de b usqueda es muy similar, ya que hay que explorar todas las soluciones v alidas posibles. Tenemos que arrastrar la mejor soluci on conocida en cada momento, para irla comparando con cada soluci on que se encuentre. 25

C. Cotta

Backtracking

Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking para Enumeraci on Backtracking para Optimizaci on

Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking para Enumeraci on Backtracking para Optimizaci on

Pseudoc odigo para Optimizaci on


Bactracking para optimizaci on proc Bactracking (X [1 . . . i ]: TSoluci on, mejor : TSoluci on, mcal : R) variables L: ListaComponentes inicio si EsSoluci on(X ) entonces actcal Calidad(num) si actcal <mcal entonces mejor X; mcal actcal nsi en otro caso L Candidatos(X ) mientras Vac a(L) hacer X [i + 1] Cabeza(L); L Resto(L) Backtracking (X , mejor , mcal ) nmientras nsi n
C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones Backtracking Backtracking para Enumeraci on Backtracking para Optimizaci on

El Problema de la Suma de Subconjuntos

Subset-Sum Problem Sea S una colecci on de n n umeros naturales s1 , , sn , y sea M un n umero natural. Encontrar un subconjunto S S tal que:
1 2

s S

M.
r R

dado cualquier otro R S se cumpla que o bien o bien r R r s S s .

r >M

C. Cotta Introducci on T ecnicas de Vuelta Atr as Extensiones

Backtracking Backtracking para Enumeraci on Backtracking para Optimizaci on

El Problema de la Suma de Subconjuntos


Bactracking para Subset-Sum Problem proc Bactracking (X [1 . . . i ]: TSoluci on, S [1 . . . n]: TArray, act : R, mejor : TSoluci on, mcal : R) inicio si act >mcal entonces mejor X; mcal act nsi si i <n entonces si act +S [i + 1] M entonces X [i + 1] CIERTO Backtracking (X , S , act +S [i + 1], mejor , mcal ) nsi X [i + 1] FALSE Backtracking (X , S , act , mejor , mcal ) nsi n
C. Cotta Backtracking

Arbol de B usqueda
Sea S = {3, 5, 6, 7} y M = 15.
0
(1)

3
(2)

8
(3)

14
(4)

11

14

15

10

11

12

13

C. Cotta

Backtracking

You might also like