Algoritmi e Strutture Dati

Slides:



Advertisements
Presentazioni simili
Algoritmi e Strutture Dati
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 19 - Tecniche risolutive per problemi intrattabili Alberto Montresor Università di Trento This.
“Intervista sul mondo del lavoro”
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Informatica Generale Alessandra Di Pierro
Introduzione Cosa sono le reti di Petri?
Frontespizio Economia Monetaria Anno Accademico
I sistemi di riferimento
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Reaching Definitions. Tino CortesiTecniche di Analisi di Programmi 2 Reaching definitions Dato un punto del programma, quali sono i comandi di assegnamento.
Ordini Parziali - Reticoli
Esercitazioni su circuiti combinatori
La gestione delle controversie interne relatore: Silvio Beorchia.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati.
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Strutture dati per.
Algoritmi e Strutture Dati Capitolo 2 Modelli di calcolo e metodologie di analisi.
Algoritmi e Strutture Dati
1 Esempi di consistenza sui limiti Non consistente sui limiti, considera Z=2, poi X-3Y=10 Ma il dominio qui sotto e consistente sui limiti: Confrontare.
Algoritmo di Ford-Fulkerson
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Capitolo 4 Ordinamento: Heapsort Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Capitolo 9 Il problema della gestione di insiemi disgiunti (Union-find) Algoritmi e Strutture Dati.
Canale A. Prof.Ciapetti AA2003/04
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
eliana minicozzi linguaggi1a.a lezione2
Seminario su clustering dei dati – Parte II
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
1 © Alberto Montresor Algoritmi e Strutture Dati Capitolo 7 - Tabelle hash Alberto Montresor Università di Trento This work is licensed under the Creative.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
Cos’è un problema?.
Lezione 4 Probabilità.
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
TECNOLOGIE DELLINFORMAZIONE E DELLA COMUNICAZIONE PER LE AZIENDE Materiale di supporto alla didattica.

1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
Calcolo Parallelo e Distribuito
LE SAI LE TABELLINE? Mettiti alla prova!.
Algoritmi e Strutture Dati
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Riconfigurare il diritto dautore. Lipertesto, una necessità di riconfigurazione. Secondo G. P. Landow, lavvento dellipertesto implica la necessità di.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill,
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
I chicchi di riso e la sfida al Bramino
Algoritmi e Strutture Dati
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA
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.
Transcript della presentazione:

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. Bactracking © Alberto Montresor

Classi di problemi (decisionali, di ricerca, di ottimizzazione) 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 © Alberto Montresor

Costruire almeno una soluzione 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 © Alberto Montresor

Trovare le soluzioni ottimali 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) © 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 · 106 permutazione di 10 elementi 220 = 1.05 · 106 sottoinsieme di 20 elementi Inoltre, a volte non è necessario analizzare l'intero spazio delle soluzioni © 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 © Alberto Montresor

Organizzazione generale 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 © Alberto Montresor

Si può fare backtrack su più passi di ricorsione 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 © Alberto Montresor

Spazio di ricerca ≡ albero di decisione 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 © Alberto Montresor

Lo spazio di ricerca può essere ridotto: 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 © Alberto Montresor

Due possibili approcci: Ricorsivo: 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

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

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

In che ordine vengono stampati gli insiemi? 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) © Alberto Montresor

Esempio 1: versione iterativa © Alberto Montresor

Elencare tutti i sottoinsiemi di dimensione k di un insieme S 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? © Alberto Montresor

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

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

Esempio 2: Tentativo corretto © Alberto Montresor

Esempio 2: vantaggi © Alberto Montresor

Versione efficiente per valori di k “piccoli” (vicini a 1) 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

Stampa di tutte le permutazioni di un insieme A 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 © 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. © Alberto Montresor

Idea: ci sono n2 caselle dove piazzare una regina Algoritmo: n 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 in S[1..i-1], { false } altrimenti # soluzioni per n=8 264 ~ 1.84 · 1019 Commenti: Forse abbiamo un problema di rappresentazione? Matrice binaria molto sparsa © Alberto Montresor

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-....” ? © Alberto Montresor

S[1..n] coordinate in 1..n2 S[i] coordinata della regina i 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 © Alberto Montresor

S[1..n] valori in 1..n S[i] colonna della regina i 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 © Alberto Montresor

# soluzioni effettivamente visitate: 15720 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=8 n! = 40320 ~ 4.03 · 104 # soluzioni effettivamente visitate: 15720 © Alberto Montresor

Non è la soluzione migliore per ottenere una soluzione 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 © 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 © Alberto Montresor

Matrice n∙n contenente le cui celle contengono Giro 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 © Alberto Montresor

Giro di cavallo © Alberto Montresor

“Suuji wa dokushin ni kagiru” Sudoku “Suuji wa dokushin ni kagiru” © Alberto Montresor

Sudoku © Alberto Montresor

© Alberto Montresor

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

Si consideri ancora una scacchiera n·n, con n=2k Un 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 possibile ricopertura della scacchiera © Alberto Montresor

Inviluppo convesso (Convex hull) 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 © Alberto Montresor

Un algoritmo banale ma inefficiente 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 © Alberto Montresor

Inviluppo convesso © Alberto Montresor

Il punto con ordinata minima fa parte dell’inviluppo convesso 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 © Alberto Montresor

© Alberto Montresor

Algoritmo di Graham © Alberto Montresor

Algoritmo di Graham © Alberto Montresor

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