Backtracking
Lezione n°13
Prof.ssa Rossella Petreschi
Lezione del 21 /11/ 2011 del
Corso di Algoritmi e Strutture Dati
Riferimenti:
capitolo 11 del testo Anany Levitin “The design and analysis of algorithms”
Edizioni: Addison Wesley
paragrafo 2.2.1 del testo Ausiello,Petreschi “L’Informatica Invisibile”
Edizioni: Mondadori Sapienza
ASD-A.A.2011/2012
Il metodo
Quando si applica:
• Ricercare un insieme di soluzioni
in genere la soluzione è esprimibile come t-pla (x1,x2,…xn) con xi in un insieme finito Si
• Ricercare una soluzione ottima soddisfacente alcuni vincoli
ovvero massimizare (o minimizzare) una funzione P (x1,x2,…xn)
Esempio:
• Problema: ordinare un vettore a di n interi
• Soluzione: esprimibile come t-pla (xi è l’indice in a dell’i-esimo elemento più piccolo)
• La funzione P è la diseguaglianza a(xi) ≤ a(xi+1), 1≤i<n
L’ordinamento non è un problema che si risolve normalmente con il backtracking,
ma è un tipico problema la cui soluzione è una t-pla.
ASD-A.A.2011/2012
Forza Bruta vs Backtrack
Forza Bruta:
• Genera tutte le t-ple m1,m2,…mk
• Per ogni t-pla verifica se soddisfa la funzione P (x1,x2,…xn)
• Salva le t-ple che rappresentano la soluzione ottima
Backtrack:
• Costruisce i vettori soluzione una componente alla volta
• All’i-esimo passo, confronta il sottovettore v= (x1,x2,…xi) con la funzione
parziale P (x1,x2,…xi) per vedere se c’è una possibilità che v diventi sottovettore di
una soluzione ottima.Se questa possibilità non c’è interrompi la costruzione di
quell’ipotesi di soluzione.
Backtrack riduce il numero di test da fare per trovare le soluzioni ottime.
ASD-A.A.2011/2012
Vincoli
Vincoli espiciti:
Sono regole che restringono xi a prendere valori in un intervallo
limitato e dipendono dalla particolare istanza I del problema
considerato. Lo spazio delle soluzioni per I è costituito da tutte le t-ple
che soddisfano i vincoli espliciti
Esempi: xi ≤ 0; li ≤ xi≤ ri ; xi in Si ={0.1}
Vincoli impliciti:
Sono regole che stabiliscono quali fra le t-ple nello spazio delle
soluzioni di I soddisfano la funzione P; un vincolo implicito esprime il
modo in cui le variabili xidebbono correlarsi.
ASD-A.A.2011/2012
Il problema delle 8 regine
Come disporre otto regine su una scacchiera (8×8) in modo tale che nessuna possa
mangiarne un’altra?
REGOLE: la regina si può muovere in orizzontale, in verticale e in diagonale di un
qualunque numero di caselle, di conseguenza ogni regina deve avere la propria riga, la
propria colonna e le proprie diagonali libere.
Le dodici soluzioni base del problema delle 8 regine da cui, per riflessione e rotazione, si
ottengono tutte le 92 soluzioni (1874, Gleisher e Gunther)
15863724
17582463
25741863
27368514
16837425
24683175
26174835
27581463
17468253
25713864
26831475
28613574
ASD-A.A.2011/2012
Una soluzione
15863724
ASD-A.A.2011/2012
Esempio (4x4)
ASD-A.A.2011/2012
Esempio (4x4)
ASD-A.A.2011/2012
Il metodo in generale
Un algoritmo di backtracking è un metodo di analisi esaustiva, ma
controllata, applicabile ad una classe di problemi di ricerca le cui
soluzioni sono vettori (x1 x2 … xi …xf), 1≤f≤n, soddisfacenti alcuni
vincoli predefiniti.
Ogni xi appartiene ad un insieme finito linearmente ordinato Xi.
Un algoritmo di backtracking genera, esplicitamente o
implicitamente, un albero i cui nodi rappresentano t-ple parzialmente
costruite durante i vari passi dell’algoritmo.
La radice contiene la t-pla vuota.
ASD-A.A.2011/2012
Dalla t-pla j-esima alla j+1-esima
A partire dalla t-pla j-esima w = (x1 x2 … xj) , si genera la t-pla (j+1)-esima v = (x1 x2 …
xj+1) con xj+1 primo elemento in Xj+1 non ancora considerato.
Si ha:
1.
v è una soluzione finale del problema: la soluzione viene memorizzata (termina se
una soluzione è sufficiente)
2.
v è una soluzione parziale del problema: l’algoritmo passa dalla t-pla j+1-esima
alla t-pla j+2-esima
3.
v non è né soluzione finale né soluzione parziale:
- se vi sono ancora elementi da scegliere in Xj+1, si prende il primo disponibile
come nuovo xj+1 e si torna al passo 1;
- se non vi sono più elementi da scegliere in Xj+1, ,si torna alla t-pla j-esima, si
sostituisce xj con il primo elemento elegibile in Xj e si torna al passo 1. Se ancora
non vi sono più elementi da scegliere, si torna alla t-pla (j-1)-esima e si sostituisce
xj-1, se possibile.
ASD-A.A.2011/2012
Backtrack per le 8 regine
Vincoli espliciti:
Si ={1,2,3,4,5,6,7,8}
1≤ i≤ 8
Conseguentemente lo spazio delle soluzioni è di 88 8-ple
Vincoli impliciti:
•Tutte le regine debbono essere in colonne differenti
Conseguentemente lo spazio delle soluzioni è costituito da tutte le permutazioni
delle 8-ple {1,2,3,4,5,6,7,8} e quindi è ridotto da 88 a 8!
•Tutte le regine debbono essere in diagonali differenti
ASD-A.A.2011/2012
Regine sulle stesse diagonali
La scacchiera S è rappresentata da una matrice quadrata di dimensioni nxn. Le righe e le colonne sono
numerate da 1ad n. si considerino due regine nelle posizioni (i,j) e (k,l), rispettivamente.
•Tutte le diagonali dall’alto a sinistra verso in basso a destra mantengono costante
numero colonna - numero riga
per esempio S[2,1], S[3,2], S[4,3] hanno 1 quale valore costante pari alla differenza fra numero di riga e
numero di colonna.
•Tutte le diagonali dall’alto a destra verso in basso a sinistra mantengono costante
numero colonna + numero riga
per esempio S[2,4], S[3,3], S[4,2] hanno 6 quale valore costante pari alla somma fra numero di riga e
numero di colonna.
Quindi due regine sono sulla stessa diagonale sess j-l =i-k
Dato che vale o
(1) i-j = k-l o (2) i+j = k+l
Dalla (1) si ha j-l = i-k e dalla (2) si ha j-l = k-i
ASD-A.A.2011/2012
Controllo del posizionamento
PLACE(k,i) ritorna vero o falso a seconda che la k-esima regina possa essere
posizionata nella k-esima riga e i-esima colonna o no
PLACE(k,i)
For j=1 to k-1 do
If x[j] = i or j-l=i-k then return false;
return true;
ASD-A.A.2011/2012
Algoritmo n-regine
ALGORITMO n-regine(k,n) stampa tutte i possibili posizionamenti senza conflitto
di n regine su una scacchiera nxn
Algoritmo N-regine(k,n)
For i=1 to n do
if PLACE(k,i) then
x[k] = i;
if k=n then write x[1…n];
else N-regine(k+1,n);
ASD-A.A.2011/2012
Somma di sottoinsiemi
INPUT: m>0 , wi>0 (1≤i≤n)
PROBLEMA: trovare tutti i sottoinsiemi di wi la cui somma è uguale ad m
ESEMPIO: dati (w1w2 w3 w4 ) = (11,13,24,7) e m =31, i sottoinsiemi cercati sono
(11,13,7) e (24,7)
Queste due soluzioni si possono indicare come t-ple:
a. xi = indici dei wi scelti (1,2,4) e (3,4), ovvero con t-ple di diversa dimensione;
b. xi = 1 / 0 a seconda che wi sia stato selezionato o no (1,1,0,1) e (0,0,1,1), in questo caso
le t-ple sono di dimensione fissata uguale ad n.
VINCOLI ESPLICITI:
a. xi in j/ j intero, 1≤j≤k e 1≤k≤n
b. xi in 0,1
VINCOLI IMPLICITI:
a. xi ≠ xj e xi ≤ xi+1 per 1≤ i <k e 1≤j≤k
b. ∑wixi ≤ m 1≤ i <k, 1≤k≤n
SPAZIO DELLE SOLUZIONI:
2n t-ple distinte
ASD-A.A.2011/2012
Funzione soglia per somma di sottoinsiemi
INPUT: m>0 , wi>0 (1≤i≤n)
1. wi in ordine casuale
2. wi ordinate in modo non decrescente
PROBLEMA:
trovare tutti i sottoinsiemi di wi la cui somma è uguale ad m
RAPPRESENTAZIONE: con t-ple di uguale dimensione
FUNZIONE SOGLIA:
1. ∑wixi+∑wj ≥ m
2. ∑wixi + wk+1 > m
1≤i≤k e k+1≤j≤n
1≤i≤k
ASD-A.A.2011/2012