Informatica II. Capitolo 13 Programmazione dinamica. Programmazione dinamica vs Divide-et-impera. Divide-et-impera Tecnica ricorsiva
|
|
- Dante Donati
- 5 anni fa
- Visualizzazioni
Transcript
1 Programmazione dinamica vs Divideetimpera Divideetimpera Tecnica ricorsiva Informatica II Approccio topdown (problemi divisi in sottoproblemi) Vantaggioso solo quando i sottoproblemi sono indipendenti Capitolo Programmazione dinamica Vantaggioso se non si deve risolvere lo stesso sottoproblema più volte Programmazione dinamica Tecnica iterativa Approccio bottomup Vantaggiosa quando ci sono sottoproblemi in comune e si devono risolvere più volte gli stessi sottoproblemi Esempio semplice: il triangolo di Tartaglia Adattamento delle slide originali di A.Montresor. Disponibili secondo Creative Commons AttributionNonCommercialShareAlike icense. Coefficienti binomiali Triangolo di Tartaglia Versione ricorsiva Coefficienti binomiali Si ottiene direttamente dalla definizione Il numero di modi di scegliere k oggetti da un insieme di n oggetti I coefficienti di un equazione di grado n Domanda Complessità?
2 Triangolo di Tartaglia Triangolo di Tartaglia Versione ricorsiva Versione iterativa Si ottiene direttamente dalla definizione Basata su programmazione dinamica Domanda Domanda Complessità: il numero di chiamate ricorsive cresce proprio come C(n,k) Complessità? perché si deve calcolare più volte lo stesso valore Triangolo di Tartaglia Quando applicare la programmazione dinamica? Versione iterativa Si può utilizzare se valgono queste proprietà: Basata su programmazione dinamica Sottostruttura ottima è possibile combinare le soluzioni dei sottoproblemi per trovare la soluzione di un problema più grande Domanda Complessità: O(n). Infatti ogni valore è memorizzato in una tabella e quindi viene calcolato una volta sola In tempo polinomiale! le decisioni prese per risolvere in modo ottimo un problema rimangono valide quando esso diviene un sottoproblema di un problema più grande Sottoproblemi ripetuti Un sottoproblema può occorrere più volte Spazio dei sottoproblemi Ci deve essere un numero polinomiale di sottoproblemi da risolvere 7 8
3 Programmazione dinamica: cosa devo fare? Catena di moltiplicazione di matrici Caratterizzare la struttura di una soluzione ottima Problema: Data una sequenza di matrici A, A, A,, An, compatibili a al prodotto, vogliamo calcolare il loro prodotto. Definire ricorsivamente il valore di una soluzione ottima a soluzione ottima ad un problema contiene le soluzioni ottime ai sottoproblemi Cosa vogliamo ottimizzare a moltiplicazione di matrici si basa sulla moltiplicazione scalare come operazione elementare. Calcolare il valore di una soluzione ottima bottomup, cioè calcolando prima le soluzioni ai casi più semplici: Vogliamo calcolare il prodotto impiegando il numero minore possibile di moltiplicazioni Si usa una tabella per memorizzare le soluzioni dei sottoproblemi uso della tabella evita di ripetere lo stesso lavoro più volte Attenzione: Costruire la (una) soluzione ottima. Il prodotto di matrici non è commutativo......ma è associativo: (A A) A = A (A A) Si deve determinare la parentesizzazione ottima! 9 Catena di moltiplicazione tra matrici: un semplice esempio matrici: A x (A B ) ((A B ) C ) B x Catena di moltiplicazione tra matrici: un altro esempio matrici: C x # Moltiplicazioni Memoria = = ((( A B ) C ) D ) (( A ( B C )) D ) (( A B ) ( C D )) ( A (( B C ) D )) ( A ( B ( C D ))) A x B x C x D x : 87 moltiplicazioni : moltiplicazioni : moltiplicazioni : moltiplicazioni : moltiplicazioni ((( A B ) C ) D ) : 87 (B C) (A (B C)) = = (A B) (( A B ) C ) (( A B ) C ) D = = = 7 87
4 Applicare la programmazione dinamica Parentesizzazione Definizione: Una parentesizzazione Pi, del prodotto Ai Ai+ A consiste e fasi principali: nella matrice Ai se i = ; oppure Caratterizzare la struttura di una soluzione ottima Definire ricorsivamente il valore di una soluzione ottima nel prodotto di due parentesizzazioni (Pi,k Pk+,) altrimenti. Calcolare il valore di una soluzione ottima bottomup (dal basso verso l alto) Costruzione di una soluzione ottima Esempio: Nei lucidi successivi: (A (A A )) (A (A A )) k= Vediamo ora una ad una le quattro fasi del processo di sviluppo applicate al problema della parentesizzazione ottima Ultima moltiplicazione Parentesizzazione ottima Parentesizzazione ottima Parentesizzazione ottima Determinare il numero di moltiplicazioni scalari necessari per i prodotti tra le matrici in ogni parentesizzazione Determinare il numero di moltiplicazioni scalari necessari per i prodotti tra le matrici in ogni parentesizzazione Scegliere una tra le parentesizzazioni che richiedono il numero minimo di moltiplicazioni Scegliere una tra le parentesizzazioni che richiedono il numero minimo di moltiplicazioni Motivazione: Vale la pena di spendere un po' di tempo per cercare la parentesizzazione migliore, per risparmiare tempo dopo Domanda Quante sono le parentesizzazioni possibili? Motivazione: Vale la pena di spendere un po' di tempo per cercare la parentesizzazione migliore, per risparmiare tempo dopo Parentesizzazione ottima Domanda n=, n=, n=??? Quante sono le parentesizzazioni possibili? n=, n=, n=??? I numeri catalani :
5 Definizioni Struttura di una parentesizzazione ottima Un po di notazione: A A A An il prodotto di n matrici, da ottimizzare ci il numero di righe della matrice Ai ci il numero di colonne della matrice Ai A[i..] il prodotto Ai Ai+ A P[i..] una parentesizzazione di A[i..] (non necessariamente ottima) Sia A[i..] = Ai Ai+ A una sottosequenza del prodotto di matrici Si consideri una parentesizzazione ottima P[i..] di A[i..] Esiste una ultima moltiplicazione : in altre parole, esiste un indice k tale che P[i..] = P[i..k] P[k+..] Domanda: Cosa possiamo dire delle due sottoparti P[i..k] e P[k+..]? Il seguente teorema 7 Struttura di una parentesizzazione ottima 8 Struttura di una parentesizzazione ottima Teorema (sottostruttura ottima) In altre parole: Se P[i..] = P[i..k] P[k+..] è una parentesizzazione ottima del prodotto A[i..], allora P[i..k] e P[k+..] sono parentesizzazioni ottime dei prodotti A[i..k] e A[k+..], rispettivamente. Il teorema afferma che esiste una sottostruttura ottima: Ogni soluzione ottima al problema della parentesizzazione contiene al suo interno le soluzioni ottime dei due sottoproblemi Dimostrazione Per assurdo. Supponiamo esista un parentesizzazione ottima P'[i..k] di A[i..k] con costo inferiore a P[i..k] Programmazione dinamica: Allora, P'[i..k] P[k+..] sarebbe una parentesizzazione di A[i..] con costo inferiore a P[i..], assurdo (oss: il risultato deve essere lo stesso e l ultima moltiplicazione è la stessa ). 'esistenza di sottostrutture ottime è una delle caratteristiche da cercare per decidere se la programmazione dinamica è applicabile Prossima fase: Definire ricorsivamente il costo di una soluzione ricorsiva 9
6 Definire ricorsivamente il valore di una soluzione ottima Definire ricorsivamente il valore di una soluzione ottima Definizione: sia M[i,] il numero minimo di prodotti scalari richiesti per calcolare il prodotto A[i,] Ma qual è il valore di k? Non lo conosciamo... Come calcolare M[i,]?... ma possiamo provarli tutti! Caso base: i=. Allora, M[i,] = k può assumere valori fra i e Passo ricorsivo: i <. Esiste una parentesizzazione ottima P[i..] = P[i..k] P[k+..]; sfruttiamo la ricorsione: a formula finale sarà: M[i,] = mini k < { M[i,k] + M[k+, ] + ci ck c } M[i,] = M[i,k] + M[k+,] + ci ck c Prodotti per P[i..k] Prodotto di una coppia di matrici: n. righe: prima matrice n. colonne: ultima matrice Prodotti per P[k+..] Esempio Esempio i \ R i \ R M[,] = min k<{ M[,k] + M[k+,] + cckc } = min { M[,] + M[,] + ccc, M[,] + M[,] + ccc } M[,] = min k < { M[,k] + M[k+,] + cckc } = M[,] + M[,] + ccc = ccc
7 Esempio Esempio i \ R i \ R M[,] = min k<{ M[,k] + M[k+,] + cckc } = min { M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc } M[,] = min k<{ M[,k] + M[k+,] + cckc } = min { M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc } Esempio Calcolo bottomup del valore della soluzione i \ R Passiamo ora al terzo passo della programmazione dinamica: calcolare in modo bottomup il valore della soluzione ottima Notiamo che la definizione ricorsiva di M[i,] suggerisce di utilizzare un approccio ricorsivo topdown per risolvere il problema: Per risolvere il problema sulla sequenza completa [,n] il meccanismo ricorsivo individua i sottoproblemi da risolvere Proviamo... M[,] = min k<{ M[,k] + M[k+,] + cckc } = min { M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc } Input: un array c[..n] con le dimensioni delle matrici, c[] è il numero di righe della prima matrice c[i] è il numero di colonne della matrice Ai 7 8
8 Soluzione ricorsiva topdown Critica all'approccio topdown Alcune riflessioni a soluzione ricorsiva topdown è Ω(n) Non è migliore dell'approccio basato su forza bruta! Qual è il difetto? Il difetto principale è che molti problemi vengono risolti più volte. Esempio: Domanda: Complessità risultante? 9 Calcolare la soluzione ottima in modo bottomup Calcolare la soluzione ottima in modo bottomup E' illuminante osservare che il numero di possibili problemi (distinti) è molto inferiore a n. Infatti: algoritmo parentesizzazione() prende in ingresso un array c[..n] con le dimensioni delle matrici Ne esiste uno per ogni scelta di i e (con i n): c[] è il numero di righe della A c[i] è Sottoproblemi con i il numero di righe della matrice Ai+ Sottoproblemi con i = il numero di colonne della matrice Ai utilizza (e ritorna) due matrici n n ausiliarie: Ogni sottoproblema M[i,] che contiene i costi minimi dei sottoproblemi A[i..] S[i,] che contiene il valore di k che minimizza il costo per il sottoproblema È risolvibile utilizzando le soluzioni dei sottoproblemi che sono state eventualmente già calcolate e memorizzate nell'array Idea chiave della programmazione dinamica: Mai calcolare più di una volta la soluzione ad un sottoproblema
9 Algoritmo M[ ] ii\ R i ci M[,] = min k { M[,k] + M[k+,] + cckc } = min { M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc } = min { * 8 *, * *, **} = min { 8,, 8 } = 8 i \ R S[ ] i ci 7 8 M[,] = min k { M[,k] + M[k+,] + cckc } = min { M[,] + M[,] + ccc, M[,] + M[,] + ccc, M[,] + M[,] + ccc } = min { * 8 *, * *, **} = min { 8,, 8 } = 8 Calcolare la soluzione ottima in modo bottomup Considerazioni sull'algoritmo Costo computazionale: O(n) Nota o scopo della terza fase era calcolare in modo bottomup il valore della soluzione ottima Questo valore si trova in M[,n] Per alcuni problemi È anche necessario mostrare la soluzione trovata Per questo motivo registriamo in S[] le informazioni sulla soluzione, mentre procediamo in maniera bottomup
10 Costruire una soluzione ottima Costruire una soluzione ottima Possiamo scrivere un algoritmo che costruisce la soluzione a partire dall'informazione calcolata da parentesizzazione(). a matrice S[] ci permette di determinare il modo migliore di moltiplicare le matrici: S[i,]=k contiene il valore k su cui dobbiamo spezzare il prodotto A[i..] ovvero ci dice che per calcolare A[i..] dobbiamo prima calcolare A[i..k] e A[k+..] e poi moltiplicarle tra loro. Ma questo è un processo facilmente realizzabile tramite un algoritmo ricorsivo 7 Costruire una soluzione ottima 8 Esempio di esecuzione A = A k Ak+ = A A A = A k Ak+ =A A A = A k Ak+ =A.. A A = A k Ak+ = A A A = A k Ak+ =A A S[ ] i \ R A = ( ( A (A A) ) ( (A A ) A) ) 9
11 Un altro problema: Numeri di Fibonacci Implementazione ricorsiva Definiti ricorsivamente: F() = F() = F(n) = F(n)+F(n) Un po' di storia Complessità computazionale eonardo di Pisa, detto Fibonacci Utilizzati per descrivere la crescita di una popolazione di conigli (!) In natura: Pigne, conchiglie, parte centrale dei girasoli, etc. Soluzione T(n) = O(n) In informatica esistono strutture dati ad essi ispirate: Alberi AV minimi, Heap di Fibonacci, etc. Implementazione iterativa Implementazione iterativa. Ancora meglio: risparmio memoria Complessità: Complessità In tempo: O(n) In tempo: O(n) In spazio: O(n) In spazio: O() variabili Array di n elementi n 7 f [] 8 n 7 F 8 F 8 F 8
12 Il problema dello Zaino (Knapsack) Zaino Input Caratterizzazione del problema P(i, c) è il sottoproblema dato dai primi i oggetti da inserire in uno zaino con capacità c Un intero positivo C: la capacità dello zaino n oggetti, tali che l oggetto iesimo è caratterizzato da: Il problema originale corrisponde a P(n, C) un profitto pi e Teorema: la sottostruttura ottima Sia S(i, c) una soluzione ottima per il problema P(i, c) un volume vi, entrambi interi positivi Possono darsi due casi: Problema Se i S(i, c), allora S(i, c){i} è una soluzione ottima per il sottoproblema P(i, cvi ) trovare un sottoinsieme S di {,..., n} di oggetti tale che il volume totale non superi la capacità massima e il profitto totale sia massimo Se i S(i, c), allora S(i, c) è una soluzione ottima per il sottoproblema P(i, c) Esercizio: dimostrare il teorema [sugg: per assurdo] Zaino Memoization Tabella per programmazione dinamica Memoization (annotazione) D[i, c] contiene il profitto massimo ottenibile per il problema P(i,c) Tecnica che fonde l'approccio di memorizzazione della programmazione dinamica con l'approccio topdown di divideetimpera Quando un sottoproblema viene risolto per la prima volta, viene memorizzato in una tabella: ogni volta che si deve risolvere un sottoproblema, si controlla nella tabella se è già stato risolto precedentemente Alcune annotazioni SI: si usa il risultato della tabella Costo di un algoritmo di programmazione dinamica bottomup: O(nC) NO: Non è detto però che sia necessario risolvere tutti i sottoproblemi (dipende dai valori numerici coinvolti nell istanza del problema) si calcola il risultato e lo si memorizza In tal modo, ogni sottoproblema viene calcolato una sola volta e memorizzato come nella versione bottomup Si può adottare un approccio leggermente diverso 7 8
13 Zaino annotato Discussione su memoization Note sulla soluzione Caso pessimo è un valore speciale per indicare che un certo problema non è stato risolto Nel caso pessimo, è comunque O(nC) Gli elementi della tabella D sono inizializzati con il valore Inizializzazione E necessario inizializzare D: costo O(nC) Se il costo dell inizializzazione è asintoticamente inferiore al costo di ricombinare i risultati, si ottiene un guadagno Altrimenti: è possibile utilizzare un altra struttura dati per memorizzare D (per esempio una tabella hash) Complessità pseudopolinomiale a complessità O(nC) è polinomiale nella dimensione dell input? 9 String matching approssimato Esempio Input Input una stringa P = p pm (pattern) una stringa T = t tn (testo), con m n questoèunoscempio unesempio Definizione Domanda Un occorrenza kapprossimata di P in T, con k m, è una copia della stringa P nella stringa T in cui sono ammessi k errori (o differenze) tra caratteri di P e caratteri di T, del seguente tipo: i corrispondenti caratteri in P e in T sono diversi (sostituzione) un carattere in P non è incluso in T (inserimento) un carattere in T non è incluso in P (cancellazione) Qual è il minimo valore k per cui si trova una occorrenza kapprossimata? A partire da dove? Con quali errori? Problema: Trovare un occorrenza kapprossimata di P in T per cui k sia minimo.
14 Sottostruttura ottima Sottostruttura ottima Definizione Definizione Tabella D[...m,...n], i cui elementi D[i,] contengono il minimo valore k per cui esiste una occorrenza kapprossimata di P(i) in T() Tabella D[...m,...n], i cui elementi D[i,] contengono il minimo valore k per cui esiste una occorrenza kapprossimata di P(i) in T() D[i,] può essere uguale a D[i,], se pi = t D[i,]+, se pi t avanza su entrambi i caratteri (sostituzione) D[i,]+ avanza sul pattern (inserimento) D[i,]+ avanza sul testo (cancellazione Ricordate che cerchiamo il minimo: avanza su entrambi i caratteri (uguali) Ricostruzione della soluzione finale Algoritmo String matching approssimato Si noti che: D[m,] = k se e solo se c è un occorrenza kapprossimata di P in T che termina in t la soluzione del problema è data dal valore di D[m,] più piccolo, per n
Algoritmi e Strutture Dati
Programmazione dinamica Algoritmi e Strutture Dati Capitolo Programmazione dinamica Alberto Montresor Università di Trento This work is licensed under the Creative Commons AttributionNonCommercialShareAlike
DettagliAlgoritmi e Strutture Dati. Programmazione dinamica Parte 3
Algoritmi e Strutture Dati Programmazione dinamica Parte Alberto Montresor Università di Trento 219/2/25 This work is licensed under a Creative Commons AttributionShareAlike 4. International License. Sommario
DettagliProgrammazione 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
DettagliAlgoritmi e Strutture Dati
Elementi di Programmazione Dinamica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Tecniche di Programmazione Tecniche di progettazione e
DettagliPer regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente
Progetto di algoritmi sequenziali (un solo esecutore ) Divide et Impera Per regnare occorre tenere divisi i nemici e trarne vantaggio Greedy fai ad ogni passo la scelta più conveniente Buoni risultati
DettagliTecniche 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
DettagliAlgoritmi e Strutture Dati
Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino I conigli di Fibonacci Ricerca Binaria L isola dei conigli Leonardo da
DettagliAlgoritmi e Strutture Dati
Algoritmi Ricorsivi e Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 I conigli di Fibonacci Ricerca Binaria L isola dei conigli
DettagliAlgoritmi e Strutture Dati
Algoritmi Ricorsivi e Ricorrenze Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno
DettagliProgrammazione dinamica Primi esempi
Programmazione dinamica Primi esempi (20 ottobre 2009 e 9 novembre 2010) Programmazione dinamica e Divide et Impera Entrambe le tecniche dividono il problema in sottoproblemi: dalle soluzioni dei sottoproblemi
DettagliPROGRAMMAZIONE DINAMICA. Prof. Reho Gabriella Olimpiadi di Informatica
PROGRAMMAZIONE DINAMICA Quando si usa P.D.? La programmazione dinamica si usa nei casi in cui esista una definizione ricorsiva del problema, ma la trasformazione diretta di tale definizione in un algoritmo
DettagliAlgoritmi e Strutture Dati. Capitolo 10 Tecniche algoritmiche
Algoritmi e Strutture Dati Capitolo 10 Tecniche algoritmiche Programmazione Dinamica: principi generali 1) identificare un numero piccolo di sottoproblemi es: calcolare l II di peso massimo di G j, j=1,,n
DettagliNote 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,
DettagliTempo e spazio di calcolo (continua)
Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza
DettagliAlgoritmi 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
DettagliAppunti lezione Capitolo 13 Programmazione dinamica
Appunti lezione Capitolo 13 Programmazione dinamica Alberto Montresor 12 Novembre, 2015 1 Domanda: Fattore di crescita dei numeri catalani Vogliamo dimostrare che cresce almeno come 2 n. La nostra ipotesi
DettagliTempo e spazio di calcolo (continua)
Tempo e spazio di calcolo (continua) I numeri di Fibonacci come case study (applichiamo ad un esempio completo le tecniche illustrate nei lucidi precedenti) Abbiamo introdotto tecniche per la correttezza
DettagliAlgoritmi 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
DettagliProgrammazione dinamica
Programmazione dinamica Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 29/21 I. Castelli Programmazione dinamica, A.A. 29/21 1/35
DettagliPROGRAMMAZIONE DINAMICA
PROGRAMMAZIONE DINAMICA 6.1 PROGRAMMAZIONE DINAMICA Sebbene elementi del metodo fossero già presenti in tecniche di ottimizzazione note in precedenza, si deve a Bellman lo studio sistematico (iniziato
DettagliAlgoritmi 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
DettagliIn questa lezione. Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort
In questa lezione Il Mergesort: primo esempio di applicazione della tecnica divide et impera analisi tempo di esecuzione del Mergesort [CLRS] par. 2.3. Prof. E. Fachini - Intr. Alg.!1 Progettazione di
DettagliEsercizi 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,
DettagliCorso di Perfezionamento
Programmazione Dinamica 1 1 Dipartimento di Matematica e Informatica Università di Camerino 15 febbraio 2009 Tecniche di Programmazione Tecniche di progettazione di algoritmi: 1 Divide et Impera 2 Programmazione
DettagliEsercizi 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,
DettagliIn questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione
In questa lezione: correttezza del mergesort Analisi del mergesort: relazioni di ricorrenza e alberi della ricorsione Prof E Fachini - Intr Alg 1 MergeSort: correttezza MergeSort (A,p,r) if p < r then
DettagliAlgoritmi e Strutture Dati
Elementi di Programmazione Dinamica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 19 novembre 2008 Elementi di programmazione dinamica Parte
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Capitolo 1 Un introduzione informale agli algoritmi Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Definizione informale di algoritmo Insieme di istruzioni, definite
DettagliEsercizi 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
DettagliDivide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente
Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente Divide et impera - Schema generale Divide-et-impera (P, n) if n k then risolvi direttamente
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Modelli di calcolo e metodologie di analisi Domenico Fabio Savo 1 Notazione asintotica f(n) = tempo di esecuzione / occupazione di memoria di un algoritmo su input di dimensione
DettagliAlgoritmi e Strutture Dati. Luciano Gualà
Algoritmi e Strutture Dati Luciano Gualà guala@mat.uniroma2.it www.mat.uniroma2.it/~guala Programmazione dinamica una tecnica di progettazione algoritmica molto potente Sommario La tecnica della programmazione
DettagliLaboratorio di Algoritmi e Strutture Dati
Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 8 gennaio 8 Il problema è simile all esercizio 5.6 del libro di testo di algoritmi (Introduzione agli algoritmi e strutture dati, T.
DettagliAlgoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi
Algoritmi e Strutture Dati Capitolo Un introduzione informale agli algoritmi Ancora un esempio di problema e soluzioni algoritmiche: i numeri di Fibonacci verso un modello di calcolo più simile a un computer
DettagliNote per la Lezione 2 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2018 2019 Note per la Lezione 2 Ugo Vaccaro Dati un intero n 1 ed una generica sequenza a = a[0]a[1] a[n 1] di numeri (che possono essere sia positivi o negativi),
DettagliParte III: Algoritmo di Branch-and-Bound
Parte III: Algoritmo di Branch-and-Bound Sia Divide et Impera z* = max {c T x : x S} (1) un problema di ottimizzazione combinatoria difficile da risolvere. Domanda: E possibile decomporre il problema (1)
DettagliParte 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)
DettagliAlgoritmi e Strutture Dati. Divide-et-impera
Algoritmi e Strutture Dati Divide-et-impera Alberto Montresor Università di Trento 2018/12/05 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. Sommario 1
DettagliNote 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
DettagliIl problema dello zaino
Il problema dello zaino (knapsack problem) Damiano Macedonio mace@unive.it Copyright 2010 2012 Moreno Marzolla, Università di Bologna (http://www.moreno.marzolla.name/teaching/asd2011b/) This work is licensed
DettagliCAPITOLO 2. Divide et Impera
CAPITOLO 2 Divide et Impera In questo capitolo discuteremo alcuni algoritmi progettati mediante la tecnica di progettazione del Divide et Impera. Algoritmi progettati usando questa tecnica consistono di
DettagliLista 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
Dettagli3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1
3 CENNI DI TEORIA DELLA COMPLESSITA COMPUTAZIONALE E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 Scopo: Stimare l onere computazionale per risolvere problemi di ottimizzazione e di altra natura
DettagliAlgoritmi e Strutture Dati (Mod. B) Programmazione Dinamica (Parte I)
Algoritmi e Strutture Dati (Mod. B) Programmazioe Diamica (Parte I) Numeri di Fiboacci Defiizioe ricorsiva (o iduttiva) F() = F() = F() = F() + F() Algoritmo ricorsivo Fib(: itero) if = or = the retur
DettagliLo sviluppo di un semplice programma e la dimostrazione della sua correttezza
Il principio di induzione Consideriamo inizialmente solo il principio di induzione per i numeri non-negativi, detti anche numeri naturali. Sia P una proprietà (espressa da una frase o una formula che contiene
DettagliRiassumiamo le proprietà dei numeri reali da noi utilizzate nel corso di Geometria.
Capitolo 2 Campi 2.1 Introduzione Studiamo ora i campi. Essi sono una generalizzazione dell insieme R dei numeri reali con le operazioni di addizione e di moltiplicazione. Nel secondo paragrafo ricordiamo
DettagliRiassumiamo le proprietà dei numeri reali da noi utilizzate nel corso di Geometria.
Capitolo 2 Campi 2.1 Introduzione Studiamo ora i campi. Essi sono una generalizzazione dell insieme R dei numeri reali con le operazioni di addizione e di moltiplicazione. Nel secondo paragrafo ricordiamo
DettagliAlgoritmi e Strutture Dati
Algoritmi Golosi (Greedy) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Problema della selezione di attività Problema: Sia S = {a 1, a 2,,
DettagliIntroduzione soft alla matematica per l economia e la finanza. Marta Cardin, Paola Ferretti, Stefania Funari
Introduzione soft alla matematica per l economia e la finanza Marta Cardin, Paola Ferretti, Stefania Funari Capitolo Sistemi di equazioni lineari.8 Il Teorema di Cramer Si consideri un generico sistema
DettagliALGORITMI CORSO DI STUDIO IN INFORMATICA (laurea triennale) UNIVERSITÀ DEGLI STUDI DI CATANIA ANNO ACCADEMICO 2014/15
ANNO ACCADEMICO 2014/15 1 a prova in itinere 13 gennaio 2015 ESERCIZIO 1 Si risolva l equazione di ricorrenza al variare del parametro reale a>1. T (n) = 27 n a T + n 2 log n a ESERCIZIO 2 Si ordinino
DettagliCapitolo 6: Campi di spezzamento:
Capitolo 6: Campi di spezzamento: Idea: Studiare i polinomi a coefficienti in un campo. Definizione (Algebrico e trascendente): Dati campi, un elemento si dice algebrico su se Dati campi, un elemento si
DettagliAlgoritmi e strutture di dati 2
Algoritmi e strutture di dati 2 Paola Vocca Lezione 1: Divide et Impera 1 Paradigma del divide et impera Strutturato in tre fasi. Sia Π() istanza di dimensione di un problema computazionale Π (dove è immediato
DettagliVariabili aleatorie binomiali e di Poisson
Variabili aleatorie binomiali e di Poisson Tiziano Vargiolu Dipartimento di Matematica Pura ed Applicata via Trieste, 63-35121 Padova email: vargiolu@math.unipd.it 9 gennaio 2007 Indice 1 Variabili aleatorie
DettagliProblema. Sistemi lineari. Problema. Problema. Quali sono i potenziali in ogni nodo? Leggi di Kirkoff e di Ohm:
Problema 4 Ω 3 3 Ω 2 2 Ω 40 V Sistemi lineari 2 Ω Ω 2 Ω Ω 5 6 7 8 Ω 4 Ω Ω 0 V Quali sono i potenziali in ogni nodo? 2 4 Ω Problema 3 3 Ω 2 2 Ω 40 V 4 Ω Problema 3 3 Ω 2 2 Ω 40 V 2 Ω Ω 2 Ω Ω 2 Ω Ω 2 Ω Ω
DettagliNella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.
Laboratorio 8 Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi. Note Quando dovete usare o ritornare dei valori booleani, usate la seguente
Dettaglicomplessità degli algoritmi
complessità degli algoritmi progetto CORDA informatica algoritmo matematico persiano Muhammad al-khwarizmi (IX secolo) un algoritmo è una sequenza finita di passi interpretabili da un esecutore l esecuzione
DettagliAlgoritmi 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
DettagliProgrammazione 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
DettagliAlgoritmi e Strutture Dati
Algoritmi Golosi (Greedy) Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino un algoritmo goloso correttezza Problema della selezione di attività
DettagliCammini 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)
DettagliSottospazi vettoriali
Capitolo 6 Sottospazi vettoriali 6.1 Introduzione Riprendiamo un argomento già studiato ampiamente nel corso di Geometria, i sottospazi vettoriali di uno spazio vettoriale. Ci limiteremo a darne la definizione,
DettagliAlgoritmi e Strutture Dati
Algoritmi e Strutture Dati Informazioni sul corso + Un introduzione informale agli algoritmi Domenico Fabio Savo 1 Domenico Fabio Savo Email: savo@dis.uniroma1.it Web: http://www.dis.uniroma1.it/~savo
DettagliCasi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova
Casi di prova Casi di prova Quando si vuole testare un algoritmo si devono costruire vari casi di prova. Invece di eseguire il programma più volte si può costruire un file di dati contenente tutti i casi
DettagliAlgoritmi e Strutture Dati 03/05/2013
Algoritmi e Strutture Dati 03/05/2013 Esercizio 1 L equazione di ricorrenza è la seguente: T (n) = 1 n 1 T ( n/2 ) + T ( n/3 ) + n/2 Proviamo a dimostrare che T (n) = Θ(n). E facile vedere che T (n) =
DettagliLa ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
La ricorsione Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario! Definizione di ricorsione e strategie divide et impera! Semplici algoritmi ricorsivi! Merge
DettagliCorso di GEOMETRIA Dipartimento di Ingegneria ed Architettura Università degli Studi di Trieste Prof. Fabio Perroni. 3. Sistemi di equazioni lineari
Corso di GEOMETRIA Dipartimento di Ingegneria ed Architettura Università degli Studi di Trieste Prof Fabio Perroni 3 Sistemi di equazioni lineari Siano m, n N \ {}, sia K un campo Definizione a) Un sistema
DettagliProblemi, 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
DettagliDistanza di Edit. Speaker: Antinisca Di Marco Data:
Distanza di Edit Speaker: Antinisca Di Marco Data: 14-04-2016 Confronto di sequenze Il confronto tra sequenze in biologia computazionale è la base per: misurare la similarità tra le sequenze allineamento
DettagliSommario. Tecniche di Decomposizione dei Problemi. Algoritmi: Costruzione. Tipi di problemi
Sommario Tecniche di Decomposizione dei Problemi Costruzione di algoritmi Approccio alla soluzione di problemi complessi Sequenza; Selezione; Iterazione; Ricorsione Tecniche di Decomposizione dei Problemi
DettagliA.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5.
A.A. 2015-2016. CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5. Esercizio 5.1. Determinare le ultime tre cifre di n = 13 1625. (Suggerimento. Sfruttare il Teorema di Eulero-Fermat)
DettagliProgrammazione dinamica
5 Programmazione dinamica 5.1 Stringhe Palindrome Una stringa si dice palindroma se è uguale alla sua trasposta, ossia se è la stessa letta da sinistra a destra, o da destra a sinistra (es: anna, osso,
Dettagli5.4.5 Struttura dell algoritmo ed esempi
CAPITOLO 5. IL METODO DEL SIMPLESSO 6 5.4.5 Struttura dell algoritmo ed esempi Come abbiamo già ampiamente osservato, la fase II del metodo del simplesso, a partire da una soluzione di base ammissibile,
DettagliUn po di Matematica. Il volo dei numeri di Mario Merz, un'installazione luminosa sulla Mole Antonelliana, rappresenta la successione di Fibonacci
Un po di Matematica Il volo dei numeri di Mario Merz, un'installazione luminosa sulla Mole Antonelliana, rappresenta la successione di Fibonacci La successione di Fibonacci è una sequenza di numeri naturali
DettagliUn tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:
Pag 36 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione
DettagliNote per il corso di Geometria Corso di laurea in Ing. Edile/Architettura. 4 Sistemi lineari. Metodo di eliminazione di Gauss Jordan
Note per il corso di Geometria 2006-07 Corso di laurea in Ing. Edile/Architettura Sistemi lineari. Metodo di eliminazione di Gauss Jordan.1 Operazioni elementari Abbiamo visto che un sistema di m equazioni
DettagliUn tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:
Pag 29 4) La ricorsione 4.1 Funzioni matematiche ricorsive Partiamo da un concetto ben noto, quello delle funzioni matematiche ricorsive. Una funzione matematica è detta ricorsiva quando la sua definizione
DettagliLEZIONE 3. a + b + 2c + e = 1 b + d + g = 0 3b + f + 3g = 2. a b c d e f g
LEZIONE 3 3.. Matrici fortemente ridotte per righe. Nella precedente lezione abbiamo introdotto la nozione di soluzione di un sistema di equazioni lineari. In questa lezione ci poniamo il problema di descrivere
DettagliTabelle Hash. Implementazioni Dizionario. Implementazione. Tabelle ad accesso diretto. Tempo richiesto dall operazione più costosa:
Algoritmi e Strutture Dati Implementazioni Dizionario Tempo richiesto dall operazione più costosa: Tabelle Hash - Liste - Alberi di ricerca non bilanciati - Alberi di ricerca bilanciati -Tabelle hash O(n)
DettagliAppunti sui Codici di Reed Muller. Giovanni Barbarino
Appunti sui Codici di Reed Muller Giovanni Barbarino Capitolo 1 Codici di Reed-Muller I codici di Reed-Muller sono codici lineari su F q legati alle valutazioni dei polinomi sullo spazio affine. Per semplicità
DettagliLezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi
Lezione 4 Problemi trattabili e soluzioni sempre più efficienti Gianluca Rossi Trattabile o intrattabile? Consideriamo ora il problema, ben noto a tutti gli studenti a partire dalla scuola media, di calcolare
DettagliAllenamento alle Olimpiadi di Informatica
Giornata di allenamento alle Olimpiadi di Informatica Allenamento alle Olimpiadi di Informatica Obiettivi di questa sessione Illustrare alcuni siti per lo sviluppo di competenze informatiche, anche in
DettagliDIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione
INFORMATICA B Ingegneria Elettrica La ricorsione Ricorsione Che cos è la ricorsione? Un sottoprogramma P richiama se stesso (ricorsione diretta) Un sottoprogramma P richiama un altro sottoprogramma Q che
DettagliSistemi Web per il turismo - lezione 5 -
Sistemi Web per il turismo - lezione 5 - Struttura dei dati Tutti i dati (quelli in input, quelli usati all interno di un algoritmo, quelli in output) sono organizzati sotto forma di strutture Tali strutture
DettagliCapitolo 3 Matrici. Marco Robutti. Facoltà di ingegneria Università degli studi di Pavia. Anno accademico
Capitolo 3 Matrici Marco Robutti Facoltà di ingegneria Università degli studi di Pavia Anno accademico 2017-2018 Tutorato di geometria e algebra lineare Definizione (Matrice) Una matrice A M R (k, n) è
DettagliNote sull algoritmo di Gauss
Note sull algoritmo di Gauss 29 settembre 2009 Generalità Un sistema lineare di m equazioni in n incognite x,..., x n è un espressione del tipo: a x + a 2 x 2 + + a n x n = b a 2 x + a 22 x 2 + + a 2n
DettagliTecniche Algoritmiche/3 Programmazione Dinamica
Tecniche Algoritmiche/3 Programmazione Dinamica Ivan Lanese Dip. di Informatica Scienza e Ingegneria Università di Bologna Ivan.lanese@gmail.com http://www.cs.unibo.it/~lanese/ Programmazione Dinamica
DettagliNote per la Lezione 18 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2018 2019 Note per la Lezione 18 Ugo Vaccaro Continuiamo con l applicazione della tecnica Greedy, ricordando che un algoritmo Greedy costruisce una soluzione
DettagliDati 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
DettagliINDUZIONE E NUMERI NATURALI
INDUZIONE E NUMERI NATURALI 1. Il principio di induzione Il principio di induzione è una tecnica di dimostrazione molto usata in matematica. Lo scopo di questa sezione è di enunciare tale principio e di
DettagliNote 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
DettagliDipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano
Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano 2033 Milano (Italia) Piazza Leonardo da Vinci, 32 Tel. (+39) 02-2399.3400 Fax (+39) 02-2399.34 Informatica ed Elementi di
DettagliAnalisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.
Analisi asintotica Vittorio Maniezzo University of Bologna Analisi asintotica Obiettivo: semplificare l analisi del consumo di risorse di un algoritmo prescindendo dai dettagli implementativi o di altro
DettagliAlgoritmi e Strutture Dati
Analisi di Algoritmi Modelli di calcolo e analisi di algoritmi Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Analisi di Algoritmi Analisi
Dettagliesegui Ricerca_binaria (metà sinistra di A, v) esegui Ricerca_binaria (metà destra di A, v)
4) La ricorsione Pag 36 Pag 36 Consideriamo una nuova formulazione dell algoritmo di ricerca binaria (nella quale sono volutamente tralasciati i dettagli per catturarne l essenza): Ricerca_binaria (A,
DettagliCorso di GEOMETRIA Dipartimento di Ingegneria ed Architettura Università degli Studi di Trieste Prof. Fabio Perroni. 5. Rango
Corso di GEOMETRIA Dipartimento di Ingegneria ed Architettura Università degli Studi di Trieste Prof Fabio Perroni 5 Rango Definizione 1 Sia A M m,n (K) una matrice m n a coefficienti nel campo K Il rango
DettagliEsercizi per il corso di Algoritmi
1 Esercizi per il corso di Algoritmi Esercizi sulla Tecnica Programmazione Dinamica 1. Esercizio: Si consideri la seguente variante del problema dello Zaino 0/1. L input é costituito da n oggetti a 1...,a
DettagliRicorsione. DD cap. 5 pp KP cap. 5 pp
Ricorsione DD cap. 5 pp.160-184 KP cap. 5 pp.199-208 Un esempio Problema: prendere in input un intero e calcolarne il fattoriale se n>1 n!=n(n-1)(n-2)(n-3) 1; se n=0 o 1 n!=1. ma (n-1)! la definizione
Dettagli