La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 © Alberto Montresor Bactracking Algoritmi e Strutture Dati Capitolo 16 - Backtrack Alberto Montresor Università di Trento This work is licensed under.

Presentazioni simili


Presentazione sul tema: "1 © Alberto Montresor Bactracking Algoritmi e Strutture Dati Capitolo 16 - Backtrack Alberto Montresor Università di Trento This work is licensed under."— Transcript della presentazione:

1 1 © Alberto Montresor Bactracking Algoritmi e Strutture Dati Capitolo 16 - Backtrack Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

2 2 © Alberto Montresor Introduzione Classi di problemi (decisionali, di ricerca, di ottimizzazione) Definizioni basate sul concetto di soluzione ammissibile : una soluzione che soddisfa un certo insiemi di criteri Problemi tipici Contare le soluzioni ammissibili Costruire almeno una o tutte le soluzioni ammissibili Trovare le soluzioni ammissibili più grandi, più piccole o in generale ottimali Esempio: Elencare tutti i sottoinsiemi di k elementi di un insieme S

3 3 © Alberto Montresor Problemi: commenti Enumerazione Elencare algoritmicamente tutte le possibili soluzioni ammissibili (spazio di ricerca) Costruire almeno una soluzione Si utilizza l'algoritmo per elencare tutte le soluzioni, fermandosi alla prima Contare le soluzioni In molti casi, è possibile contare in modo analitico Esempio: |S| = n, # sottoinsiemi di k elementi: In altri casi, si costruiscono le soluzioni e si contano

4 4 © Alberto Montresor Problemi: commenti Trovare le soluzioni ottimali Si costruiscono tutte le soluzioni e si valuta una funzione di costo Si possono utilizzare altre tecniche: Programmazione dinamica, greedy Tecniche risolutive per problemi intrattabili Esempi: Circuito hamiltoniano (commesso viaggiatore)

5 5 © Alberto Montresor Costruire tutte le soluzioni Per costruire tutte le possibili soluzioni, si utilizza un approccio brute-force: si esamina interamente lo spazio delle possibili soluzioni A volte è l'unica strada possibile La potenza dei computer moderni rende affrontabili problemi di discrete dimensioni 10!= 3.63 · 10 6 permutazione di 10 elementi 2 20 = 1.05 · 10 6 sottoinsieme di 20 elementi Inoltre, a volte non è necessario analizzare l'intero spazio delle soluzioni

6 6 © Alberto Montresor Backtracking Filosofia: Prova a fare qualcosa, e se non va bene, disfalo e prova qualcos'altro Come funziona? Un metodo sistematico per iterare su tutte le possibili istanze di uno spazio di ricerca E' una tecnica algoritmica che, come altre, deve essere personalizzata per ogni applicazione individuale

7 7 © Alberto Montresor Backtracking Organizzazione generale Una soluzione viene rappresentata come un vettore S[1..n] Il contenuto degli elementi S[i] è preso da un insieme di scelte C dipendente dal problema Esempi: C insieme generico, possibili soluzioni permutazioni di C C insieme generico, possibili soluzioni sottoinsiemi di C C mosse di gioco, possibili soluzioni sequenze di mosse C archi di un grafo, possibili soluzioni percorsi sul grafo

8 8 © Alberto Montresor Backtracking Come procedere: ad ogni passo, partiamo da una soluzione parziale S[1..k] Se S[1..k] è una soluzione ammissibile, la processiamo in qualche modo e abbiamo finito Altrimenti: Se è possibile, estendiamo S[1..k] con una delle possibili scelte in una soluzione S[1..k+1], e valutiamo la nuova soluzione ricorsivamente Altrimenti, cancelliamo (ritornando indietro nella ricorsione) l'elemento S[k] (backtrack) e ripartiamo dalla soluzione S[1..k-1] Si può fare backtrack su più passi di ricorsione

9 9 © Alberto Montresor Backtracking Spazio di ricerca albero di decisione Soluzioni foglie in un albero di decisione Soluzioni parziali nodi interni dell'albero di decisione Radice soluzione parziale vuota

10 10 © Alberto Montresor Backtracking Lo spazio di ricerca può essere ridotto: Rami dell'albero che sicuramente non portano a soluzioni ammissibili possono essere potati ( pruned ) La valutazione viene fatta nelle soluzioni parziali radici del sottoalbero da potare

