Beruflich Dokumente
Kultur Dokumente
Backtracking
Yolanda Garc Ruiz D228 a Jess Correas D228 u ygarciar@fdi.ucm.es jcorreas@fdi.ucm.es
Departamento de Sistemas Informticos y Computacin a o Universidad Complutense de Madrid (elaborado a partir de [GV00], [PS03] y notas de S. Estvez y R. e Gonzlez del Campo) a
1 / 70
Bibliograf a
Importante: Estas transparencias son un material de apoyo a las clases presenciales y no sustituyen a la bibliograf bsica ni a las a a propias clases presenciales para el estudio de la asignatura Bibliograf bsica: a a
[GV00]: cap tulo 6 [PS03]1 : cap tulo 7
Bibliograf complementaria: a
[NN98]: cap tulo 5 tulo 6 [GC01]2 : cap [BB97]: cap tulo 9 (apartado 9.6)
Ejercicios resueltos:
[MOV04]: cap tulo 14 (1) [PS03] J. I. Pelez Snchez et al. Anlisis y Diseo de algoritmos: un a a a n enfoque terico y prctico, Universidad de Mlaga, 2003 o a a (2) [GC01] D. Gimnez Cnovas Apuntes y problemas de algor e a tmica, Universidad de Murcia, 2001. Disponible en
http://servinf.dif.um.es/domingo/apuntes/Algoritmica/apuntes.pdf
Yolanda Garc Jess Correas (DSIC-UCM) a, u 2 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
3 / 70
La solucin parcial debe cumplir que 3 xi datoi 20 o i=1 Restricciones impl citas: indican qu tuplas pueden dar lugar a e soluciones vlidas a La solucin debe cumplir el siguiente objetivo: o Para este problema existe una unica solucin o [1, 0, 1]
Yolanda Garc Jess Correas (DSIC-UCM) a, u 5 / 70
3 i=1 xi
datoi = 20
2 0 1 0
9 1
3 0 1 0
6 1 0
10 1 0
13 1
11
12
14
15
Cada camino de la ra a las hojas dene una posible solucin z o 3 hojas (8 posibles soluciones) El rbol de expansin tiene 2 a o Se generan tuplas que no son soluciones ineciente
Yolanda Garc Jess Correas (DSIC-UCM) a, u 6 / 70
2 0 1 0
3 0 1 0
6 1 0
10 1
11
12
7 / 70
Otra posible representacin de la solucin: o o Tupla o vector de a lo sumo 3 elementos ordenados con valores entre 1 y 3 (los ndices de los elementos del conjunto anterior)
1 indica que el elemento 1 (con valor 13) est en la solucin a o 2 indica que el elemento 2 (con valor 11) est en la solucin a o 3 indica que el elemento 3 (con valor 7) est en la solucin a o
8 / 70
2
3
4
3
9 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
10 / 70
Si ya no existen ms valores para xk , se retrocede (se a vuelve atrsbacktrack) al nivel anterior k 1 a El algoritmo contina hasta que la solucin parcial sea una solucin u o o completa del algoritmo, o hasta que no queden ms posibilidades a
11 / 70
12 / 70
esSolucion(sol)
Comprueba si la solucin calculada hasta el momento es una solucin vlida o o a para el problema. Ejemplo: esSolucion([0, 0, 1]) = falso
alcanzable(nivel, sol)
Comprueba si a partir de la solucin parcial actual es posible llegar a una o solucin vlida. Ejemplos: o a alcanzable(2, [0, 0, ]) = cierto alcanzable(2, [1, 1, ]) = falso
hayMasHermanos(nivel,sol))
Devuelve el valor cierto si el nodo actual tiene hermanos que an no han u sido generados. Ejemplo: hayMasHermanos(2, [1, 1, ]) = falso
retroceder(nivel,sol))
Retrocede un nivel en el arbol de soluciones. Disminuye en 1 el valor del nivel y actualiza la solucin actual. o
Yolanda Garc Jess Correas (DSIC-UCM) a, u 15 / 70
Observaciones
La representacin de las soluciones determina la forma del rbol de o a expansin o
Cantidad de descendientes de un nodo Profundidad del rbol a Cantidad de nodos del rbol a
La representacin de las soluciones determina, como consecuencia, la o eciencia del algoritmo ya que el tiempo de ejecucin depende del o nmero de nodos generados u El rbol tendr tantos niveles como valores tenga la secuencia solucin a a o En cada nodo se debe poder determinar:
Si es solucin o posible solucin del problema o o Si tiene hermanos sin generar Si a partir de este nodo se puede llegar a una solucin o
16 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
17 / 70
Estudio de complejidad
En general se obtienen rdenes de complejidad exponencial y factorial o El orden de complejidad depende del nmero de nodos generados y u del tiempo requerido para cada nodo (que podemos considerar constante) Si la solucin es de la forma (x1 , . . . , xn ), donde xi admite mi valores o En el caso peor, se generarn todas las posibles combinaciones para a cada xi Nivel 1 m1 nodos Nivel 2 m1 m2 nodos ... Nivel n m1 m2 . . . mn nodos Para el ejemplo planteado anteriormente, mi = 2 T (n) = 2 + 22 + 23 + . . . + 2n = 2n+1 2 Tiempo exponencial Cada caso depende de cmo se realice la poda del rbol, y de la o a instancia del problema
Yolanda Garc Jess Correas (DSIC-UCM) a, u 18 / 70
19 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
20 / 70
Es el mismo problema visto en programacin dinmica o a Se dispone de n objetos y una mochila de capacidad C > 0,
El peso del objeto i es wi > 0 La inclusin del objeto i en la mochila produce un benecio bi > 0 o
El objetivo consiste en llenar la mochila maximizando el valor de los objetos transportados sin sobrepasar la capacidad de la mochila Los objetos no son fraccionables
21 / 70
La solucin se puede representar como una tupla {x1 , x2 , . . . xn } o Restricciones expl citas: xi (0, 1) Si xi = 0 el objeto i no se introduce en la mochila Si xi = 1 el objeto i se introduce en la mochila Restricciones impl citas:
n i=1 xi
wi C
n i=1 xi
bi
22 / 70
Cuando se encuentre una solucin, la compararemos con la mejor o solucin encontrada hasta el momento, que se ir actualizando al o a encontrar una nueva solucin con mayor benecio o Solo los nodos terminales del rbol de expansin pueden ser solucin a o o al problema La funcin alcanzable comprueba que los pesos acumulados hasta o el momento no excedan la capacidad de la mochila. Esta funcin o permite la poda de nodos
23 / 70
2 0 1
P=20 B=140 B 140
9 0
P=5 B=50
3 1 0
6 1 0
10 1 0
13
P=25 B=190
5
P=10 B=60
8
P=30 B=200
11
12
P=15 B=110
14
P=25 P 25 B=190
25 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
26 / 70
Asignacin de tareas o
(Basado en [GV00], p. 229.) Disponemos de n empleados y n tareas a realizar Mediante una tabla M de tamao n n, representamos con M[i, j] el n coste de realizar la tarea j por el empleado i, para i, j = 1, . . . , n El problema consiste en asignar a cada operario i una tarea j de forma que se minimice el coste total. La solucin se puede representar como una tupla Sol = x1 , x2 , . . . xn o Restricciones expl citas: xi {1, . . . n} xi es la tarea asignada al i-simo empleado e Restricciones impl citas: xi = xj , i = j El objetivo es minimizar la funcin n M[i, xi ] o i=1 Por cada solucin que encuentre el algoritmo, se anotar su coste y se o a comparar con el coste de la mejor solucin encontrada hasta el a o momento
Yolanda Garc Jess Correas (DSIC-UCM) a, u 27 / 70
El cdigo de TareaNoAsignada es el siguiente: o fun TareaNoAsignada(Asignadas, n) desde i 1 hasta n-1 hacer si Asignadas[i] = Asignadas[n] entonces devolver falso n si n desde devolver cierto n fun
29 / 70
Este algoritmo realiza podas en el rbol de expansin eliminando aquellos a o nodos que no van a llevar a la solucin ptima o o
1 T1 C=3 2 T2 C=13 C= 13 T3 C=4 5 T2 C=9 4 6 8 T T2 C=5 7 T3 C=6 T3 C 1 C=1 9
3 T3 3 C=18
3 5 1 10 10 1 8 5 5
30 / 70
31 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
32 / 70
El caballo de ajedrez
Consideremos un caballo de ajedrez colocado en una posicin, X , Y o de un tablero de dimensiones n n. Se trata de encontrar una sucesin de movimientos vlidos de un caballo de ajedrez de forma o a que ste pueda visitar todas y cada una de las casillas del tablero sin e repetir ninguna El algoritmo voraz no encontraba solucin para un tablero con n = 5 o y partiendo de la posicin inicial (x, y ) = (5, 3) o
33 / 70
Los movimientos que puede hacer el caballo se representan mediante vectores constantes
6 5 4 3 2 7 8 1
dx = [ dy = [
2 1
1 2
-1 2
-2 1
-2 -1
-1 -2
1 -2
2 -1
] ]
34 / 70
35 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
38 / 70
Coloreado de mapas
[GV00], p. 246. Dado un grafo conexo no dirigido y un numero m > 0, llamamos colorear el grafo a asignar un numero i (1 i m) a cada vrtice, de e forma que dos vertices adyacentes nunca tengan asignados numeros iguales Supongamos que el grafo tiene n vrtices e Deseamos implementar un algoritmo que coloree un grafo dado Este problema proviene de un problema clsico de coloreado de mapas a en el plano. Dado un mapa, Cul es el m a nimo nmero de colores u necesario para colorear sus regiones de forma que no haya dos regiones adyacentes de igual color?
Cada regin se corresponde con un nodo o Si dos regiones son adyacentes, sus nodos se conectan con un arco As siempre se obtiene un grafo donde sus arcos nunca se cruzan , (grafo planar)
Yolanda Garc Jess Correas (DSIC-UCM) a, u 39 / 70
11111
2
4 2
3
3
3 1 4 5
Se puede demostrar que 4 colores siempre son sucientes para colorear un mapa.
Yolanda Garc Jess Correas (DSIC-UCM) a, u 40 / 70
La solucin se puede representar como una tupla x1 , x2 , . . . xn donde o xi es el color del vrtice i e Si se dispone de m colores, en la etapa k el algoritmo asigna un color c {1, . . . m} al vrtice k. e Restricciones expl citas: xi {1, . . . , m} Restricciones impl citas: Vrtices adyacentes no pueden ser del mismo e color El objetivo es buscar una forma de colorear el grafo utilizando solo m colores
41 / 70
43 / 70
44 / 70
45 / 70
Las variables mejorSol y minimo son globales. Cmo ser el programa o a llamador en este caso? Cmo ser sin variables globales? o a
Yolanda Garc Jess Correas (DSIC-UCM) a, u 46 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
48 / 70
Las n reinas
[GV00], p. 212. Es otro problema clsico de computacin a o Consiste en encontrar la forma de disponer n reinas en un tablero de ajedrez n n de forma que no se amenacen entre ellas Los movimientos que puede realizar una reina de ajedrez son:
49 / 70
fun valido(sol[1..n],k) desde i 1 hasta k-1 hacer si sol[i]=sol[k] |sol[i]-sol[k]| = |i-k| entonces devolver falso n si n desde devolver cierto n fun Llamada inicial: reinas(1,sol)
51 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
52 / 70
Trenes
(basado en [GV00], p. 242). Sea una regin con n ciudades. Se pretende ir de una ciudad a otra de o la misma regin o Para ello disponemos de los horarios de todos los trenes que comunican las ciudades de esa regin o Se conoce tambin la duracin de cada viaje e o Se supone que, a lo sumo, hay un tren para cada par de ciudades El objetivo es encontrar un camino para viajar entre dos ciudades dadas, de forma que se minimice el tiempo empleado.
53 / 70
Trenes (Cont.)
Supongamos que las ciudades estn numeradas de 1 a n. a Los horarios y duraciones de viaje de los trenes se representan en una matriz de horarios H[1..n, 1..n] en la que cada elemento tiene dos atributos, duracion y hora. Los elementos de esta matriz tienen en ambos atributos si las ciudades i y j no estn comunicadas. a Representamos la solucin del problema mediante una tupla o Sol = x1 , x2 , . . . xk La tupla solucin solo tiene valores hasta el nivel k, siendo k el o nmero de ciudades por las que tenemos que pasar (k n) u Tiene que cumplirse
x1 es la ciudad de origen xk es la ciudad de destino xi est comunicada con la ciudad xi+1 para 1 i (k 1) a
Yolanda Garc Jess Correas (DSIC-UCM) a, u 54 / 70
Trenes (Cont.)
// H es una matriz de estructuras con dos atributos: duracion y hora (de salida). proc trenes(H[1..n,1..n],solAct[1..n],sol[1..n],dest,etapa,hora,durAcIni,durMinimo) j 0 // j representa la ciudad repetir j j + 1 ; solAct[etapa] j si aceptable(H,solAct,hora,etapa) entonces duracionEspera H[solAct[etapa-1], j].hora - hora duracionAc durAcIni + duracionEspera + H[solAct[etapa-1], j].duracion si j = dest entonces si duracionAc < durMinimo entonces sol solAct ; durMinimo duracionAc n si si no si etapa < n entonces horallegada H[solAct[etapa-1], j].hora+ H[solAct[etapa-1], j].duracion trenes(H,solAct,sol,dest,etapa+1, horallegada, duracionAc,durMinimo) n si n si hasta j = n solAct[etapa] 0 //no deja basura en la solucin o n proc
Yolanda Garc Jess Correas (DSIC-UCM) a, u 55 / 70
Trenes (Cont.)
Los argumentos sol y durMinimo contienen la solucin ptima: el o o recorrido ptimo y el tiempo total del trayecto. Se podr denir o an como variables globales El argumento durAcIni en la etapa k almacena el tiempo empleado en recorrer el camino entre las ciudades origen y sol[k-1]: la suma de los tiempos de espera entre los diferentes trenes y las duraciones de los trayectos hasta k 1. Se supone en este problema que todos los recorridos tienen lugar en el mismo d Si no fuera as deber tenerse en cuenta que en algunos a. , a casos es necesario esperar al d siguiente para continuar el recorrido a
56 / 70
Trenes (Cont.)
El programa llamador podr ser el siguiente a proc llamador trenes(H[1..n,1..n],origen,dest,sol[1..n],duracion) crear solAct[1..n] duracion hora 00:00 solAct[1] origen trenes(H,solAct,sol,dest,2,hora, 0,duracion) n proc Si el problema no tiene solucin, al nal de la ejecucin la variable o o duracion contendr . a
57 / 70
Trenes (Cont.)
La funcin aceptable comprueba o
que toda ciudad debe estar comunicada con la anterior que la hora de llegada a la ciudad de la etapa anterior sea menor que la hora de salida del tren a la ciudad j que no se pase dos veces por la misma ciudad fun aceptable(H,sol,hora,etapa) si (H[sol[etapa-1], sol[etapa]].hora < ) (hora <H[sol[etapa-1], sol[etapa]].hora) entonces desde i 1 hasta etapa-1 hacer si sol[i]= sol[etapa] entonces devolver falso n si n desde devolver cierto si no devolver falso n si n fun
Yolanda Garc Jess Correas (DSIC-UCM) a, u 58 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
59 / 70
Franqueo de postales
Consideremos una postal en la que se pueden poner un mximo de M a sellos Se dispone de un nmero limitado de unidades de cada tipo de sellos u Para poder enviar la postal, se necesita franquearla con una tarifa m nima Adems, se supone que el orden de los sellos en la postal debe ser tal a que su valor sea decreciente Determinar la forma de franquear la postal de forma que el coste sea m nimo
60 / 70
El vector S debe contener los tipos de sello ordenados en orden decreciente de valor Representamos la solucin del problema mediante una tupla o Sol = x1 , x2 , . . . xk , k m, donde xi indica el tipo de sello en la posicin i de la postal o Debe cumplirse la restriccin expl o cita xi {1..N} y la restriccin impl o cita siguiente: el valor del sello xi debe ser mayor o igual que el valor del sello xi+1 para 1 < i < M 1 y xi = 0
61 / 70
63 / 70
Caracter sticas generales Esquema general de un algoritmo de backtracking Estudio de complejidad Problema de la mochila 0-1 Asignacin de tareas o El caballo de ajedrez Coloreado de mapas Las n reinas Trenes Franqueo de Postales Ciclos Hamiltonianos
64 / 70
Ciclos Hamiltonianos
Sea g un grafo no dirigido con n vrtices e Llamamos ciclo hamiltoniano a un camino que visita una sola vez todos los vrtices y vuelve al vrtice inicial e e
1 5 2 B A E
4 3
Ningn hamiltoniano u
El objetivo es encontrar todos los ciclos hamiltonianos de un grafo Existen algoritmos voraces muy ecientes para este tipo de problemas, pero pueden no proporcionar la solucin ptima o o
Yolanda Garc Jess Correas (DSIC-UCM) a, u 65 / 70
66 / 70
proc hamiltoniano(G[1..n,1..n],etapa,sol[1..n]) repetir siguienteVertice(G,sol,etapa) // asigna a sol[etapa] el siguiente vertice si sol[etapa] = 0 entonces si etapa = n entonces comunicar(sol) si no hamiltoniano(G,etapa+1,sol) n si n si hasta sol[etapa] = 0 n proc
67 / 70
siguienteVertice puede ser llamado varias veces para una misma etapa, seleccionando en cada llamada el siguiente vrtice que e cumple las restricciones Si no encontramos ningn vrtice (ms) que verique las restricciones, u e a entonces siguienteVertice asigna el valor 0 a sol[k]
68 / 70
El programa llamador ser a proc llamador hamiltoniano(G[1..n,1..n]) crear sol[1..n] desde i 2 hasta n hacer sol[i] 0 n desde sol[1] 1 hamiltoniano(G,2,sol) n proc
70 / 70