Algoritmi e Strutture Dati. Backtracking
|
|
|
- Tito Tedesco
- 8 anni fa
- Visualizzazioni
Transcript
1 Algoritmi e Strutture Dati Backtracking Alberto Montresor Università di Trento 2016/12/08 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
2 Sommario 1 Introduzione 2 Enumerazione Sottoinsiemi Permutazioni Giochi 3 Backtracking iterativo Inviluppo convesso
3 Introduzione Introduzione Classi di problemi (decisionali, di ricerca, di ottimizzazione) Definizioni basate sul concetto di soluzione ammissibile: una soluzione che soddisfa un certo insieme di criteri Problemi tipici Costruire almeno una o tutte le soluzioni ammissibili Contare le soluzioni ammissibili Trovare le soluzioni ammissibili "più grandi", "più piccole" o in generale "ottimali" Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 1 / 49
4 Introduzione Problemi tipici Enumerazione Elencare algoritmicamente tutte le soluzioni ammissibili (spazio di ricerca) Esempio: elencare tutte le permutazioni di un insieme Costruire almeno una soluzione Si utilizza l algoritmo per l enumerazione, fermandosi alla prima soluzione disponibile Esempio: identificare una sequenza di mosse nel gioco del 15 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 2 / 49
5 Introduzione Problemi tipici Contare le soluzioni In alcuni casi, è possibile contare in modo analitico Esempio: contare il numero di sottoinsiemi di k elementi presi da un insieme di n elementi n! k! (n k)! In altri casi, si costruiscono le soluzioni e si contano Esempio: numero di sottoinsiemi di un insieme di interi S la cui somma è un numero primo. Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 3 / 49
6 Introduzione Problemi tipici Trovare le soluzioni ottimali Si enumerano tutte le soluzioni, che vengono valutate tramite una funzione di costo Si possono utilizzare altre tecniche: Programmazione dinamica, greedy Tecniche risolutive per problemi intrattabili Esempio: Circuito hamiltoniano (commesso viaggiatore) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 4 / 49
7 Introduzione Costruire tutte le soluzioni Per costruire tutte le 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 dimensioni medio-piccole 10! = (permutazione di 10 elementi) 2 20 = (sottoinsieme di 20 elementi) Inoltre, a volte lo spazio delle soluzioni non deve essere analizzato interamente Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 5 / 49
8 Introduzione Backtracking Filosofia "Prova a fare qualcosa, e se non va bene, disfalo e prova qualcos altro" "Ritenta, e sarai più fortunato" 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 6 / 49
9 Introduzione Organizzazione generale Organizzazione generale Esempi 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 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 7 / 49
10 Introduzione Soluzioni parziali Ad ogni passo, partiamo da una soluzione parziale S[1... k] in cui k 0 scelte sono state prese Se S[1... k] è una soluzione ammissibile, la "processiamo" Viene stampata, contata, evaluata Si può decidere di terminare o continuare elencando tutte le soluzioni Se S[1... k] non è una soluzione completa Se è possibile, estendiamo S[1... k] con una delle possibili scelte in una soluzione S[1... k + 1] Altrimenti, "cancelliamo" l elemento S[k] (backtrack) e ripartiamo dalla soluzione S[1... k 1] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 8 / 49
11 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
12 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
13 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
14 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
15 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
16 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
17 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
18 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
19 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
20 Introduzione Albero delle decisioni Albero di decisione Spazio di ricerca Radice Soluzione parziale vuota Nodi interni dell albero di decisione Soluzioni parziali Foglie in un albero di decisione Soluzioni ammissibili S[0] S[1] S[2] S[3] S[3] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 9 / 49
21 Introduzione Pruning 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 10 / 49
22 Introduzione Pruning 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 10 / 49
23 Introduzione 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 11 / 49
24 Sommario 1 Introduzione 2 Enumerazione Sottoinsiemi Permutazioni Giochi 3 Backtracking iterativo Inviluppo convesso
25 Enumerazione Enumerazione boolean enumeration(item[ ] S, int n, int i,... ) Set C choices(s, n, i,...) % Determina C in funzione di S[1... i 1] foreach c C do S[i] c if isadmissible(s, n, i) then if processsolution(s, n, i,...) then return true if enumeration(s, n, i + 1,...) then return true return false Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 12 / 49
26 Enumerazione Enumerazione S: vettore contenente le soluzioni parziali S[1... i] i: indice corrente...: informazioni addizionali C è l insieme dei possibili candidati per estendere la soluzione isadmissible(): restituisce true se S[1... i] è una soluzione ammissibile processsolution(): restituisce true per bloccare l esecuzione alla prima soluzione ammissibile, false per esplorare tutto l albero Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 13 / 49
27 Enumerazione Sottoinsiemi Esempio 1 Elencare tutti i sottoinsiemi dell insieme {1,..., n} subsets(int[ ] S, int n, int i) Set C iif(i n, {0, 1}, ) foreach c C do S[i] c if i = n then processsolution(s, n) subsets(s, n, i + 1) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 14 / 49
28 Enumerazione Sottoinsiemi Esempio 1 (Versione più "pulita") Elencare tutti i sottoinsiemi dell insieme {1,..., n} subsets(int[ ] S, int n, int i) foreach c {0, 1} do S[i] c if i = n then processsolution(s, n) else subsets(s, n, i + 1) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 15 / 49
29 Enumerazione Sottoinsiemi Esempio 1 Non c è pruning. Tutto lo spazio possibile viene esplorato. Ma questo avviene per definizione Complessità O(n2 n ) In che ordine vengono stampati gli insiemi? E possibile pensare ad una soluzione iterativa, ad-hoc? (non-backtracking) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 16 / 49
30 Enumerazione Sottoinsiemi Esempio 1 subsets(int n) for j 0 to 2 n 1 do print { for i 0 to n 1 do if (j and 2 i ) 0 then print i print } Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 17 / 49
31 Enumerazione Sottoinsiemi Esempio 2 Elencare tutti i sottoinsiemi di dimensione k di un insieme {1,..., n} Versione iterativa Qual è il costo? Soluzione basata su backtracking Possiamo potare? Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 18 / 49
32 Enumerazione Sottoinsiemi Esempio 2 - Tentativo 1 subsets(int[ ] S, int n, int k, int i) Set C iif(i n, {0, 1}, ) foreach c C do S[i] c if i = n then int count 0 for j 1 to n do count count + S[j] if count = k then processsolution(s, n) subsets(s, n, k, i + 1) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 19 / 49
33 Enumerazione Sottoinsiemi Esempio 2 - Tentativo 2 subsets(int[ ] S, int n, int k, int i, int count) Set C iif(i n, {0, 1}, ) foreach c C do S[i] c count count + S[i] if i = n and count = k then processsolution(s, n) subsets(s, n, k, i + 1, count) count count S[i] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 20 / 49
34 Enumerazione Sottoinsiemi Esempio 2 - Tentativo 3 (Corretto) subsets(int[ ] S, int n, int k, int i, int count) Set C = iif(count < k and count + (n i + 1) k, {0, 1}, ) foreach c C do S[i] c count count + S[i] if count = k then processsolution(s, i) else subsets(s, n, k, i + 1, count) count count S[i] Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 21 / 49
35 Enumerazione Sottoinsiemi Esempio 2: 2: vantaggi vantaggi Alberto Montresor Montresor (UniTN) ASD - Backtracking 2016/12/08 22 / 4920
36 Enumerazione Sottoinsiemi 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 23 / 49
37 Enumerazione Permutazioni Esempio 3 Stampa di tutte le permutazioni di un insieme A L insieme dei candidati dipende dalla soluzione parziale corrente permutations(set A, int n, Item[ ] S, int i) foreach c A do S[i] c A.remove(c) if A.isEmpty() then processsolution(s, n) else permutations(a, n, S, i + 1) A.insert(c) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 24 / 49
38 Enumerazione Giochi Problema delle otto regine Problema Posizionare n regine in una scacchiera n n, in modo tale che nessuna regina ne "minacci" un altra. Un po di storia: Introdotto da Max Bezzel (1848) Gauss trovò 72 delle 92 soluzioni Partiamo dall approccio più stupido, e mano a mano raffiniamo la soluzione. Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 25 / 49
39 Enumerazione Giochi Problema delle otto regine Idea: Ci sono n 2 caselle dove piazzare una regina S[1..n 2 ] array binario controllo soluzione se i = n 2 choices(s, n, i) pruning S[i] = true "regina in S[i]" {true, false} # soluzioni per n = Commenti se la nuova regina minaccia una delle regine esistenti, restituisce Forse abbiamo un problema di rappresentazione? Matrice binaria molto sparsa Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 26 / 49
40 Enumerazione Giochi Problema delle otto regine Idea: Dobbiamo piazzare n regine, ci sono n 2 caselle S[1... n] coordinate in {1... n 2 } S[i] coordinata della regina i controllo soluzione se i = n choices(s, n, i) {1... n 2 } pruning restituisce il sottoinsieme di mosse legali # soluzioni per n = 8 (n 2 ) n = 64 8 = Commenti C è un miglioramento, ma lo spazio è ancora grande... Problema: come si distingue una soluzione " " da " "? Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 27 / 49
41 Enumerazione Giochi Problema delle otto regine Idea: non mettere regine in caselle precedenti a quelle già scelte S[1... n] coordinate in {1... n 2 } controllo soluzione S[i] coordinata della regina i se i = n choices(s, n, i) {1... n 2 } pruning restituisce mosse legali, S[i] > S[i 1] # soluzioni per n = 8 (n 2 ) n /n! = 2 48 / Commenti Ottimo, abbiamo ridotto molto, ma si può ancora fare qualcosa Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 28 / 49
42 Enumerazione Giochi Problema delle otto regine Idea: ogni riga della scacchiera deve contenere esattamente una regina S[1... n] coordinate in {1... n} controllo soluzione S[i] colonna della regina i, dove riga = i se i = n choices(s, n, i) {1... n} pruning restituisce le colonne legali # soluzioni per n = 8 n n = Commenti Quasi alla fine Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 29 / 49
43 Enumerazione Giochi Problema delle otto regine Idea: anche ogni colonna deve contenere esattamente una regina S[1... n] coordinate in {1... n} controllo soluzione permutazione di {1... n} se i = n choices(s, n, i) {1... n} pruning elimina le diagonali # soluzioni per n = 8 n! = 8! = Commenti Soluzioni effettivamente visitate = Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 30 / 49
44 Enumerazione Giochi Problema delle otto regine Minimum-conflicts heuristic Si parte da una soluzione iniziale ragionevolmente buona, e si muove il pezzo con il più grande numero di conflitti nella casella della stessa colonna che genera il numero minimo di conflitti. Si ripete fino a quando non ci sono più pezzi da muovere. Algoritmo in tempo lineare Ad esempio, con n = 1, 000, 000, richiede 50 passi in media Questo algoritmo non garantisce che la terminazione sia sempre corretta Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 31 / 49
45 Enumerazione Giochi lo 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 deri ancora una scacchiera n n; lo scopo è trovare un giro di cavallo, n percorso di mosse valide del cavallo in modo che ogni casella venga al più una volta backtrack Alberto Montresor (UniTN) ASD - Backtracking 2016/12/ / 49
46 Enumerazione Giochi Giro di cavallo Soluzione Matrice n n le cui celle contengono: 0 se la cella non è mai stata visitata i se la cella è stata visitata al passo i-esimo # soluzioni: 64! Ma: ad ogni passo ho al massimo 8 caselle possibili, quindi ne visito al più In realtà, grazie al pruning ne visito molto meno Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 33 / 49
47 Enumerazione Giochi Giro di cavallo boolean cavallo(int[ ][ ] S, int i, int x, int y) Set C mosse(s, x, y) foreach c C do S[x, y] i if i = 64 then processsolution(s) return true else if cavallo(s, i + 1, x + m x [c], y + m y [c]) then return true; S[x, y] 0 return false Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 34 / 49
48 Enumerazione Giochi Giro di cavallo Set mosse(int[ ][ ] S, int x, int y) Set C Set() for int i 1 to 8 do n x x + m x [i] n y y + m y [i] if 1 n x 8 and 1 n y 8 and S[n x, n y ] = 0 then C.insert(i) return C m x { 1, +1, +2, +2, +1, 1, 2, 2} m y { 2, 2, 1, +1, +2, +2, +1, 1} Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 35 / 49
49 Enumerazione Giochi Sudoku - "Suuji wa dokushin ni kagiru" Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 36 / 49
50 Enumerazione Giochi Sudoku boolean sudoku(int[ ][ ] S, int i) int x i mod 9 int y i/9 Set C Set() if i 80 then if S[x, y] 0 then C.insert(S[x, y]) else for c 1 to 9 do if check(s, x, y, c) then C.insert(c) int old S[x, y] foreach c C do S[x, y] c if i = 80 then processsolution(s, n) return true if sudoku(s, i + 1) then return true S[x, y] old return false Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 37 / 49
51 Enumerazione Giochi Sudoku boolean check(int[ ][ ] S, int x, int y, int c) for j 0 to 8 do if S[x, j] = c then return false if S[j, y] = c then return false % Controllo sulla colonna % Controllo sulla riga int b x x/3 int b y y/3 for i x 0 to 2 do for int i y 0 to 2 do % Controllo sulla sottotabella if S[b x 3 + i x, b y 3 + i y ] = c then return false return true Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 38 / 49
52 u Generazione labirinti u Problemi u Enumerazione Giochi Come generare un labirinto in una scacchiera n n? Come uscire da un labirinto? Problemi u Esempio: Come generare un labirinto in una griglia n n? Come uscire da un labirinto? Alberto Montresor Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 39 / 49
53 Enumerazione Giochi Un ultimo puzzle Problema Si consideri 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 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 40 / 49
54 Sommario 1 Introduzione 2 Enumerazione Sottoinsiemi Permutazioni Giochi 3 Backtracking iterativo Inviluppo convesso
55 Backtracking iterativo Inviluppo convesso Inviluppo convesso Poligono convesso Un poligono nel piano è convesso se ogni segmento di retta che congiunge due punti del poligono sta interamente nel poligono stesso, incluso il bordo. Inviluppo convesso Dati n punti p 1,..., p n nel piano, con n 3, l inviluppo convesso (convex hull) è il più piccolo poligono convesso che li contiene tutti? a) b) c) d) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 41 / 49
56 Backtracking iterativo Inviluppo convesso Algoritmo inefficiente O(n 3 ) Un poligono può essere rappresentato per mezzo dei suoi spigoli Si consideri la retta che passa per una coppia di punti p i, p 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 dell inviluppo convesso i S ij i S ij j j a) OK b) KO Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 42 / 49
57 Backtracking iterativo Inviluppo convesso Stessa parte Data una retta definita dai punti p 1 e p 2, determinare se due punti p e q stanno nello stesso semipiano definito dalla retta. boolean stessaparte(point p 1, point p 2, point p, point q) float dx p 2.x p 1.x float dy p 2.y p 1.y float dx 1 p.x p 1.x float dy 1 p.y p 1.y float dx 2 q.x p 2.x float dy 2 q.y p 2.y return ((dx dy 1 dy dx 1 ) (dx dy 2 dy dx 2 ) 0) Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 43 / 49
58 Backtracking iterativo Inviluppo convesso Algoritmo di Graham Fase 1 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 α 2 1 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 44 / 49
59 Backtracking iterativo Inviluppo convesso Algoritmo di Graham Stack graham(point[ ] p, int n) int min 1 for i 2 to n do if p[i].y < p[min].y then min i p[1] p[min] { riordina p[2,... n] in base all angolo formato rispetto all asse orizzontale quando sono connessi con p[1] } { elimina eventuali punti allineati tranne i più lontani da p 1, aggiornando n } Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 45 / 49
60 Backtracking iterativo Inviluppo convesso Algoritmo di Graham Fase 2 Inserisci p 1, p 2 nell inviluppo corrente Per tutti i punti p i = 3,..., n: siano p h e p j, con h < j = i 1, gli ultimi due vertici dell inviluppo corrente scandisci a ritroso i punti nell inviluppo corrente ed elimina p j se stessaparte(p j, p h, p 1, p i ) = false; termina tale scansione se p j non deve essere eliminato; aggiungi p i all inviluppo corrente Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 46 / 49
61 Backtracking iterativo Inviluppo convesso Algoritmo di Graham i = 3 i = i = 5 i = 8 Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 47 / 49
62 Backtracking iterativo Inviluppo convesso Algoritmo di Graham Stack graham(point[ ] p, int n) (continua) Stack S Stack() S.push(p 1 ); S.push(p 2 ) for i 3 to n do while not stessaparte(s.top(), S.top2(), p 1, p i ) do S.pop() S.push(p i ) return S Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 48 / 49
63 Backtracking iterativo Inviluppo convesso Algoritmo di Graham Complessità O(n log n), dominato dall ordinamento Alberto Montresor (UniTN) ASD - Backtracking 2016/12/08 49 / 49
Informatica II. Capitolo 16 Backtrack
Introduzione Informatica II Capitolo 16 Backtrack Abbiamo visto che esistono diverse classi di problemi (decisionali, di ricerca, di ottimizzazione) Sono tutte definizioni basate sul concetto di soluzione
Il problema dello zaino
Il problema dello zaino (knapsack problem) Damiano Macedonio [email protected] Copyright 2010 2012 Moreno Marzolla, Università di Bologna (http://www.moreno.marzolla.name/teaching/asd2011b/) This work is licensed
Esercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi
Problemi, istanze, soluzioni
lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un
Algoritmi e Strutture Dati. Alberi
Algoritmi e Strutture Dati Alberi Alberto Montresor Università di Trento 2017/10/19 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1 Introduzione
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
Algoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
Parte III: Algoritmo di Branch-and-Bound
Parte III: Algoritmo di Branch-and-Bound Divide et Impera Sia z * max {c T x : x S} (1) un problema di ottimizzazione combinatoria difficile da risolvere. Domanda: E possibile decomporre il problema (1)
Il passo del gambero. La soluzione di problemi con la tecnica del Backtracking. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez.
Il passo del gambero La soluzione di problemi con la tecnica del Backtracking Nel labirinto Nel labirinto In ogni posizione provo sistematicamente tutte le strade, ricordando ogni volta l ultima scelta
Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi
Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore
Esercizi vari. Alberto Montresor. 19 Agosto, 2014
Esercizi vari Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive soluzioni
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti
Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti Alberto Montresor 27 marzo 2012 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente,
METODI DELLA RICERCA OPERATIVA
Università degli Studi di Cagliari FACOLTA' DI INGEGNERIA CORSO DI METODI DELLA RICERCA OPERATIVA Dott.ing. Massimo Di Francesco ([email protected]) i i Dott.ing. Maria Ilaria Lunesu ([email protected])
Alberto Montresor Università di Trento
!! Algoritmi e Strutture Dati! Capitolo 5 - Alberi!!! Alberto Montresor Università di Trento!! This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy
Algoritmi greedy. Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione
Algoritmi greedy Gli algoritmi che risolvono problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione Gli algoritmi greedy sono algoritmi basati sull idea
LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve
LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione
Esercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla http://www.moreno.marzolla.name/ Ultima Modifica: 7 ottobre 202 Copyright Portions of this work are Copyright 202, Moreno Marzolla. This work is licensed
Il problema del commesso viaggiatore
Il problema del commesso viaggiatore Mauro Passacantando Dipartimento di Informatica Largo B. Pontecorvo 3, Pisa [email protected] M. Passacantando TFA 2012/13 - Corso di Ricerca Operativa Università
ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND
ESERCIZI SULLA TECNICA BACKTRACKING e BRANCH & BOUND 1. [ STRINGHE] Scrivere in pseudo-codice una procedura che, preso in input un intero n, stampi tutte le stringhe di lunghezza minore o uguale ad n sull
Problemi di ordinamento
Problemi di ordinamento Input: una sequenza di n numeri a 1, a 2,..., a n ; Output: una permutazione a 1, a 2,..., a n di a 1, a 2,..., a n tale che a 1 a 2... a n. Generalmente, la sequenza è rappresentata
Metodi di Ottimizzazione per la Logistica e la Produzione
Metodi di Ottimizzazione per la Logistica e la Produzione Laboratorio Manuel Iori Dipartimento di Scienze e Metodi dell Ingegneria Università di Modena e Reggio Emilia MOLP Parte I 1 / 41 Contenuto della
Tecniche Algoritmiche /2 Paradigma selettivo: la tecnica enumerativa e la tecnica di backtracking
Tecniche Algoritmiche /2 Paradigma selettivo: la tecnica enumerativa e la tecnica di backtracking Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola
Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base
Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1. Sia T una stringa arbitraria di lunghezza n 1 su un alfabeto Σ. È sempre possibile
Espressioni aritmetiche
Espressioni aritmetiche Consideriamo espressioni costruite a partire da variabili e costanti intere mediante applicazione delle operazioni di somma, sottrazione, prodotto e divisione (intera). Ad esempio:
3.4 Metodo di Branch and Bound
3.4 Metodo di Branch and Bound Consideriamo un generico problema di Ottimizzazione Discreta dove X è la regione ammissibile. (P ) z = max{c(x) : x X} Metodologia generale di enumerazione implicita (Land
Problema del cammino minimo
Algoritmi e Strutture di Dati II Problema del cammino minimo Un viaggiatore vuole trovare la via più corta per andare da una città ad un altra. Possiamo rappresentare ogni città con un nodo e ogni collegamento
Programmazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++ Strutture di Dati La Matrice versione. Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università
Ottimizza la somma. Supponete di avere in input un vettore di n interi positivi distinti V [1... n] e un valore W. Scrivere un algoritmo che:
Ottimizza la somma Supponete di avere in input un vettore di n interi positivi distinti V [1... n] e un valore W. Scrivere un algoritmo che: 1 restituisca il massimo valore X = n i=1 x[i]v [i] tale che
Note per la Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che
Esercizi Capitolo 6 - Alberi binari di ricerca
Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 9 Agosto, 204 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile
Intelligenza Artificiale
Intelligenza Artificiale 17 Marzo 2005 Nome e Cognome: Matricola: ESERCIZIO N 1 Ricerca Cieca 5 punti 1.A) Elencare in modo ordinato i nodi (dell'albero sotto) che vengono scelti per l'espansione dalle
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 5 - Alberi Alberto Montresor Università di Trento This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this
Algoritmi di ordinamento
Algoritmi di ordinamento! Selection Sort! Quick Sort! Lower bound alla complessità degli algoritmi di ordinamento Ordinamento 1 Selection Sort SelectionSort(dati[]) { for (i=0; idati.length-1; i++) { min
Cammini minimi fra tutte le coppie
Capitolo 12 Cammini minimi fra tutte le coppie Consideriamo il problema dei cammini minimi fra tutte le coppie in un grafo G = (V, E, w) orientato, pesato, dove possono essere presenti archi (ma non cicli)
Algoritmi di Ricerca
Algoritmi e Strutture Dati Autunno 01 Algoritmi di Ricerca Dip. Informatica ed Appl. Prof. G. Persiano Università di Salerno 1 Ricerca esaustiva 1 2 Backtrack 3 2.1 Backtrack per enumerazione......................................
Informatica Generale Homework di Recupero 2016
Informatica Generale Homework di Recupero 016 docente: Ivano Salvo Sapienza Università di Roma Gruppo 1 Esercizio 1.1 Scrivere un programma C che presi in input due interi positivi a ed b (a, b > 0) calcola
Alberi binari e alberi binari di ricerca
Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica
2.2 Alberi di supporto di costo ottimo
. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) protocolli reti IP memorizzazione compatta di
Algoritmi e Strutture Dati. Introduzione
Algoritmi e Strutture Dati Introduzione Alberto Montresor Università di Trento 2016/09/14 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1 Introduzione
Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)
Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I) Algoritmi greedy Gli algoritmi per problemi di ottimizzazione devono in genere operare una sequenza di scelte per arrivare alla soluzione
Algoritmi e Strutture Dati Geometria Computazionale. Daniele Loiacono
Algoritmi e Strutture Dati Geometria Computazionale Riferimenti 2 T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein Introduction to Algorithms, Second Edition Queste trasparenze sono disponibili su http://dei.polimi.it/upload/loiacono
Implementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
Strutture dati per insiemi disgiunti
Strutture dati per insiemi disgiunti Servono a mantenere una collezione S = {S 1, S 2,..., S k } di insiemi disgiunti. Ogni insieme S i è individuato da un rappresentante che è un particolare elemento
Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen
Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di
Grafi: visita generica
.. Grafi: visita generica Una presentazione alternativa (con ulteriori dettagli) Algoritmi di visita Scopo: visitare tutti i vertici di un grafo (si osservi che per poter visitare un vertice occorre prima
Strutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
Introduzione alla programmazione lineare
Introduzione alla programmazione lineare struttura del problema di PL forme equivalenti rappresentazione e soluzione grafica rif. Fi 1.2; BT 1.1, 1.4 Problema di programmazione lineare Dati: un vettore
Grafi pesati Minimo albero ricoprente
Algoritmi e Strutture Dati Definizioni Grafi pesati Minimo albero ricoprente Sia G=(V,E) un grafo non orientato e connesso. Un albero ricoprente di G è un sottografo T G tale che: T è un albero; T contiene
GLI ALBERI BINARI DI RICERCA. Cosimo Laneve
GLI ALBERI BINARI DI RICERCA Cosimo Laneve argomenti 1. alberi binari di ricerca 2. la ricerca di elementi e la complessità computazionale 3. operazione di cancellazione di elementi 4. esempi/esercizi
Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
Fondamenti di Informatica 6. Algoritmi e pseudocodifica
Vettori e matrici #1 Fondamenti di Informatica 6. Algoritmi e pseudocodifica Corso di Laurea in Ingegneria Civile A.A. 2010-2011 1 Semestre Prof. Giovanni Pascoschi Le variabili definite come coppie
Lezione 7 Alberi binari: visite e alberi di ricerca
Lezione 7 Alberi binari: visite e alberi di ricerca Informatica 6 Maggio 2015 Operazioni sugli alberi: visita La visita di un albero esplora tutti i nodi ed esegue una qualche operazione su di essi. Per
Alberi e alberi binari I Un albero è un caso particolare di grafo
Alberi e alberi binari Un albero è un caso particolare di grafo È costituito da un insieme di nodi collegati tra di loro mediante archi Gli archi sono orientati (ogni arco esce da un nodo origine ed entra
Algoritmi e Strutture Dati
Introduzione ai grafi Grafi: Definizione e Algoritmi di visita Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2007/08 Introduzione ai
Algoritmi e giochi combinatori
Algoritmi e giochi combinatori Panoramica Giochi combinatori Programmi che giocano Albero di un gioco L algoritmo Minimax 1 Perché studiare i giochi? Problemi che coinvolgono agenti in competizione tra
2.2 Alberi di supporto di costo ottimo
. Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione
Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo
1 Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione dell informazione Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo
Algoritmi e strutture di dati 2
Paola Vocca Lezione 4: Programmazione dinamica 1 Caratteristiche Programmazione dinamica: paradigma basato sullo stesso principio utilizzato per il divide et impera o il problema viene decomposto in sotto-problemi
Triangolazione di Delaunay
Triangolazione di Delaunay Francesco Visentin Dottorato di Ricerca in Informatica - XXVIII Ciclo Università degli Studi di Verona 13 Maggio 2013 Triangolazione Presentazione Divisione di una superficie
Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree
Dati e Algoritmi I (Pietracaprina) Esercizi su Alberi Binari di Ricerca e (2,4)-Tree Dati e Algoritmi I (Pietracaprina): Esercizi 1 Problema 1 Si definisca Interval Tree un albero binario di ricerca le
Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento
Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
Heap e code di priorità
Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010
Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio
Algoritmi Greedy Tecniche Algoritmiche: tecnica greedy (o golosa) Idea: per trovare una soluzione globalmente ottima, scegli ripetutamente soluzioni ottime localmente Un esempio Input: lista di interi
Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento
Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Ricerca binaria Assunzione:
Definizione FONDAMENTI DI INFORMATICA. Esempio di algoritmo: determinare il maggiore di due numeri interi x, y. Proprietà degli algoritmi
Università degli Studi di Cagliari Corsi di Laurea in Ingegneria Chimica e Ingegneria Meccanica FONDAMENTI DI INFORMATICA http://www.diee.unica.it/~marcialis/fi A.A. 201/2017 Docente: Gian Luca Marcialis
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Laboratorio di Algoritmi e Strutture Dati. Code con Priorità
Laboratorio di Algoritmi e Strutture Dati Code con Priorità Teresa M.A. Basile [email protected] Dipartimento di Informatica Università degli Studi di Bari Aldo Moro Materiale di base gentilmente concesso
ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I
ALGORITMI DI OTTIMIZZAZIONE M Esercizi Parte I Esercizio 1 Dati n oggetti ed un contenitore, ad ogni oggetto j (j = 1,, n) sono associati un peso p j ed un costo c j (con p j e c j interi positivi). Si
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output
Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output F = { (s, s ) } per ogni s esiste una e una sola coppia (s, s ). Esempio: un algoritmo che calcola il quadrato di
2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1
. Cammini ottimi E. Amaldi Fondamenti di R.O. Politecnico di Milano .. Cammini minimi e algoritmo di Dijkstra Dato un grafo orientato G = (N, A) con una funzione di costo c : A c ij R e due nodi s e t,
