Informatica II. Capitolo 13 Programmazione dinamica. Programmazione dinamica vs Divide-et-impera. Divide-et-impera Tecnica ricorsiva

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Informatica II. Capitolo 13 Programmazione dinamica. Programmazione dinamica vs Divide-et-impera. Divide-et-impera Tecnica ricorsiva"

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

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

Dettagli

Algoritmi e Strutture Dati. Programmazione dinamica Parte 3

Algoritmi 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

Dettagli

Programmazione dinamica

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Per regnare occorre tenere divisi i nemici e trarne vantaggio. fai ad ogni passo la scelta più conveniente

Per 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

Dettagli

Tecniche Algoritmiche: divide et impera

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Programmazione dinamica Primi esempi

Programmazione 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

Dettagli

PROGRAMMAZIONE DINAMICA. Prof. Reho Gabriella Olimpiadi di Informatica

PROGRAMMAZIONE 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

Dettagli

Algoritmi e Strutture Dati. Capitolo 10 Tecniche algoritmiche

Algoritmi 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

Dettagli

Note per la Lezione 6 Ugo Vaccaro

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,

Dettagli

Tempo e spazio di calcolo (continua)

Tempo 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

Dettagli

Algoritmi e strutture di dati 2

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

Dettagli

Appunti lezione Capitolo 13 Programmazione dinamica

Appunti 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

Dettagli

Tempo e spazio di calcolo (continua)

Tempo 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

Dettagli

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 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

Dettagli

Programmazione dinamica

Programmazione 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

Dettagli

PROGRAMMAZIONE DINAMICA

PROGRAMMAZIONE 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

Dettagli

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 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

Dettagli

In 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 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

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

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,

Dettagli

Corso di Perfezionamento

Corso 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

Dettagli

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

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,

Dettagli

In 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 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Esercizi per il corso di Algoritmi, anno accademico 2011/12

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

Dettagli

Divide 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 (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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Algoritmi e Strutture Dati. Luciano Gualà

Algoritmi 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

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio 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.

Dettagli

Algoritmi e Strutture Dati. Capitolo 1 Un introduzione informale agli algoritmi

Algoritmi 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

Dettagli

Note per la Lezione 2 Ugo Vaccaro

Note 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),

Dettagli

Parte III: Algoritmo di Branch-and-Bound

Parte 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)

Dettagli

Parte III: Algoritmo di Branch-and-Bound

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)

Dettagli

Algoritmi e Strutture Dati. Divide-et-impera

Algoritmi 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

Dettagli

Note per la Lezione 14 Ugo Vaccaro

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

Dettagli

Il problema dello zaino

Il 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

Dettagli

CAPITOLO 2. Divide et Impera

CAPITOLO 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

Dettagli

Lista di esercizi 11 maggio 2016

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

Dettagli

3 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 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

Dettagli

Algoritmi e Strutture Dati (Mod. B) Programmazione Dinamica (Parte I)

Algoritmi 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

Dettagli

Lo sviluppo di un semplice programma e la dimostrazione della sua correttezza

Lo 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

Dettagli

Riassumiamo le proprietà dei numeri reali da noi utilizzate nel corso di Geometria.

Riassumiamo 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

Dettagli

Riassumiamo le proprietà dei numeri reali da noi utilizzate nel corso di Geometria.

Riassumiamo 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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,,

Dettagli

Introduzione 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 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

Dettagli

ALGORITMI CORSO DI STUDIO IN INFORMATICA (laurea triennale) UNIVERSITÀ DEGLI STUDI DI CATANIA ANNO ACCADEMICO 2014/15

ALGORITMI 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

Dettagli

Capitolo 6: Campi di spezzamento:

Capitolo 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

Dettagli

Algoritmi e strutture di dati 2

Algoritmi 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

Dettagli

Variabili aleatorie binomiali e di Poisson

Variabili 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

Dettagli

Problema. Sistemi lineari. Problema. Problema. Quali sono i potenziali in ogni nodo? Leggi di Kirkoff e di Ohm:

Problema. 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 Ω Ω

Dettagli

Nella propria home directory creare una sottodirectory chiamata es08, in cui metteremo tutti i file C di oggi.

Nella 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

Dettagli

complessità degli algoritmi

complessità 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

Dettagli

Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)

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

Dettagli

Programmazione Dinamica (PD)

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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à

Dettagli

Cammini minimi fra tutte le coppie

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)

Dettagli

Sottospazi vettoriali

Sottospazi 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,

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

Casi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova

Casi 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

Dettagli

Algoritmi e Strutture Dati 03/05/2013

Algoritmi 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) =

Dettagli

La ricorsione. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

La 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

Dettagli

Corso 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 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

Dettagli

Problemi, istanze, soluzioni

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

Dettagli

Distanza di Edit. Speaker: Antinisca Di Marco Data:

Distanza 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

Dettagli

Sommario. Tecniche di Decomposizione dei Problemi. Algoritmi: Costruzione. Tipi di problemi

Sommario. 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

Dettagli

A.A CORSO DI ALGEBRA 1. PROFF. P. PIAZZA, E. SPINELLI. SOLUZIONE ESERCIZI FOGLIO 5.

A.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)

Dettagli

Programmazione dinamica

Programmazione 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,

Dettagli

5.4.5 Struttura dell algoritmo ed esempi

5.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,

Dettagli

Un 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 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

Dettagli

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

Un 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

Dettagli

Note 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 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

Dettagli

Un tipico esempio è la definizione del fattoriale n! di un numero n, la cui definizione è la seguente:

Un 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

Dettagli

LEZIONE 3. a + b + 2c + e = 1 b + d + g = 0 3b + f + 3g = 2. a b c d e f g

LEZIONE 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

Dettagli

Tabelle Hash. Implementazioni Dizionario. Implementazione. Tabelle ad accesso diretto. Tempo richiesto dall operazione più costosa:

Tabelle 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)

Dettagli

Appunti sui Codici di Reed Muller. Giovanni Barbarino

Appunti 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à

Dettagli

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi

Lezione 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

Dettagli

Allenamento alle Olimpiadi di Informatica

Allenamento 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

Dettagli

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA. INFORMATICA B Ingegneria Elettrica. La ricorsione

DIPARTIMENTO 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

Dettagli

Sistemi Web per il turismo - lezione 5 -

Sistemi 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

Dettagli

Capitolo 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 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) è

Dettagli

Note sull algoritmo di Gauss

Note 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

Dettagli

Tecniche Algoritmiche/3 Programmazione Dinamica

Tecniche 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

Dettagli

Note per la Lezione 18 Ugo Vaccaro

Note 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

Dettagli

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 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

Dettagli

INDUZIONE E NUMERI NATURALI

INDUZIONE 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

Dettagli

Note per la Lezione 7 Ugo Vaccaro

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

Dettagli

Dipartimento di Elettronica, Informazione e Bioingegneria Politecnico di Milano

Dipartimento 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

Dettagli

Analisi asintotica. Astrazione: come il tempo di esecuzione cresce in funzione della taglia dell input asintoticamente.

Analisi 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

Dettagli

Algoritmi e Strutture Dati

Algoritmi 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

Dettagli

esegui Ricerca_binaria (metà sinistra di A, v) esegui Ricerca_binaria (metà destra di A, v)

esegui 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,

Dettagli

Corso 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 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

Dettagli

Esercizi per il corso di Algoritmi

Esercizi 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

Dettagli

Ricorsione. DD cap. 5 pp KP cap. 5 pp

Ricorsione. 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