Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sesión 09 - Algoritmos de Retroceso
Sesión 09 - Algoritmos de Retroceso
Algoritmos de retroceso
Retroceso o Backtracking
Inicio
x1=0 x1=1
Inicio
x1=0 x1=1
2 9
x2 0 1 0 1
3 6 10 13
x3 0 1 0 1 0 1 0 1
4 5 7 8 11 12 14 15
Ejemplo
2 9
0 1 0 1 k=2 (11)
3 6 10 13
0 1 0 1 0 1 0 1 k=3 (7)
4 5 7 8 11 12 14 15
Sumas
0 7 11 18 13 20 24 31 totales
Ejemplo – Posibilidad 1
Árbol de 0 1
soluciones 2 1 3 k=1
2
13 2 11 6 7 8
2 3 3 k=2
24 18
3 20 5 7
3
k=3
31 4
Ejemplo – Posibilidad 2
Árboles binarios.
Árboles n-arios.
Árboles permutacionales.
Árboles combinatorios.
Árboles binarios
s= (x1, x2, ..., xn), con xi {0, 1}
x1 1
0 1
2 5
x2 0 1 0 1
3 4 6 7
2 6 10
x2 1 3 1 3 1 3
2 2 2
3 4 5 7 8 9 11 12 13
3 5 7 9 12 14
3 2 3 1 2 1 x3
4 6 8 10 13 15
1
1 3 x1
2
2 6 8
2 3
3 x2
3 5 7
3
x3
4
Variables:
s: Almacena la solución parcial hasta cierto punto.
sINICIAL: Valor de inicialización.
nivel: Indica el nivel actual en el que se encuentra el algoritmo.
fin: Valdrá verdadero cuando hayamos encontrado alguna
solución.
Funciones:
Generar (nivel, s): Genera el siguiente hermano (o el primero)
para el nivel actual.
Solución (nivel, s): Comprueba si la tupla (s[1], ..., s[nivel]) es
una solución válida para el problema.
Método general
Variables:
Representación de la solución con un árbol binario.
s: array [1..n] de {-1, 0, 1}
s[i] = 0 el número i-ésimo no se utiliza
s[i] = 1 el número i-ésimo sí se utiliza
s[i] = -1 valor de inicialización (número i-ésimo
no estudiado)
sINICIAL: (-1, -1, ..., -1)
fin: Valdrá verdadero cuando se haya encontrado
solución.
tact: Suma acumulada hasta ahora (inicialmente 0).
Subconjuntos de suma dada
Funciones:
Generar (nivel, s)
s[nivel] s[nivel] + 1
Si s[nivel] =1 entonces
tact tact + t[nivel]
Fin Si
Solución (nivel, s)
devolver (nivel = n) Y (tact = P)
Criterio (nivel, s)
devolver (nivel<n) Y (tact≤P)
MasHermanos (nivel, s)
devolver s[nivel] < 1
Subconjuntos de suma dada
Retroceder (nivel, s)
Si s[nivel] =1 entonces
tact tact - t[nivel]
Fin Si
s[nivel]:= -1
nivel:= nivel – 1
Subconjuntos de suma dada
Método Clase.Backtracking (var s: TuplaSolución)
nivel 1
s sINICIAL
fin falso
Hacer
Generar (nivel, s)
si Solución (nivel, s) entonces
fin verdadero
sino
Si Criterio (nivel, s) entonces
nivel nivel + 1
sino
mientras NO MasHermanos (nivel, s) hacer
Retroceder (nivel, s)
fin Mientras
Fin Si
Fin si
Mientras fin = falso
Fin Método
Subconjuntos de suma dada
Formulación matemática:
Maximizar xi bi sujeto a la restricción xi pi ≤ M, y xi{0,1}
i=1..n i=1..n
Problema de la mochila 0/1
Ejemplo: n = 4; M = 7
b = (2, 3, 4, 5)
p = (1, 2, 3, 4) 4 kg
3 kg
7 Kg. 2 kg
Ejemplo: n = 2; M = 100
b = (2, 190)
p = (1, 100)
100 kg
100 Kg. 1 kg
PVP 2 PVP 190
xi = 0 No se coge el objeto i
xi = 1 Sí se coge el objeto i
xi = -1 Objeto i no estudiado
1 x1
En cada nivel i se prueba 0 1
la posibilidad de incluir
2 9
o no el objeto i 0 x2
1 0 1
Las soluciones
están en nivel n 3 6 10 13
x3
0 0 1 1
1 1 0 0
4 5 7 8 11 12 14 15
Problema de la mochila 0/1
1. Representación de la solución.
También es posible usar un árbol combinatorio:
s= (x1, x2, ..., xm), con m ≤ n, xi {1,..,n} y xi < xi+1
xi Número de objeto escogido
m Número total de objetos escogidos
Las soluciones están en cualquier nivel
1
1 3 x1
2
2 6 8
2 3
3 x2
3 5 7
3
x3
4
Problema de la mochila 0/1
Ejemplo: n = 4; M = 7; 1 x1
0 1
b = (2, 3, 4, 5)
2 17
p = (1, 2, 3, 4) x2
0 1 0 1
3 10 18 25
x3
0 0 1 1
1 1 0 0
4 7 11 14 19 22 26 29
0 1 x4
1 1
0 1 0 1 0 1 0 1 0 1 0 0
5 6 8 9 12 13 15 16 20 21 23 24 27 28 30 31
pact: 0 4 7 9 8 7 10
bact: 0 5 9 12 11 10 14
Problema de la mochila 0/1