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.

Slides:



Advertisements
Presentazioni simili
4/5/2015E. Giovannetti -- OI09.1 Olimpiadi di Informatica 2010 Giornate preparatorie Dipartimento di Informatica Università di Torino marzo – Algoritmi.
Advertisements

Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 07/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
ASD a.a.2010/2011- Lezione 12 Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi Backtracking/ Branch and Bound Lezione n°12.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Simulazione di lettura e scrittura concorrente Tecnica dell’accelerated cascading Lezione.
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Interconnessione tramite reti Lezione n°6.
Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
Fondamenti di Informatica A - Massimo Bertozzi ALBERI E ALBERI BINARI DI RICERCA (BST)
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Prof.ssa Rossella Petreschi Lezione del 29 /10/2014 del Corso di Algoritmica Lezione n°8.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Lezione n°10 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati a.a.2015/2016 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Alberi di ricerca di altezza logaritmica
Approssimazione Lezione n°20 Prof.ssa Rossella Petreschi
Analisi di sequenze di operazioni Union-Find
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
La funzione Path e le forme a cespuglio
IL CONCETTO DI ALGORITMO
Lezione n°17 Prof.ssa Rossella Petreschi
Lezione n°15 Prof.ssa Rossella Petreschi
Rappresentazione di alberi
Correzione 1° Esonero Lezione n°13
Rappresentazione di alberi binari
B-alberi e alberi autoaggiustanti
Lezione n°14 Reti di flusso Prof.ssa Rossella Petreschi
La gestione degli insiemi disgiunti
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
K4 è planare? E K3,3 e K5 sono planari? Sì!
Approssimazione Lezione n°15 Prof.ssa Rossella Petreschi
Lezione n°11 Prof.ssa Rossella Petreschi
Lezione n°16 Prof.ssa Rossella Petreschi
Impariamo a conoscere le Matrici
Rappresentazione di alberi
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Matrici Definizioni Matrici Rettangolari Quadrate 02/01/2019
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Gestione dinamica di tabelle
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Automi e stringhe Lezione n°24 Prof.ssa Rossella Petreschi
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Algoritmi Avanzati a.a.2010/2011 Prof.ssa Rossella Petreschi
APPUNTI SUL LINGUAGGIO C
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
Il problema del flusso nelle reti
Insiemi disgiunti.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Tabelle dinamiche Lezione n°3
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Algoritmi di ordinamento
Corso di Fondamenti di Informatica
Transcript della presentazione:

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

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.

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.

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.

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)

Una soluzione

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 (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.

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.

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 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

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

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;

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);