11 11 © Alberto Montresor Backtracking Due possibili approcci: Ricorsivo : lavora tramite una visita in profondità nell'albero delle scelte, basata su un approccio ricorsivo Iterativo : utilizza un approccio greedy, eventualmente tornando sui propri passi Esempio: Inviluppo convesso Esempio: String matching

12 12 © Alberto Montresor Algoritmo generico S : vettore contenente la soluzione parziale S[1..i]... : informazioni addizionali C insieme di possibili candidati per estendere la soluzione Ritorna true per bloccare l'esecuzione, ad esempio dopo la prima soluzione Ritorna false per le soluzioni parziali

13 13 © Alberto Montresor Esempio 1 Problema Elencare tutti i sottoinsiemi di un insieme S Problemi Quali sono le scelte possibili?

14 14 © Alberto Montresor Esempio 1: commenti Commenti Non c'è pruning. Tutto lo spazio possibile viene esplorato. Ma questo avviene per definizione In che ordine vengono stampati gli insiemi? E' possibile pensare ad una soluzione iterativa, ad-hoc? (non-backtracking)

15 15 © Alberto Montresor Esempio 1: versione iterativa

16 16 © Alberto Montresor Esempio 2 Problema Elencare tutti i sottoinsiemi di dimensione k di un insieme S Versione iterativa Qual è il costo? Soluzione basata su backtracking Possiamo potare?

17 17 © Alberto Montresor Esempio 2: 1° tentativo Qual è il problema?

18 18 © Alberto Montresor Esempio 2: 2° tentativo Qual è il problema?

19 19 © Alberto Montresor Esempio 2: Tentativo corretto

20 20 © Alberto Montresor Esempio 2: vantaggi

21 21 © Alberto Montresor Esempio 2: sommario Cosa abbiamo imparato? Specializzando l'algoritmo generico, possiamo ottenere una versione più efficiente Versione efficiente per valori di k piccoli (vicini a 1) valori di k grandi (vicini a n ) Miglioramento solo parziale verso n /2 E' difficile ottenere la stessa efficienza con un algoritmo iterativo

22 22 © Alberto Montresor Esempio 3 Problema Stampa di tutte le permutazioni di un insieme A Rispetto al problema precedente: L'insieme dei candidati dipende dalla soluzione parziale corrente

23 23 © Alberto Montresor n Regine Problema: posizionare n regine in una scacchiera n·n, in modo tale che nessuna regina ne minacci un'altra. Commenti storici: Il problema classico, con n =8, è stato studiato, fra gli altri, anche da Gauss Metodo Partiamo dall'approccio più stupido, e mano a mano raffiniamo la soluzione.

24 24 © Alberto Montresor n Regine Idea: ci sono n 2 caselle dove piazzare una regina Algoritmo: S[1..n 2 ] array binario S[i] = true regina in S[i] controllo soluzionese i = n 2 choices ( S, n, i )ritorna { true, false } se regina in S[i] non minaccia le regine in S[1..i-1], { false } altrimenti # soluzioni per n = ~ 1.84 · Commenti: Forse abbiamo un problema di rappresentazione? Matrice binaria molto sparsa

25 25 © Alberto Montresor n Regine Idea: Dobbiamo piazzare n regine, ci sono n 2 caselle Algoritmo S[1..n] coordinate in 1.. n 2 S[i] coordinata della regina i controllo soluzionese i = n choices ( S, n, i )ritorna posizioni legali # soluzioni per n =8 (n 2 ) n = 64 8 = 2 48 ~ 2.81 · Commenti C'è un miglioramento, ma lo spazio è ancora grande... Problema: una soluzione come si distingue da ?

26 26 © Alberto Montresor n regine Idea: la regina i non può stare in una casella precedente alla regina i-1 (S[i-1] < S[i]) Algoritmo S[1..n] coordinate in 1.. n 2 S [ i ] coordinata della regina i controllo soluzionese i = n choices ( S, n, i )ritorna posizioni legali, S [ i-1 ] < S [i] # soluzioni per n =8 (n 2 ) n / n! = 6 48 / ~ 6.98 · 10 9 Commenti: Ottimo, abbiamo ridotto molto, ma si può ancora fare qualcosa

