Note per la Lezione 17 Ugo Vaccaro
|
|
|
- Daniele Stefani
- 6 anni fa
- Просмотров:
Транскрипт
1 Progettazione di Algoritmi Anno Accademico Note per la Lezione 17 Ugo Vaccaro Per la risoluzione di Problemi di Ottimizzazione (ovvero problemi per cui desideriamo trovare la migliore soluzione all interno di un insieme di possibili soluzioni), si possono usare, oltre gli algoritmi basati su Programmazione Dinamica, anche gli algoritmi cosiddetti Greedy. Informalmente, un algoritmo Greedy costruisce una soluzione ad un dato problema iterativamente in passi: L algoritmo inizia con il trovare una soluzione ad un sottoproblema di piccola taglia; Ad ogni passo aggiunge una nuova parte alla soluzione precedentemente computata, fino ad ottenere una soluzione al problema intero; La nuova parte di soluzione che viene scelta ad ogni dato passo è quella che, tra tutte le possibili parti che si potrebbero aggiungere, risulta essere la migliore (ad es., in un problema di ottimizzazione di massimo, potrebbe essere quella che ci dà il maggior incremento di valore alla soluzione parziale fin ora calcolata, in un problema di minimo potrebbe essere quella che causa il minor incremento di costo). Vediamo un applicazione della tecnica Greedy ad un problema già visto, ovvero il Problema del cambio delle monete. Formalmente, abbiamo il seguente problema: Input: Un valore monetario V, ed un vettore di valori di monete v[1]v[n], con v[1] > v[2] > > v[n] = 1. Output: Un insieme S di cardinalità minima di monete, la cui somma dei valori sia esattamente pari a V. In accordo all idea Greedy prima delineata, un possibile algoritmo potrebbe essere quello in cui si cerca di esprimere il valore monetario V utilizzando, se possibile, sempre la moneta di valore massimo il cui valore sia del valore corrente che vogliamo cambiare. Più precisamente, avremmo il seguente algoritmo. Cambio greedy (V,v[1]v[n]) 1. S= 2. WHILE (V>0) { 3. sia i la moneta di massimo valore tale che v[i] V 4. S=S {i}, 5. V=V-v[i] } 6. RETURN S Eseguendo l algoritmo Cambio greedy con il seguente input: v[1]=10,v[2]=5,v[3]=1,v=37, otterremmo che l insieme S ha la seguente composizione, ad ogni iterazione del ciclo WHILE. S = {1}, S = {1,1}, S = {1,1,1}, S = {1,1,1,2}, S = {1,1,1,2,3}, S = {1,1,1,2,3,3} Mostriamo che l algoritmo Cambio greedy restituisce l insieme S di cardinalità minima, sull esempio in questione. La prova è per induzione su V. 1
2 Sia V > 10, proviamo innanzitutto che la soluzione ottima, ovvero quella con il minor numero di monete, (sia essa Opt(V)) deve contenere la moneta 1 di valore 10. Infatti, se non la contenesse, allora al suo posto Opt(V) contiene o 10 occorrenze della moneta 3 (di valore 1) o 2 occorrenze della moneta 2 (di valore 5), oppure 5 occorrenze della moneta 3 ed una occorrenza della moneta 2. In ogni caso, sostituendo a tali occorrenze una sola occorrenza della moneta 1 di valore 10 diminueremmo il numero di monete in Opt(V), contro l ipotesi che Opt(V) fosse un insieme di cardinalitá minima. Per ipotesi induttiva, l insieme S prodotto dall algoritmo Cambio greedy(v 10,v[1]v[2]v[3]) è una soluzione ottima per il sottoproblema di esprimere il valore monetario V 10 usando le monete v[1], v[2], v[3], ovvero S = Opt(V 10). Di conseguenza, vale che S = S {10} = Opt(V 10) {10} = Opt(V). Ma allora perchè abbiamo precedentemente usato Programmazione Dinamica? Perchè l algoritmo Cambio greedy non fornisce la soluzione ottima su tutti gli input. Infatti, nel caso in cui V = 12, e v[1] = 10,v[2] = 6,v[3] = 1, l algoritmo Cambio greedy restituirebbe la soluzione S = {1, 3, 3} di cardinalità 3, mentre la soluzione con il minor numero di monete è chiaramente {2,2}. Il problema di stabilire se, dati V e v[1],v[n], l algoritmo Greedy restituisce una soluzione ottima, non è agevole da risolvere, ma di questo non ci occuperemo. Come primo esempio di applicazione della tecnica Greedy, consideriamo il problema della Selezione di attività. Input del problema: Supponiamo di avere un insieme A = {A 1,A 2,,A n } di attività, dove ciascuna attività A i ha un tempo di inizio s i, ed un tempo di fine f i, con s i < f i (in altre parole, l attività A i deve essere svolta nell intervallo temporale [s i,f i ]) Le attività in A devono essere assegnate ad una risorsa, sotto la condizione che se A i ed A j vengono entrambe assegnate alla risorsa, allora [s i,f i ] [s j,f j ] = (in tal caso, diremo che l attività A i ed A j sono compatibili). In altri termini, possono essere assegnate alla risorsa solo attività il cui svolgimento temporale non si sovrappone (si pensi, ad esempio, alle attività come a dei corsi ed alla risorsa come ad un aula in cui essi si devono svolgere). Output del problema: Calcolare un sottoinsieme di S A di attività a due a due compatibili, di cardinalità massima. Vediamo un esempio, con n = 11, A = {A 1,A 2,,A 11 }, A 1 = [1,4], A 2 = [3,5], A 3 = [0,6], A 4 = [5,7], A 5 = [3,8], A 6 = [5,9], A 7 = [6,10], A 8 = [8,11], A 9 = [8,12], A 10 = [2,13], A 11 = [12,14]. In tal caso, una prima possibile soluzione sarebbe: A 3,A 7,A Una seconda possibile soluzione sarebbe A 1,A 4,A 8,A 11. 2
3 Costruiamo un pò di intuizione per l algoritmo Greedy. Ricordiamo che l algoritmo Greedy costruisce la soluzione iterativamente, effettuando ad ogni passo la scelta che in quel momento sembra essere la migliore. Chiedamoci quindi quale potrebbe essere la prima migliore scelta (ovvero la prima attività A i ) da effetture. Visto che vogliamo alla fine aver scelto un insieme di cardinalità massima di attività che non si intersecano tra di loro, sembrerebbe ragionevole scegliere come prima attività da inserire nella soluzione una che richieda il minor tempo di essere svolta, cosí da massimizzare il tempo utile rimanente in cui svolgere eventuali altre attività. L idea sembra promettente, però immaginiamo la situazione seguente: 0 T L attività in rosso è quella che richiede il minor tempo. Le attività in nero sono le restanti altre. Poichè tutte si intersecano con quella in rosso, una volta aver scelto quella in rosso non possiamo scegliere nessun altra attività. Quindi l algoritmo produrrebbe una soluzione consistente di una sola attività, chiaramente non ottima in quanto di attività disgiunte ve ne sono due, indicate dalle frecce verdi. L idea non è però del tutto sbagliata (in particolare, porterebbe ad una soluzione che ha cardinalità almeno pari alla metà di quella ottima, e provare questo fatto ciò potrebbe essere un utile esercizio). In più l idea, opportunamente sviluppata, può portare alla determinazione della soluzione ottima al problema, ovvero a determinare un insieme di attività a due a due compatibili, di cardinalità massima. L osservazione di base è che nella soluzione ottima o ci sarà la prima attività A 1 oppure essa non sarà presente. Se essa sarà presente, allora ci rimane di trovare la migliore soluzione possibile ai sottoproblemi A ed A relativi ad attività compatibili con A 1 : A = {A j : f j < s 1 } A = {A k : s k > f 1 }. Se invece A 1 non é presente, allora occorrerà risolvere in maniera ottima il sottoproblema relativamente alle attività {A 2,,A n }. La soluzione ottima al problema globale sarà la migliore di quella che potremmo ottenere 3
4 dalle due alternative disopra. Queste considerazioni danno origine ad una equazione di ricorrenza e relativo algoritmo di Programmazione Dinamica di complessità O(n 2 ) (sviluppare un tale algoritmo sarebbe un ulteriore utile esercizio.) Possiamo però semplificare le cose e far di meglio. Prima osservazione: Se le attività fossero ordinate in accordo ai loro tempi di fine, allora l attività A 1 sarebbe quella che termina prima di tutte. Pertanto, il sottoproblema A = {A j : f j < s 1 } prima individuato sarebbe vuoto. Seconda osservazione: Se le attività fossero ordinate in accordo ai loro tempi di fine, allora scegliendo l attività A 1, avremmo massimizzato il tempo libero che ci rimane, in cui poter eventualmente eseguire le restanti attività. Ciò ci lascia pensare che forse conviene prenderla l attività A 1, e quindi ignorare il sottoproblema derivante dalla non presa in considerazione di A 1. Il seguente algoritmo usa l idea più sofisticata qui descritta: 1. Ordina le attività in base al loro tempo di fine (sia A 1,, A n tale sequenza ordinata). 2. Scegli la prima attività A 1 3. Elimina tutte le attività che si intersecano con A 1 (ovvero che iniziano prima che A 1 finisca) 4. Ricorsivamente risolvi il problema sulle attività che restano. Più formalmente, avremo il seguente algoritmo. Greedy Activity Selector(s 1,,s n,f 1,,f n ) 1. Ordina le attività in accordo alle f i 2. S={A 1 }, j=1 3. FOR (i=2, i<n+1, i=1+1) { 4. IF (s i f j ) { 5. S=S {A i } 6. j=i } } 7. RETURN S La complessità dell algoritmo è chiaramente dominata dal tempo richiesto nell esecuzione dell ordinamento nel passo 1., in quanto il resto dell algoritmo può essere realizzato in tempo O(n). Pertanto, l intero algoritmo richiede tempo Θ(nlogn) nel caso peggiore. Vediamo un esempio di esecuzione dell algoritmo, in cui n = 11, A = {A 1,A 2,,A 11 }, con A 1 = [1,4], A 2 = [3,5], A 3 = [0,6], A 4 = [5,7], A 5 = [3,8], A 6 = [5,9], A 7 = [6,10], A 8 = [8,11], A 9 = [8,12], A 10 = [2,13], A 11 = [12,14]. Le attività in rosso sono quelle selezionate dall algoritmo
5 Proviamo che l algoritmo sopra descritto produce un insieme di attività mutualmente non intersecanti di cardinalità massima. Teorema 1: L algoritmo Greedy Activity Selector (G A S) produce un sottoinsieme S di attività a due a due compatibili, di cardinalitá massima. Prova. Che le attività scelte dall algoritmo G A S siano mutualmente compatibili è ovvio dal modo con cui l algoritmo opera. Per la prova che l insieme prodotto dall algoritmo è di cardinalità massima, procediamo per contraddizione. Supponiamo che la soluzione prodotta da G A S non sia quella di di cardinalità massima, che denotiamo con OPT. Siano A i1,,a ik le attività selezionate da G A S. Siano A j1,,a jm le attività in una soluzione ottima (OPT), con r 1 il più grande intero per cui A i1 = A j1,,a ir 1 = A jr 1 (r 1 può anche essere = 0). Ovvero, siamo in una situazione siffatta: G A S: OPT: A i1 A j1 A i2 A j2 A i3 A ir 1 A j3 A jr 1 mentre G A S: OPT: A i1 A j1 A i2 A j2 A i3 A ir 1 A j3 A jr 1 A ir A jr Per come funziona l algoritmo G A S, A ir termina prima di A jr Perchè allora non sostituiamo l attività A jr in OPT con A ir? Facciamolo, ed otteniamo G A S: OPT: A i1 A j1 A i2 A j2 A i3 A ir 1 A j3 A jr 1 A ir A ir Con questo, il teorema è provato. La soluzione OPT rimane compatibile, ottima, ma adesso contraddice la massimalità di r 1, assurdo! 5
6 Notiamo che l algoritmo G A S può non produrre soluzioni ottime nel caso in cui le attività abbiano associato un valore ed occorre selezionare un sottoinsieme di attività compatibili di valore totale massimo. In altre parole, abbiamo provato che G A S produce soluzioni ottime solo quando tutte le attività abbiano valore =1. Esempio: La soluzione prodotta da G A S ha valore totale 1, quella di valore ottimo ha valore Questo è il motivo per cui abbiamo usato PD per risolvere il problema delle attività quando ciascuna di esse ha un arbitrario valore. 6
Note per la Lezione 14 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2018 2019 Note per la Lezione 14 Ugo Vaccaro Applichiamo la tecnica di Programmazione Dinamica al seguente problema. Input del problema: Supponiamo di avere un
Note per la Lezione 6 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,
Note per la Lezione 7 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 7 Ugo Vaccaro Sempre sulla tecnica Programmazione Dinamica Ricordiamo che lo sviluppo di algoritmi basati sulla Programmazione Dinamica
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
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
Matroidi, algoritmi greedy e teorema di Rado
Matroidi, algoritmi greedy e teorema di Rado per il corso di Laboratorio di Algoritmi e Ricerca Operativa Dott. Alberto Leporati / Prof.ssa Enza Messina Dipartimento di Informatica, Sistemistica e Comunicazione
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
Programmazione Dinamica (PD)
Programmazione Dinamica (PD) Altra tecnica per risolvere problemi di ottimizzazione, piu generale degli algoritmi greedy La programmazione dinamica risolve un problema di ottimizzazione componendo le soluzioni
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
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
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
Programmazione dinamica
Programmazione dinamica Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Programmazione
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
Lezione 4 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2017 2018 Lezione 4 Ugo Vaccaro Introduciamo ora la notazione Ω, che ci sarà utile quando vorremo valutare limitazioni inferiori al tempo di esecuzione di algoritmi
Complementi ed Esercizi di Informatica Teorica II
Complementi ed Esercizi di Informatica Teorica II Vincenzo Bonifaci 21 maggio 2008 4 Problemi di ottimizzazione: il Bin Packing Il problema bin packing è il seguente: dato un insieme di n oggetti di dimensioni
Esercizi per il corso di Algoritmi, anno accademico 2011/12
Esercizi per il corso di Algoritmi, anno accademico 2011/12 Esercizi sulla Tecnica Divide et Impera N.B. Tutti gli algoritmi vanno scritti in pseudocodice (non in Java, nè in C++, etc. ). Di tutti gli
Esercitazione 3. Osserviamo che, dato un grafo con pesi distinti, questo ammette un unico MST.
Esercitazione 3 Problema 6: Sia G = (V, E) un grafo con pesi distinti sugli archi ed e E un arco di G. Progettare un algoritmo lineare in grado di determinare se esiste un MST di G che contiene l arco
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
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)
Note per la Lezione 22 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 0 09 Note per la Lezione Ugo Vaccaro Nella lezione scorsa abbiamo introdotto la vista in ampiezza di grafi. Essenzialmente, esso è un metodo per esplorare in
Algoritmi greedy. Progettazione di Algoritmi a.a Matricole congrue a 1 Docente: Annalisa De Bonis
Algoritmi greedy Progettazione di Algoritmi a.a. 2016-17 Matricole congrue a 1 Docente: Annalisa De Bonis 1 Scelta greedy Un algoritmo greedy è un algoritmo che effettua ad ogni passo la scelta che in
MATEMATICA DISCRETA CLAUDIA MALVENUTO PRIMA PROVA IN ITINERE 24 APRILE 2014
MATEMATICA DISCRETA CLAUDIA MALVENUTO PRIMA PROVA IN ITINERE 4 APRILE 014 1. Trovare il numero di stringhe di lunghezza n che si possono formare usando le lettere A, B, C, D, E in modo che ogni stringa
Come scrivere bene codice? (1 di 1)
DIAGRMMI DI FLUSSO Come scrivere bene codice? (1 di 1) Prima di iniziare a scrivere un programma: Acquisire profonda comprensione del problema; Progettare un approccio per la risoluzione del problema.
Introduzione alla programmazione
Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste
Programmazione dinamica. Progettazione di Algoritmi a.a Matricole congrue a 1 Docente: Annalisa De Bonis
Programmazione dinamica Progettazione di Algoritmi a.a. 2016-17 Matricole congrue a 1 Docente: Annalisa De Bonis 1 Paradigmi della Progettazione degli Algoritmi Greedy. Costruisci una soluzione in modo
Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi
Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Francesco Pasquale 6 maggio 2015 Esercizio 1. Su una strada rettilinea ci sono n case nelle posizioni 0 c 1 < c 2 < < c n. Bisogna installare
Lista di esercizi 11 maggio 2016
Lista di esercizi 11 maggio 2016 1. Determinare il numero di sequenze binarie di lunghezza n che contengano almeno una coppia di 0 consecutivi. Soluzione. Potrebbe essere utile un programma di calcolo
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
Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities
Metodi e Modelli per l Ottimizzazione Combinatoria Cover inequalities L. De Giovanni M. Di Summa In questa lezione introdurremo una classe di disuguaglianze, dette cover inequalities, che permettono di
Possibile applicazione
p. 1/4 Assegnamento Siano dati due insiemi A e B entrambi di cardinalità n. Ad ogni coppia (a i,b j ) A B è associato un valore d ij 0 che misura la "incompatibilità" tra a i e b j, anche interpretabile
Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno
Algoritmi e Strutture Dati Esercizi Svolti Giuseppe Persiano Dipartimento di Informatica ed Appl Renato M Capocelli Università di Salerno Indice Esercizio 12-3 5 Esercizio 23-4 6 Esercizio 63-3 7 Esercizio
A lezione sono stati presentati i seguenti passi per risolvere un problema:
Calcolo delle radici di un polinomio Problema: Dati i coefficienti a,b,c di un polinomio di 2 grado della forma: ax^2 + bx + c = 0, calcolare le radici. A lezione sono stati presentati i seguenti passi
Tecniche Algoritmiche: divide et impera
Tecniche Algoritmiche: divide et impera Una breve presentazione F. Damiani - Alg. & Lab. 04/05 Divide et impera (o Divide and conquer) Per regnare occorre tenere divisi i nemici e trarne vantaggio F. Damiani
