Está en la página 1de 63

TEORA DE ALGORITMOS

Tema 8. Diseo de Algoritmos: Backtracking


Universidad de Granada
Curso 2010-2011
Gabriel Navarro Teora de Algoritmos
Motivacin de la tcnica
Hay problemas para los que
NO se conoce un algoritmo para su resolucin
o al menos, NO cuentan con un algoritmo eciente para
calcular su solucin
en estos casos, la nico posibilidad es una exploracin directa de
todas las posibilidades
Gabriel Navarro Teora de Algoritmos
Motivacin de la tcnica
Por ejemplo, el ajedrez
se conjetura que con blancas siempre se puede ganar
no se conoce un modo eciente de encontrar las jugadas
Gabriel Navarro Teora de Algoritmos
Motivacin de la tcnica
Por ejemplo, el n-puzle n = t
2
1
2 3 8
0 1 7
6 5 4

0 1 2
3 4 5
6 7 8
existen metodos de bsqueda efectivos para n pequeo
para n bastante grande no hay un mtodo eciente
Gabriel Navarro Teora de Algoritmos
Descripcin de la tcnica
La tcnica Backtracking es un mtodo de bsqueda de soluciones
exhaustiva sobre grafos dirigidos acclicos, el cual se acelera
mediante poda de ramas poco prometedoras.
Esto es,
se representan todas las posibilidades en un rbol
se resuelve buscando la solucin por el rbol (de una
determinada manera)
hay zonas que se evitan por no contener soluciones (poda)
Gabriel Navarro Teora de Algoritmos
Descripcin de la tcnica
la solucin del problema se representa en una n-tupla
(X
1
, X
2
, . . . , X
n
) (no llenando necesariamente todas las
componentes)
cada X
i
se escoje de un conjunto de candidatos
a cada n-tupla se le llama estado
se trata de buscar estados solucin del problema
condiciones de parada
cuando se consiga un estado solucin
cuando se consigan todos los estados solucin
Gabriel Navarro Teora de Algoritmos
Elementos de la tcnica
Al disear un algoritmo backtraking debemos considerar los
siguientes elementos:
Representacin de la solucin en una tupla (X
1
, . . . , X
n
)
Una funcin objetivo para determinar si la tupla a analizar es
una solucin
Unas restricciones a los candidatos para rellenar la tupla:
Implcitas del problema. Valores que puede tomar cada valor
X
i
Explcitas o externas al problema. Por ejemplo, problema
mochila, el peso no debe superar la capacidad de la mochila
Una funcin de poda para eliminar partes del rbol de
bsqueda
Organizacin del problema en un rbol de bsqueda
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Construir la solucin al problema en distintas etapas.
En cada paso se elige un candidato y se aade a la solucin, y
se avanza en la solucin parcial.
Si no es posible continuar en la construccin hacia una
solucin completa, se abandona sta y la ltima componente
se cambia por otro valor.
Si no quedan ms valores por probar, se retrocede al candidato
anterior, se desecha, y se selecciona otro candidato.
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Bsqueda en el rbol de estados
Ejemplo para una terna, X
1
{0, 1, 2}, X
2
{0, 1}, X
3
{0, 1}
XXX

.j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j
j

T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
T
0XX

7
7
7
7
7
7
7

1XX

7
7
7
7
7
7
7

2XX

7
7
7
7
7
7
7

00X

01X

10X

11X

20X

21X

