La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.

Presentazioni simili


Presentazione sul tema: "Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design."— Transcript della presentazione:

1 Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design and analysis of algorithms” Edizioni: Addison Wesley Capitolo 2 del testo Ausiello,Petreschi “L’Informatica Invisibile” Edizioni: Mondadori Sapienza Backtracking Lezione n°18

2 Il metodo Quando si applica: Ricercare un insieme di soluzioni in genere la soluzione è esprimibile come t-pla (x 1,x 2,…x n ) con x i in un insieme finito S i Ricercare una soluzione ottima soddisfacente alcuni vincoli ovvero massimizare (o minimizzare) una funzione P (x 1,x 2,…x n ) Esempio: Problema: ordinare un vettore a di n interi Soluzione: esprimibile come t-pla ( x i è l’indice in a dell’i-esimo elemento più piccolo ) La funzione P è la diseguaglianza a( x i ) ≤ a( x i+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.

3 Forza Bruta vs Backtrack Forza Bruta: Genera tutte le t-ple m 1,m 2,…m k Per ogni t-pla verifica se soddisfa la funzione P (x 1,x 2,…x n ) 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= (x 1,x 2,…x i ) con la funzione parziale P (x 1,x 2,…x i ) 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.

4 Vincoli Vincoli espiciti: Sono regole che restringono x i 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: x i ≤ 0; l i ≤ x i ≤ r i ; x i in S i ={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 x i debbono correlarsi.

5 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) 1 5 8 6 3 7 2 41 7 5 8 2 4 6 3 2 5 7 4 1 8 6 3 2 7 3 6 8 5 1 4 1 6 8 3 7 4 2 5 2 4 6 8 3 1 7 5 2 6 1 7 4 8 3 5 2 7 5 8 1 4 6 3 1 7 4 6 8 2 5 3 2 5 7 1 3 8 6 4 2 6 8 3 1 4 7 5 2 8 6 1 3 5 7 4

6 Una soluzione 15863724

7 Esempio (4x4)

8 ASD-A.A.2011/2012

9 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 (x 1 x 2 … x i …x f ), 1≤f≤n, soddisfacenti alcuni vincoli predefiniti. Ogni x i appartiene ad un insieme finito linearmente ordinato X i. 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.

10 Dalla t-pla j-esima alla j+1-esima A partire dalla t-pla j-esima w = (x 1 x 2 … x j ), si genera la t-pla (j+1)-esima v = (x 1 x 2 … x j+1 ) con x j+1 primo elemento in X j+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 X j+1, si prende il primo disponibile come nuovo x j+1 e si torna al passo 1; - se non vi sono più elementi da scegliere in X j+1,,si torna alla t-pla j-esima, si sostituisce x j con il primo elemento elegibile in X j 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 x j-1, se possibile.

11 Backtrack per le 8 regine Vincoli espliciti: S i ={1,2,3,4,5,6,7,8} 1 ≤ i ≤ 8 Conseguentemente lo spazio delle soluzioni è di 8 8 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 8 8 a 8! Tutte le regine debbono essere in diagonali differenti

12 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

13 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 l = x[j] if l = i or  j-l  =  i-k  then return false; return true;

14 Procedura n-regine Procedura n-regine(k,n) stampa tutte i possibili posizionamenti senza conflitto di n regine su una scacchiera nxn (si inizia con k=1) procedura 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);


Scaricare ppt "Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design."

Presentazioni simili


Annunci Google