45
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 http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

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

Embed Size (px)

Citation preview

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

1© Alberto Montresor

BactrackingBactracking

Algoritmi e Strutture DatiCapitolo 16 - Backtrack

Alberto MontresorUniversità di Trento

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.5/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

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

2© Alberto Montresor

IntroduzioneIntroduzione

✦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

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

3© Alberto Montresor

Problemi: commentiProblemi: 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

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

4© Alberto Montresor

Problemi: commentiProblemi: 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)

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

5© Alberto Montresor

Costruire tutte le soluzioniCostruire 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” problemidi discrete dimensioni

✦10! = 3.63 · 106 permutazione di 10 elementi✦220 = 1.05 · 106 sottoinsieme di 20 elementi

✦Inoltre, a volte non è necessario analizzare l'intero spazio delle soluzioni

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

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

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

7© Alberto Montresor

BacktrackingBacktracking

✦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

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

8© Alberto Montresor

BacktrackingBacktracking

✦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

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

9© Alberto Montresor

BacktrackingBacktracking

✦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

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

10

© Alberto Montresor

BacktrackingBacktracking

✦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

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

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 tornandosui propri passi

✦Esempio: Inviluppo convesso✦Esempio: String matching

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

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 bloccarel'esecuzione, ad esempiodopo la prima soluzione

Ritorna false per le soluzioni parziali

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

13

© Alberto Montresor

Esempio 1Esempio 1

✦Problema

✦Elencare tutti i sottoinsiemi di un insieme S

✦Problemi

✦Quali sono le scelte possibili?

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

14

© Alberto Montresor

Esempio 1: commentiEsempio 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)

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

15

© Alberto Montresor

Esempio 1: versione iterativaEsempio 1: versione iterativa

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

16

© Alberto Montresor

Esempio 2Esempio 2

✦Problema

✦Elencare tutti i sottoinsiemi di dimensione k di un insieme S

✦Versione iterativa

✦Qual è il costo?

✦Soluzione basata su backtracking

✦Possiamo potare?

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

17

© Alberto Montresor

Esempio 2: 1° tentativoEsempio 2: 1° tentativo

Qual è il problema?

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

18

© Alberto Montresor

Esempio 2: 2° tentativoEsempio 2: 2° tentativo

Qual è il problema?

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

19

© Alberto Montresor

Esempio 2: Tentativo correttoEsempio 2: Tentativo corretto

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

20

© Alberto Montresor

Esempio 2: vantaggiEsempio 2: vantaggi

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

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

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

22

© Alberto Montresor

Esempio 3Esempio 3

Problema Stampa di tutte le permutazioni di un insieme A

Rispetto al problema precedente: L'insieme dei candidati dipende dalla soluzione parziale corrente

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

23

© Alberto Montresor

n Reginen 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.

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

24

© Alberto Montresor

n Reginen Regine

✦Idea: ci sono n2 caselle dove piazzare una regina

✦Algoritmo:

✦S[1..n2] array binario S[i] = true “regina in ⇒ S[i]”

✦controllo soluzione se i = n2

✦choices(S, n, i) ritorna { true, false} se regina in S[i] non minaccia

le regine inS[1..i-1],

{ false } altrimenti

✦# soluzioni per n=8 264 ~ 1.84 · 1019

✦Commenti:

✦Forse abbiamo un problema di rappresentazione?

✦Matrice binaria molto sparsa

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

25

© Alberto Montresor

n Reginen Regine

✦Idea: Dobbiamo piazzare n regine, ci sono n2 caselle

✦Algoritmo

✦S[1..n] coordinate in 1..n2 S[i] coordinata della regina i

✦controllo soluzione se i = n

✦choices(S, n, i) ritorna posizioni legali

✦# soluzioni per n=8 (n2)n = 648 = 248 ~ 2.81 · 1014

✦Commenti

✦C'è un miglioramento, ma lo spazio è ancora grande...

✦Problema: una soluzione “1-7-....” come si distingue da “7-1-....” ?

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

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..n2 S[i] coordinata della regina i

✦controllo soluzione se i = n

✦choices(S, n, i) ritorna posizioni legali, S[i-1] < S[i]

✦# soluzioni per n=8 (n2)n / n! = 648 / 40320 ~ 6.98 · 109

✦Commenti:

✦Ottimo, abbiamo ridotto molto, ma si può ancora fare qualcosa

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

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..n S[i] colonna della regina i

✦controllo soluzione se i = n

✦choices(S, n, i) ritorna le colonne “legali”

✦# soluzioni per n=8 nn = 88 ~ 1.67 · 107

✦Commenti

✦Quasi alla fine

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

28

© Alberto Montresor

n reginen 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=8 n! = 40320 ~ 4.03 · 104

✦# soluzioni effettivamente visitate: 15720

QuickTime™ and aGIF decompressor

are needed to see this picture.

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

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=106, 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

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

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

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

31

© Alberto Montresor

Giro di cavalloGiro di cavallo

✦Soluzione

✦Matrice n∙n contenente le cui celle contengono ✦0 se la cella non è mai stata visitata✦i se la cella è stata visitata al passo i

✦# soluzioni: 64! ~ 1089

✦Ma: ad ogni passo ho al massimo 8 caselle possibili, quindi ne visito al più 864 ~1057

✦In realtà, grazie al pruning ne visito molto meno

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

32

© Alberto Montresor

Giro di cavalloGiro di cavallo

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

33

© Alberto Montresor

Sudoku

✦“Suuji wa dokushin ni kagiru”

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

34

© Alberto Montresor

Sudoku

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

35

© Alberto Montresor

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

36

© Alberto Montresor

Generazione labirintiGenerazione labirinti

Problemi Come generare un labirinto in una scacchiera n·n?

Come uscire da un labirinto?

Esempio:

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

37

© Alberto Montresor

Un ultimo puzzleUn ultimo puzzle

✦Problema

✦Si consideri ancora una scacchiera n·n, con n=2k

✦Qualsiasi scacchiera di questo tipo con una cella rimossa può essere ricoperta da triomini a forma di L

✦Trovare un algoritmo che trovi una possibilericopertura della scacchiera

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

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 p1, . . . , pn nel piano, con n ≥ 3, trovare il più piccolo poligono convesso che li contiene tutti

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

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 Sij fa parte dell’inviluppo convesso

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

40

© Alberto Montresor

Inviluppo convesso

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

41

© Alberto Montresor

Algoritmo di Graham

✦Algoritmo di Graham (1972)

✦Il punto con ordinata minima fa parte dell’inviluppo convesso

✦Si ordinano i punti in base all’angolo formato dalla retta passante per il punto con ordinata minima e la retta orizzontale

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

42

© Alberto Montresor

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

43

© Alberto Montresor

Algoritmo di Graham

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

44

© Alberto Montresor

Algoritmo di Graham

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

45

© Alberto Montresor

Algoritmo di Graham

✦Complessità

✦O(n log n), perchè dominato dalla fase di ordinamento degli angoli