Académique Documents
Professionnel Documents
Culture Documents
Contenidos
1 Introducción
2 Árboles de búsqueda
3 N reinas
4 Otros problemas
5 Ramificación y poda
6 Poda alfa-beta
7 Esquemas generales
URJC DAA 2 / 67
Backtracking Introducción
Introducción
URJC DAA 3 / 67
Backtracking Introducción
Ejemplo - 4 reinas
URJC DAA 5 / 67
Backtracking Árboles de búsqueda
Árboles de búsqueda
URJC DAA 6 / 67
Backtracking Árboles de búsqueda
Permutaciones de {a, b, c}
a c
b
b c a c a b
c b c a b a
URJC DAA 7 / 67
Backtracking Árboles de búsqueda
Permutaciones de {a, b, c}
primer a c
b 3 llamadas
elemento
segundo
b c a c a b 2 llamadas
elemento
tercer
c b c a b a 1 llamada
elemento
URJC DAA 8 / 67
Backtracking Árboles de búsqueda
Permutaciones de {a, b, c}
URJC DAA 9 / 67
Backtracking Árboles de búsqueda
Implementación - I
URJC DAA 10 / 67
Backtracking Árboles de búsqueda
Implementación - II
Partes de {a, b, c}
Solución - árbol binario
0 1
0 1 0 1
0 1 0 1 0 1 0 1
URJC DAA 12 / 67
Backtracking Árboles de búsqueda
Partes de {a, b, c}
Solución - árbol binario
se incluye: a 0 1
se incluye: b 0 1 0 1
se incluye: c 0 1 0 1 0 1 0 1
URJC DAA 13 / 67
Backtracking Árboles de búsqueda
Partes de {a, b, c}
Solución - árbol binario
Árbol binario
URJC DAA 14 / 67
Backtracking Árboles de búsqueda
Implementación - I
Solución - árbol binario
URJC DAA 15 / 67
Backtracking Árboles de búsqueda
Implementación - II
Solución - árbol binario
Partes de {a, b, c}
Solución - subconjunto en cada nodo
{}
a c
b
b c c
{a,b,c}
URJC DAA 17 / 67
Backtracking Árboles de búsqueda
Partes de {a, b, c}
Solución - subconjunto en cada nodo
{}
0 elementos
a c
b
{a,b,c}
3 elementos
Partes de {a, b, c}
Solución - subconjunto en cada nodo
Crea un vector con los ı́ndices de los elementos que se van incluyendo
[0, 2] = {a, c}
URJC DAA 19 / 67
Backtracking Árboles de búsqueda
Partes de {a, b, c}
Solución - subconjunto en cada nodo
-1
0 2 j
1
URJC DAA 20 / 67
Backtracking Árboles de búsqueda
Implementación - I
Solución - subconjunto en cada nodo
URJC DAA 21 / 67
Backtracking Árboles de búsqueda
Implementación - II
Solución - subconjunto en cada nodo
N reinas
URJC DAA 23 / 67
Backtracking N reinas
N reinas
Problema de las N reinas
Dado un “tablero ajedrez” de n × n celdas, se pide ubicar n reinas de
modo que no se amenacen
No pueden estar en la misma fila
No pueden estar en la misma columna
No pueden estar en la misma diagonal (principal o secundaria)
URJC DAA 24 / 67
Backtracking N reinas
8 reinas
N reinas
URJC DAA 26 / 67
Backtracking N reinas
N reinas
URJC DAA 27 / 67
Backtracking N reinas
N reinas
Formato de la solución:
(fila de la columna 1, fila de la columna 2,. . . ,fila de la columna n)
(2, 4, 1, 3) en la figura
Todas las filas son diferentes y tienen que estar representadas
Tendremos que buscar las permutaciones válidas
URJC DAA 28 / 67
Backtracking N reinas
1 4
2 3
2 4 1 4 1 4 1 3
3 3 2 2
3 4 2 4 2 3 3 4 1 4 1 3 2 4 1 4 1 2 2 3 1 3 1 2
4 3 4 2 3 2 4 3 4 1 3 1 4 2 4 1 2 1 3 2 3 1 2 1
URJC DAA 29 / 67
Backtracking N reinas
1 2
2 4 1 4
3 3
2 4 2 3 1
3 3
URJC DAA 30 / 67
Backtracking N reinas
1 4
2 3
2 4 1 4 1 4 1 3
3 3 2 2
3 4 2 4 2 3 3 4 1 4 1 3 2 4 1 4 1 2 2 3 1 3 1 2
4 3 4 2 3 2 4 3 4 1 3 1 4 2 4 1 2 1 3 2 3 1 2 1
URJC DAA 31 / 67
Backtracking N reinas
Implementación
f c-f+n-1 c+f
0
1 6 0
2 5 1
3 4 2
0 1 2 3 3 4 5 6
diagonales diagonales
filas
principales secundarias
Implementación - I
URJC DAA 33 / 67
Backtracking N reinas
Implementación - II
URJC DAA 34 / 67
Backtracking N reinas
Implementación - III
URJC DAA 35 / 67
Backtracking Otros problemas
Otros problemas
URJC DAA 36 / 67
Backtracking Otros problemas
Salto de caballo
No es requisito que pueda volver al punto de partida
1 14 9 20 23
10 19 22 15 8
5 2 13 24 21
18 11 4 7 16
3 6 17 12 25
URJC DAA 37 / 67
Backtracking Otros problemas
Salto de caballo
Árbol de búsqueda
0 1 2 3 4
(fila = 3, columna = 3)
Implementación - I
URJC DAA 39 / 67
Backtracking Otros problemas
Implementación - II
URJC DAA 40 / 67
Backtracking Otros problemas
Laberinto
laberinto solución
(0,0)
(n-1, n-1)
URJC DAA 41 / 67
Backtracking Otros problemas
Laberinto
Árbol de búsqueda
1,1
fila , columna
2,1 1,2
3,1 2,2
No se debe hallar una permutación (el camino puede tener duración variable)
No se debe hallar un subconjunto de celdas (el orden importa)
URJC DAA 42 / 67
Backtracking Otros problemas
Implementación - I
URJC DAA 43 / 67
Backtracking Otros problemas
Implementación - II
URJC DAA 44 / 67
Backtracking Otros problemas
Suma de subconjuntos
Problema de la suma de subconjuntos
Dada una lista L de números no negativos y otro número s, determinar los
subconjuntos de L que suman s
13 = 6 + 7
13 = 2 + 5 + 6
1 2 3 5 6 7 9 13 13 = 1 + 5 + 7
13 = 1 + 3 + 9
L s 13 = 1 + 2 + 3 + 7
URJC DAA 45 / 67
Backtracking Otros problemas
Suma de subconjuntos
0
+2?
0 2
+7?
0 7 2 9
+3?
0 3 7 10 2 5
+5?
12 10
0 5 3 8 7 2 7 5
3+5
URJC DAA 46 / 67
Backtracking Otros problemas
Implementación - I
URJC DAA 47 / 67
Backtracking Otros problemas
Implementación - II
URJC DAA 48 / 67
Backtracking Otros problemas
p1
p2
p3
C
URJC DAA 49 / 67
Backtracking Otros problemas
Mochila 0-1
Árbol de búsqueda
pesos = (3, 6, 9, 5), beneficios = (7, 2, 10, 4), capacidad = 15
(15, 0)
0 1
(15, 0) (12, 7)
0 1 0 1
0 1 0 1 0 1 0 1
(15, 0) (6, 10) (9, 2) (0, 12) (12, 7) (3, 17) (6, 9) (-3, 19)
0 1 0 1 0 1 0 1 0 1 0 1 0 1
(15, 0) (10, 4) (6, 10) (1, 14) (9, 2) (4, 6) (0, 12) (-5, 16) (12, 7) (7, 11) (3, 17) (-2, 21) (6, 9) (1, 13)
beneficio óptimo
URJC DAA 50 / 67
Backtracking Otros problemas
Implementación - I
URJC DAA 51 / 67
Backtracking Otros problemas
Implementación - II
URJC DAA 52 / 67
Backtracking Ramificación y poda
Ramificación y poda
URJC DAA 53 / 67
Backtracking Ramificación y poda
Ramificación y poda
URJC DAA 54 / 67
Backtracking Ramificación y poda
0 (23)
bs[1] -7 +7
0 (16) 7 (23)
bs[2] -2 +2 -2 +2
bs[3] - 10 + 10 - 10 + 10 - 10 + 10 - 10
12 < 14
URJC DAA 55 / 67
Backtracking Ramificación y poda
Implementación - I
URJC DAA 56 / 67
Backtracking Ramificación y poda
Implementación - II
URJC DAA 57 / 67
Backtracking Poda alfa-beta
Poda alfa-beta
URJC DAA 58 / 67
Backtracking Poda alfa-beta
Poda alfa-beta
Algoritmo minimax
Se utiliza en juegos de estrategia entre adversarios (p.e., ajedrez)
Cada jugador toma turnos
Se evalúa una función numérica acerca de la situación
Jaque-mate a favor (∞), en contra (−∞), comer reina contraria (valor
muy alto), etc.
Poda alfa-beta
Estrategia de búsqueda para reducir el número de nodos evaluados por
el algoritmo minimax
URJC DAA 59 / 67
Backtracking Poda alfa-beta
Poda alfa-beta
α = cota inferior de los máximos
β = cota superior de los mı́nimos
Se poda si β ≤ α
Se conocen valores heurı́sticos de los nodos hoja
a = alpha
1 máx
b = beta
a=1
b=1
1 -3 min
a=1
b=1 a=1
1 4 -3
b=INF
6 máx
a=1 a=1
b=0 b=-2
1 -3 2 4 -3 -4 6 -2 -5 mín
2 1 0 -3 3 2 4 5 -2 -3 6 7 8 máx
URJC DAA 60 / 67
Backtracking Poda alfa-beta
1 alfabeta(nodo, n, a, b, jugador)
2 si (n=0) o si el nodo es una hoja
3 devuelve el valor heurı́stico del nodo
4 si jugador = jugadorMax
5 para cada hijo del nodo
6 a := max(a, alfabeta(hijo, n-1, a, b, not(jugador) ))
7 si b=a
8 break (* Poda Beta *)
9 devuelve a
10 en caso contrario
11 para cada hijo del nodo
12 b := min(b, alfabeta(hijo, n-1, a, b, not(jugador) ))
13 si b=a
14 break (* Poda Alfa *)
15 devuelve b
16
17 (* Llamada inicial *)
18 n := profundidad del árbol
19 alfabeta(nodo origen, n, -infinito, +infinito, jugadorMax)
URJC DAA 61 / 67
Backtracking Esquemas generales
Esquemas generales
URJC DAA 62 / 67
Backtracking Esquemas generales
URJC DAA 63 / 67
Backtracking Esquemas generales
URJC DAA 64 / 67
Backtracking Esquemas generales
URJC DAA 66 / 67
Backtracking Esquemas generales
URJC DAA 67 / 67