000 001 010 011 100 101 110 111 200 201 210 211
Gabriel Navarro Teora de Algoritmos
Diseo de la tcnica
Para disear un algoritmo con la tcnica backtracking, debemos
seguir los siguientes pasos:
Buscar una representacin del tipo (X
1
, X
2
, . . . , X
n
) para las
soluciones del problema
Identicar las restricciones implcitas y explcitas del
problema
Establecer la organizacin del rbol que dene los
diferentes estados en los que se encuentra una (sub)solucin
Denir una funcin solucin para determinar si una tupla es
solucin
Denir una funcin de poda B
k
(X
1
, X
2
, . . . , X
k
) para
eliminar ramas del rbol que puedan derivar en soluciones poco
deseables o inadeciadas
Aplicar la estructura genrica de un algoritmo backtracking
Gabriel Navarro Teora de Algoritmos
Diseo de la tcnica
solucion[i]S
i
para i=1,2,...,n
(Algoritmo genrico backtracking)
funcion BACKTRACKING_REC ( k , solucion[n])
para jS
i
si ( PODA (k , j , solucion) == true ) hacer
sol[k]= j
si ( TEST_SOL (solucion) == true ) hacer
devolver solucion
si ( k < n )
BACKTRACKING_REC(k+1,solucion[n])
Gabriel Navarro Teora de Algoritmos
Eciencia
La eciencia en un algoritmo backtracking suele ser de tipo
exponencial a
n
depende de la ramicacin del rbol
del tiempo de ejecucin de la funcin solucin
del tiempo de ejecucin de la funcin poda
del ahorro de utilizar la poda
Nota: las buenas funciones de poda no son muy ecientes
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
Supongamos que tenemos un tablero de ajedrez:
Podemos colocar 8 reinas sin que se amenacen?
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
Recordemos que las reinas se mueven por el tablero
cualquier nmero de casillas en horizontal
cualquier nmero de casillas en vertical
cualquier nmero de casillas en diagonal
'&%$ !"#
R







?
?
?
?
?
?
?
?
?
?





entonces no puede haber dos reinas
en la misma la
en la misma columna
en la misma diagonal
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
Una solucin al problema
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
(Problema)
Dado un tablero (cuadrado) con n casillas de lado, podemos
colocar n reinas en el tablero sin que se amenacen?
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
Elementos de la tcnica backtracking:
Representacin del problema. En n-tuplas (x
1
, x
2
, . . . , x
n
),
donde x
i
es la la donde est la reina de la columna i
Restricciones implicitas. Las componentes x
i
{1, 2, . . . , n}
Restricciones explicitas. No puede haber dos reinas en la
misma la, columna y diagonal
rbol de estados. En el nivel i se obtiene la posicin de la
reina i
Funcin objetivo. La n-tupla est completa y cumple las
restricciones.
Funcin poda. Dada por las restricciones explicitas
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
k= columna (la reina de la columna k)
(Funcin de poda)
funcion PODA ( k , sol[n] )
para (j=1) hasta (j=k-1)
si (sol[j]==sol[k]) //misma fila
devolver false
si (sol[j]-sol[k]==j-k) //misma diagonal
devolver false
si (sol[j]-sol[k]==k-j) //misma diagonal
devolver false
devolver true
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
(Problema de las n reinas)
funcion REINAS ( k, n , solucion[n] )
para (i=1) hasta (i=n)
solucion[k]=i
si ( PODA (k, solucion)== true )
si ( k==n )
devolver solucion
sino
REINAS ( k+1, n , solucion[n] )
La solucin vendr de REINAS (1, n, solucion[n])
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de las n reinas
(Ejercicio)
Implementar en C++ el problema de las n reinas y utilizarlo para
calcular la solucin de las 4, 8, 16, 32 y 64 reinas.
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
Supongamos una cuadricula 3x3 con nmeros del 0 al 8 (sin repetir)
2 3 8
0 1 7
6 5 4
Podemos llevar esta conguracin a una ordenada?
0 1 2
3 4 5
6 7 8
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
Existen cuatro movimientos permitidos
1 Intercambiar el cero con la casilla superior
2 3 8
0 1 7
6 5 4

0 3 8
2 1 7
6 5 4
2 Intercambiar el cero con la casilla inferior
2 3 8
0 1 7
6 5 4

2 3 8
6 1 7
0 5 4
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
Existen cuatro movimientos permitidos
3 Intercambiar el cero con la casilla situada a la derecha
2 3 8
0 1 7
6 5 4

2 3 8
1 0 7
6 5 4
4 Intercambiar el cero con la casilla situada a la izquierda
2 3 8
7 1 0
6 5 4