27 27 © Alberto Montresor n regine Idea: ogni riga della scacchiera deve contenere esattamente una regina. Infatti non ne può contenere 2 o più, e se ne contenesse 0 un'altra riga dovrebbe contenerne 2 Algoritmo S[1..n] valori in 1..nS[i] colonna della regina i controllo soluzionese i = n choices ( S, n, i )ritorna le colonne legali # soluzioni per n =8 n n = 8 8 ~ 1.67 · 10 7 Commenti Quasi alla fine

28 28 © Alberto Montresor n regine Idea: anche ogni colonna deve contenere esattamente una regina; i numeri 1..n devono apparire in S[1..n] come permutazione Algoritmo Modifichiamo l'algoritmo delle permutazioni per verificare anche le diagonali # soluzioni per n=8n ! = ~ 4.03 · 10 4 # soluzioni effettivamente visitate: 15720

29 29 © Alberto Montresor n regine Non è la soluzione migliore per ottenere una soluzione Minimum-conflicts heuristic Si muove il pezzo con il più grande numero di conflitti nella casella delle stessa colonna con il numero minimo di conflitti Per n =10 6, circa 50 passi in media Assume che la soluzione iniziale sia ragionevolmente buona. Ogni regina viene messa nella colonna che ha il numero minimo di conflitti con le regine già sulla scacchiera Al contrario, se tutte le regine sono sulla stessa riga, ci vogliono almeno n -1 spostamenti Questo algoritmo non garantisce che la terminazione sia sempre corretta

30 30 © Alberto Montresor Giro di cavallo Problema: Si consideri ancora una scacchiera n·n ; lo scopo è trovare un giro di cavallo, ovvero un percorso di mosse valide del cavallo in modo che ogni casella venga visitata al più una volta Soluzione: Tramite backtrack

31 31 © Alberto Montresor Giro di cavallo Soluzione Matrice nn contenente le cui celle contengono 0se la cella non è mai stata visitata i se la cella è stata visitata al passo i # soluzioni: 64! ~ Ma: ad ogni passo ho al massimo 8 caselle possibili, quindi ne visito al più 8 64 ~10 57 In realtà, grazie al pruning ne visito molto meno

32 32 © Alberto Montresor Giro di cavallo

33 33 © Alberto Montresor Sudoku Suuji wa dokushin ni kagiru

34 34 © Alberto Montresor Sudoku

35 35 © Alberto Montresor

36 36 © Alberto Montresor Generazione labirinti Problemi Come generare un labirinto in una scacchiera n·n ? Come uscire da un labirinto? Esempio:

37 37 © Alberto Montresor Un ultimo puzzle Problema Si consideri ancora una scacchiera n·n, con n =2 k Qualsiasi scacchiera di questo tipo con una cella rimossa può essere ricoperta da triomini a forma di L Trovare un algoritmo che trovi una possibile ricopertura della scacchiera

38 38 © Alberto Montresor Inviluppo convesso Definizione Un poligono nel piano bidimensionale è convesso se ogni segmento di retta che congiunge due punti del poligono sta interamente nel poligono stesso, incluso il bordo. Inviluppo convesso (Convex hull) Dati n punti p 1,..., p n nel piano, con n 3, trovare il più piccolo poligono convesso che li contiene tutti

39 39 © Alberto Montresor Inviluppo convesso Un algoritmo banale ma inefficiente Un poligono può essere rappresentato per mezzo dei suoi spigoli Si consideri la retta che passa per una coppia di punti i,j, che divide il piano in due semipiani chiusi Se tutti i rimanenti n -2 punti stanno dalla stessa parte, allora lo spigolo S ij fa parte dellinviluppo convesso

40 40 © Alberto Montresor Inviluppo convesso

41 41 © Alberto Montresor Algoritmo di Graham Algoritmo di Graham (1972) Il punto con ordinata minima fa parte dellinviluppo convesso Si ordinano i punti in base allangolo formato dalla retta passante per il punto con ordinata minima e la retta orizzontale

42 42 © Alberto Montresor

43 43 © Alberto Montresor Algoritmo di Graham

44 44 © Alberto Montresor Algoritmo di Graham

45 45 © Alberto Montresor Algoritmo di Graham Complessità O( n log n ), perchè dominato dalla fase di ordinamento degli angoli


Scaricare ppt "1 © Alberto Montresor Bactracking Algoritmi e Strutture Dati Capitolo 16 - Backtrack Alberto Montresor Università di Trento This work is licensed under."

Presentazioni simili


Annunci Google