0 3 8
7 0 1
6 5 4
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
Utilizando estos movimientos no siempre es posible llegar a
0 1 2
3 4 5
6 7 8
(Teorema)
Dada una conguracin del 8-puzle, siempre podemos llegar a
0 1 2
3 4 5
6 7 8
o bien, a
0 3 6
1 4 7
2 5 8
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
En general, podemos plantearnos el problema del n-puzle, donde
n = t
2
1 para t un entero que dos
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
Elementos de la tcnica backtraking:
1=izquierda, 2=derecha, 3=arriba, 4=abajo
Representacin del problema. En n-tuplas (x
1
, x
2
, . . . , x
n
),
donde x
i
es el movimiento i -simo.
Restricciones implicitas. Las componentes x
i
{1, 2, 3, 4}
Restricciones explicitas. No hay
rbol de estados. En el nivel i se obtiene el movimiento
i -simo
Funcin objetivo. Determina si con los movimientos
realizados la matriz es igual a una de las matrices objetivo.
Funcin poda. Poda por profundidad, slo se permiten cierto
nmero de movimientos
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema del n-puzle
k= movimiento actual (k-simo)
n= nmero mximo de movimientos
(Problema del n-puzle)
funcion PUZLE ( k , solucion[n] )
si ( TEST_SOLUCION ( solucion )== true )
devolver solucion
si (k < n) // funcion de poda
para (i=1) hasta (i=4)
solucion[k] = i
PUZLE (k+1, solucion )
devolver "No encuentro solucion"
La solucion viene dada por PUZLE (1, {0,0,...,0} )
Gabriel Navarro Teora de Algoritmos
Ejemplo: el problema de la mochila
Supongamos la siguiente situacin:
1
tenemos una mochila cuyo peso mximo de carga es M
2
una serie de objetos a transportar 1, 2, , n donde:
el objeto i tiene un peso p
i
el objeto i tiene un valor v
i
(Pregunta)
Cmo podemos llenar la mochila (respetando el lmite de peso)
para maximizar el valor de la carga ?
Gabriel Navarro Teora de Algoritmos
Ejemplo: problema de la mochila
Dos variantes:
1
Variante A. Los objetos son indivisibles, esto es, no se
pueden romper para meter un trozo en la mochila.
2
Variante B. Los objetos se pueden dividir en partes ms
pequeas, con peso y valor proporcional al original.
para la tcnica backtraking, consideramos la Variante A
Gabriel Navarro Teora de Algoritmos
Ejemplo: problema de la mochila
Elementos del algoritmo:
Cada tupla solucin solucion[n], con valores {0, 1} en
cada componente. Indican si se lleva el objeto i en cada caso.
Organizacin del rbol de estados. En cada nivel i del rbol
seleccionamos (o no) llevar el objeto i .
Funcin objetivo. Encontrar alguna solucin ptima al
problema de la mochila.
Restricciones implcitas. Cada elemento de la tupla solucin
slo podr tener los valores 0 1.
Restricciones explcitas. La suma del peso de todos los
objetos no debe ser superior a M.
Funcin de Poda. Un nodo no ser explorado si el peso del
objeto asociado a tal nodo, aadido a la mochila, supera la
capacidad mxima de sta.
Gabriel Navarro Teora de Algoritmos
Ejemplo: problema de la mochila
funcion BENEFICIO ( k , solucion[n], valor[n] )
suma=0;
para (i=1) hasta (i=k)
suma = suma+valor[i]*solucion[i]
devolver suma
(Funcin de Poda)
funcion PODA ( k , solucion[n], peso[n] )
si (BENEFICIO (k, solucion, peso) > M )
devolver false
devolver true
Gabriel Navarro Teora de Algoritmos
Ejemplo: problema de la mochila
(Problema de la mochila)
funcion MOCHILA (k,sol[n],peso[n],valor[n],valor_max)
solucion[k]= 0
si (k < n)
MOCHILA (k+1,sol,peso,valor,valor_max)
solucion[k]= 1
si (PODA (k,sol,peso) == true)
si ( BENEFICIO(k,sol,valor) > valor_max)
valor_max=BENEFICIO(k,sol,valor)
si (k < n)
MOCHILA (k+1,sol,peso,valor,valor_max)
devolver valor_max
Gabriel Navarro Teora de Algoritmos
Ejemplo: suma de subconjuntos
Supongamos que tenemos:
un conjunto de enteros no negativos X = {x
1
, . . . , x
n
}
un entero M
(Problema)
Calcular qu subconjuntos de X suman exactamente M
Gabriel Navarro Teora de Algoritmos
Ejemplo: suma de subconjuntos
(Ejemplo)
Supongamos que X = {2, 3, 5, 10, 20} y M = 15, entonces existen
dos soluciones posibles:
x
1
= 2, x
2
= 3 y x
4
= 10
x
3
= 5 y x
4
= 10
Gabriel Navarro Teora de Algoritmos
Ejemplo: suma de subconjuntos
Elementos del algoritmo:
Cada tupla solucin solucion[n], con valores {0, 1} en cada
componente. Indican si se considera el entero i en cada caso.
Organizacin del rbol de estados. En cada nivel i del rbol
seleccionamos (o no) el entero i .
Funcin objetivo. Determina si la suma de los enteros
seleccionados es M.
Restricciones implcitas. Cada elemento de la tupla solucin
slo podr tener los valores 0 1.
Restricciones explcitas. La suma de los enteros
seleccionados es M.
Gabriel Navarro Teora de Algoritmos
Ejemplo: suma de subconjuntos
Supuesto que ordenamos los enteros de menor a mayor:
Funcin de Poda. La funcin de poda tendr en cuenta dos
condiciones. Si estamos en la etapa k y

k
i =1
v
i
x
i
+

n
i =k+1
v
i
< M entonces podamos la rama (an
considerando todos los enteros restantes no llegamos a M)

k
i =1
v
i
x
i
+ v
k+1
> M entonces podamos la rama (nos
pasamos con el entero restante ms pequeo)
Gabriel Navarro Teora de Algoritmos
Ejemplo: suma de subconjuntos
(Funcin de poda)
funcion PODA ( k , solucion[n], enteros[n] )
suma=0; suma2=0
para (i=0) hasta (i=k-1)
suma=suma + enteros[i]*solucion[i]
para (i=k) hasta (i=n)
suma2=suma2 + enteros[i]
si ( suma + enteros[k] > M )
devolver false
si ( suma + suma2 < M )
devolver false
devolver true
Gabriel Navarro Teora de Algoritmos
Ejemplo: suma de subconjuntos
solucion[][n] // donde acumular las soluciones
j=0
(suma de subconjuntos)
funcion SUMA ( k , eleccion[n] , enteros[n] )
eleccion[k]=0
si ( k < n && PODA (k, eleccion, enteros)==true )
SUMA ( k+1 , eleccion , enteros )
eleccion[k]=1
si ( TEST_SOLUCION ( eleccion )== true )
solucion[j] = eleccion
j=j+1
si ( k < n && PODA (k, eleccion, enteros)==true )
SUMA ( k+1 , eleccion , enteros )
devolver solucion
Gabriel Navarro Teora de Algoritmos
Ejemplo: colorear un grafo
(Problema)
Dado un grafo no dirigido, cul es el nmero mnimo de colores
que tenemos que utilizar para colorearlo de manera que dos vrtices
adyacentes no compartan el mismo color?
(Problema)
Dado un grafo no dirigido, cul es su nmero cromtico?
5 6
1 2
3 4
Gabriel Navarro Teora de Algoritmos
Ejemplo: colorear un grafo
Elementos del algoritmo:
Para un grafo con n vrtices y k colores
Cada tupla solucin, con valores {1, 2, . . . , k} en cada
componente. Indican con qu color est coloreado cada
vrtices.
Organizacin del rbol de estados. En cada nivel i del rbol
coloreamos el vrtice i .
Funcin objetivo. Determina el nmero mnimo de colores.
Restricciones implcitas. Cada elemento de la tupla toma
valores en {1, 2, . . . , k}.
Restricciones explcitas. No puede haber dos vrtices
adyacentes con el mismo valor.
Funcin de poda. Determina si hay dos vrtices adyacentes
con el mismo color
Gabriel Navarro Teora de Algoritmos
Ejemplo: colorear un grafo
Implementar en C++ el algoritmo backtraking para resolver el
problema de colorear un grafo
Gabriel Navarro Teora de Algoritmos

También podría gustarte