Algoritmi e strutture di dati 2

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Algoritmi e strutture di dati 2"

Transcript

1 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 o a soluzione del problema è derivata da quelle di tali sottoproblemi Entrambi i paradigmi vengono applicati a partire da una definizione ricorsiva che correla la soluzione di un problema a quella di un insieme di sotto-problemi. 2 1

2 Differenze tra programmazione dinamica e divide et impera La programmazione dinamica è nata principalmente per risolvere problemi di ottimizzazione, il divide et impera è più mirato alla risoluzione di problemi non necessariamente di ottimizzazione nel divide et impera un qualunque sotto-problema viene considerato una sola volta, nella programmazione dinamica uno stesso sotto-problema può rientrare come componente nella definizione di più problemi 3 Differenze tra programmazione dinamica e divide et impera 4 2

3 Proprietà di decomposizione Risoluzione mediante programmazione dinamica di un problema caratterizzata dalle due proprietà della decomposizione: Ottimalità dei sotto-problemi: o La soluzione ottima di un problema deriva dalle soluzioni ottime dei sotto-problemi in cui esso è stato decomposto (come nel divide et impera). Sovrapposizione dei sotto-problemi: o Uno stesso sotto-problema può venire usato nella soluzione di due (o più) sotto-problemi diversi. 5 Definizione di un algoritmo di programmazione dinamica La definizione di un algoritmo di programmazione dinamica è basata su: 1. caratterizzazione della struttura generale di cui sono istanze sia il problema in questione che tutti i sotto-problemi 2. identificazione dei sotto-problemi elementari e individuazione della relativa modalità di determinazione della soluzione 3. definizione di una regola ricorsiva per la soluzione in termini di composizione delle soluzioni di un insieme di sotto-problemi 4. derivazione di un ordinamento di tutti i sotto-problemi, per il calcolo efficiente e la memorizzazione delle loro soluzioni in una tabella. (memorizzazione dei valori intermedi memoization- in una tabella di programmazione dinamica) Numero di passi dell'algoritmo limitato superiormente dal prodotto tra il numero di sotto-problemi e il costo di ricombinazione delle loro soluzioni ottime 6 3

4 Esempio: Numeri di Fibonacci Esempio: successione di Fibonacci (0, 1, 1, 2, 3, 5, 8, 13,...) o 0 = 0 o 1 = 1 o = Ricorsione Fib( n ) { // n >= 0 if (n <= 1) RETURN n; else RETURN Fib(n-1) + Fib(n-2); } 7 Ricorsione inefficiente: analisi + =* + + = + + = ( + +)+= + ++= =. + + > = = φ! ",. Fib(n) richiede O(F n+3 ) = O(φ n+3 ) passi, dove φ = (+ ")/,'()... è il rapporto aureo 8 4

5 Fibonacci con programmazione dinamica Fib( n ) { // n >= 0 F[0] = 0; F[1] = 1; for (k = 2; k <= n; k = k + 1) F[k] = F[k-1] + F[k-2]; RETURN F[n]; } [alvie] L array F è la tabella di programmazione dinamica e richiede O(n) tempo per essere riempita F n può essere anche calcolato in tempo O(log n), basandosi sulla forma chiusa di Binet. 9 Problema del resto Dati: un insieme - = {,..,/ } di tipi di monete, di valore 1,,1 / un numero illimitato di monete di tipo 2 per un intero 4 si vuole determinare un vettore,, /, dove è il numero di monete dell'2 esimo tipo, in modo da ottenere il resto 4 con il minor numero possibile di monete. Vogliamo quindi minimizzare / con il vincolo 5 / 5 1 =4 10 5

6 Soluzione ricorsiva 6(4): minimo numero di monete necessario per ottenere il resto 4 o 4= è il caso base. Non occorre restituire alcuna moneta, per cui 6 = o 4>: è il caso ricorsivo. Se si utilizza una moneta di tipo i per il resto 4, allora il problema diventa creare il resto di 4 1 col minor numero possibile di monete Definizione di 6 4 conseguente: CD 4= 6 4 =: + + min 6(4 1 CD 1 >6 ED6 FG / ) AB +HI6/DI 11 Algoritmo per il problema del resto Basato sul riempimenti di una tabella resto di dimensione 4+. Problema più generale: o resto[c] indica il minimo numero di monete necessarie per ottenere il resto c o Se c=r, abbiamo la soluzione o riempimento della tabella da sinistra verso destra Caso base: resto[c]=0 Caso ricorsivo, calcola resto[c] prendendo il minimo tra tutti i valori resto[k 1 ]

7 Algoritmo per il problema del resto 13 Algoritmo per il problema del resto: esempio 14 7

8 Algoritmo per il problema del resto: esempio 15 Algoritmo goloso per il problema del resto Più semplice: si effettuano iterativamente le operazioni seguenti, fino ad ottenere 4. o si sceglie la moneta di valore più alto a disposizione o se ne usa la massima quantità possibile Caratteristica tipica degli algoritmi golosi (greedy): le scelte si basano principalmente sulla configurazione attuale, senza cercare di valutarne le conseguenze sulle configurazioni successive. Può essere interpretato come un caso speciale di programmazione dinamica. 16 8

9 Coin Changing: Greedy Algorithm 17 Coin Changing: Greedy Algorithm 18 9

10 Algoritmo goloso per il problema del resto 19 Non ottimalitàdell'algoritmo goloso per il problema del resto Esempio: M=9,3=3,P Q =6, P S =4 P U =1. Algoritmo goloso: una moneta da 6e tre monete da 1, in totale 4 Soluzione ottima: due monete da 4 e una 1, in totale

11 Greedy Algorithm: Special cases

12 Sequenza ottima di moltiplicazioni Vogliamo usare la programmazione dinamica per calcolare il prodotto di n matrici V 2 di taglia W 2 X W2 + 1 Hp. semplificativa: il costo di moltiplicazione di due matrici di taglia Ze Z [ è pari a Z [ Esempio: W 0 =100,W 1 =20,W 2 =1000,W 3 =2,W 4 =50 23 Sequenza ottima di moltiplicazioni Il costo varia a seconda di come associamo il prodotto utilizzando la moltiplicazione tra due matrici: in generale, qual è il costo minimo? input: sequenza di interi positivi W 0,W 1,,W (dove W 2 W > S è la taglia della matrice V 2) output: minimo numero di operazioni per calcolare (detto costo minimo per V ) con l ipotesi che la moltiplicazione di due matrici di taglia Z e Z [ richieda Z [ operazioni

13 Approccio di forza bruta Esiste un numero esponenziale (in ) di modi per calcolare il costo minimo per V usando l associatività con le parentesi: inefficiente! [Tale numero è quello di Catalan C n-1 = n.ro di alberi binari distinti con n-1 nodi interni, aventi ciascuno due figli] Metodo più efficiente: per 0 2 ^ 1, sia -(,_) = costo minimo per ` ` + L `_ (la cui taglia risultante è W 2 W a S ) Il costo minimo per V è quindi dato da b(0, 1) 25 Calcolo ricorsivo di M(i,j) Caso base: -(,) = per (per ottenere V 2 non dobbiamo moltiplicare) Caso induttivo: per ogni 2 < ^, vale ` ` L `_ = (` ` L `6) (`6 `6 L `_) dim.: W 2 W a S W 2 W d S Wf S W a S costo: c c 6 c _ b(2,^) b(2,) + b(+1,^) + W > W d S W a S 26 13

14 Calcolo ricorsivo di M(i,j) b(2,^ b$2, b$1,^ W > YW d S YW a S 27 Ricorsione costosa (come con Fibonacci) Numero esponenziale di chiamate ricorsive, ciascuna invocata molte volte con gli stessi parametri d ingresso 28 14

15 Tabella di programmazione dinamica Riempita per diagonali a partire dalla principale min b 0,0 b 1,2 W QYW S YW i b 0,1 b 2,2 W Q YW U YW i tabella: ghz[2[2][^] = b(2, ^ 29 Programmazione dinamica è iterativa Sostituiscono le chiamate ricorsive Serve a ricostruire la soluzione ottima 30 15

16 Analisi di complessità La tabella costi ha taglia e il calcolo di ciascuno dei suoi elementi richiede j() tempo (ciclo for più interno) CostoMinimoIterativo richiede k( ) tempo (laddove la versione ricorsiva è esponenziale in ) Lo spazio occupato è k( ) celle Esercizio: utilizzando la tabella indice, ricavare la sequenza ottima di moltiplicazioni per il calcolo di ` 31 Sotto-sequenza comune più lunga Definizione del problema: due stringhe di caratteri l, m, di lunghezze 3, stringa n sotto-sequenza comune più lunga (longest common subsequence, LCS) se non ne esistono sottosequenze di lunghezza maggiore che siano comuni ad l e m opq(+,): lunghezza delle sotto-sequenze comuni più lunghe di l e m numero esponenziale in 3 e di possibili sotto-sequenze comuni di l e m non è efficiente generarle tutte per poi scegliere quella di lunghezza massima 32 16

17 Sotto-sequenza comune più lunga Definizione: o(,_): lunghezza della sotto-sequenza più lunga comune alle due sequenze formate dai primi2 elementi di l e dai primi ^ elementi dim. o,_ = opq `,,r,_ o s(3, ) fornisce la soluzione opq +, al problema o s(2,0) = s(0,^) = 0 per ogni 2,^ 33 Sotto-sequenza comune più lunga Definizione: o,_ =: o,_ + max{o,_,o,_ } CD = F _= CD,_> D + =[_ ] CD,_> D + [_ ] se una delle due sequenza è vuota, allora la sotto-sequenza comune più lunga è vuota 34 17

18 Sotto-sequenza comune più lunga Definizione: o,_ : o,_ max.o,_,o,_ 0 CD F _ CD,_, D + J_L CD,_, D + vj_l se l ultimo carattere c in ciascuna sequenza è uguale, esiste una sotto-sequenza comune più lunga che lo contiene ed è ottenibile da quella in cui l ultimo carattere è rimosso. c c 35 Sotto-sequenza comune più lunga Definizione: o,_ : o,_ max.o,_,o,_ 0 CD F _ CD,_, D + J_L CD,_, D + vj_l se invece l ultimo carattere differisce, la sotto-sequenza comune più lunga è quella ottenuta rimuovendo l ultimo carattere in una sola delle due sequenze 36 18

19 37 Sotto-sequenza comune più lunga Definizione: o,_ =: o,_ + max{o,_,o,_ } CD = F _= CD,_> D + =[_ ] CD,_> D + [_ ] Tabella lunghezza di dimensione (/ + ) ( + ): l'algoritmo pone HwGxDyy+[][_] = s(2, ^) j(3) elementi da determinare, corrispondenti a k(/) sottoproblemi L'elemento HwGxDyy+[][_] è calcolabile in tempo costante, dati tutti gli elementi HwGxDyy+[6][C] con C < _ o con C = _,6 < L'algoritmo richiede tempo k(/) 38 19

20 Partizione di insiemi di interi Insieme di interi positivi `={+,+,,+ } di somma totale (pari) + = C. Si vuole determinare se esiste `z= +,+,,+ { ` { tale che + =C. Risolubile generando esplicitamente tutti i sottoinsiemi di `. sottoinsiemi: tempo esponenziale in 39 Programmazione dinamica Definiamo per 0 2 e 0 ^ Z ~(2,^) = [ sse esiste {l 0,l 1,..,l >S } t.c. = j Nota: ~(, Z) = [ sse la partizione è possibile [convenzione: {+,+,,+ } = ] 40 20

21 Programmazione dinamica per partizione Regola ricorsiva se l insieme è vuoto allora la somma ^=0 è l unica possibile 41 Programmazione dinamica per partizione Regola ricorsiva la somma pari ^ era già possibile con un sottoinsieme di.+,+,..,+ 0 che non include l >S 42 21

22 Programmazione dinamica per partizione Regola ricorsiva la somma pari ^ èpossibile con un sottoinsieme che include l > : eliminando l >S deve esistere un sottoinsime la cui somma è pari a jl >S (ovviamente se jl >S ) 43 Partizione di un insieme di interi: tabella di programmazione dinamica Tabella di programmazione dinamica di taglia 1 Z+1 parti[i][j] = ~(2,^) Ordine riempimento per righe 44 22

23 Partizione di insiemi di interi: esempi 45 Programmazione dinamica e partizione di insiemi di interi 46 23

24 Analisi di complessità per partizione Tempo k(c) Spazio k(c) k(c) usando solo le ultime due righe compilate iterativamente Nota: in generale è possibile ottenere delle prestazioni simili a quelle della programmazione dinamica usando ricorsione + memoization [memoization = prender nota] Convenzione: Φ denota un valore indefinito 47 Ricorsione + memoization 48 24

25 Pseudo-polinomialità e programmazione dinamica Quando gli interi coinvolti nel problema diventano molto grandi dobbiamo usare un differente modello di computazione Esempio: complessità dell algoritmo di partizione è k(c) ma la dimensione dell input è circa + celle, per memorizzare la sequenza C, +,+,,+ : algoritmo pseudo-polinomiale Al crescere di C rispetto ad n, non possiamo più pensare di memorizzare C in una singola cella, ma piuttosto in { = k(logc ) celle (la sua rappresentazione binaria): la dimensione dell input diventa di circa + { celle di memoria La complessità k( C) = k( { ) diventa quindi esponenziale. In tal caso va confrontata con quella k( ) che genera tutti i sottoinsiemi. In altre parole, k(c) è una complessità polinomiale soltanto se C = k( ) per una costante >

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

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

Esempio : i numeri di Fibonacci

Esempio : i numeri di Fibonacci Esempio : i numeri di Fibonacci La successione di Fibonacci F 1, F 2,... F n,... è definita come: F 1 =1 F 2 =1 F n =F n 1 F n 2,n 2 Leonardo Fibonacci (Pisa, 1170 Pisa, 1250) http://it.wikipedia.org/wiki/leonardo_fibonacci

Dettagli

Programmazione dinamica

Programmazione dinamica Programmazione dinamica Ilaria Castelli [email protected] 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

Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy

Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy Tecniche avanzate di sintesi di algoritmi: Programmazione dinamica Algoritmi greedy Dr Maria Federico Programmazione dinamica Solitamente usata per risolvere problemi di ottimizzazione il problema ammette

Dettagli

Introduzione alla tecnica di Programmazione Dinamica

Introduzione alla tecnica di Programmazione Dinamica Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/37 Sommario della lezione Introduzione alla tecnica di Programmazione Dinamica Esempio di applicazione n. 1:

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

Note per la Lezione 4 Ugo Vaccaro

Note per la Lezione 4 Ugo Vaccaro Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 4 Ugo Vaccaro Ripasso di nozioni su Alberi Ricordiamo che gli alberi rappresentano una generalizzazione delle liste, nel senso che

Dettagli

3.4 Metodo di Branch and Bound

3.4 Metodo di Branch and Bound 3.4 Metodo di Branch and Bound Consideriamo un generico problema di Ottimizzazione Discreta dove X è la regione ammissibile. (P ) z = max{c(x) : x X} Metodologia generale di enumerazione implicita (Land

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

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

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

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati.

Algoritmi di ricerca. Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. E. Calabrese: Fondamenti di Informatica Algoritmi-1 Algoritmi di ricerca Per ricerca si intende qui il procedimento di localizzare una particolare informazione in un elenco di dati. Per esempio: - cercare

Dettagli

Il problema dello zaino

Il problema dello zaino Il problema dello zaino (knapsack problem) Damiano Macedonio [email protected] Copyright 2010 2012 Moreno Marzolla, Università di Bologna (http://www.moreno.marzolla.name/teaching/asd2011b/) This work is licensed

Dettagli

Heap e code di priorità

Heap e code di priorità Heap e code di priorità Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010

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

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento

Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Laboratorio di Programmazione Appunti sulla lezione 4: Divide et impera e algoritmi di ordinamento Alessandra Raffaetà Università Ca Foscari Venezia Corso di Laurea in Informatica Ricerca binaria Assunzione:

Dettagli

2.2 Alberi di supporto di costo ottimo

2.2 Alberi di supporto di costo ottimo . Alberi di supporto di costo ottimo Problemi relativi ad alberi hanno numerose applicazioni: progettazione di reti (comunicazione, teleriscaldamento,...) memorizzazione compatta di sequenze (DNA) diffusione

Dettagli

Programmazione Lineare

Programmazione Lineare Programmazione Lineare Andrea Scozzari a.a. 2012-2013 March 14, 2013 Andrea Scozzari (a.a. 2012-2013) Programmazione Lineare March 14, 2013 1 / 18 Metodo del Simplesso Dato un problema di PL in forma standard

Dettagli

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 12 Array e Oggetti A. Miola Dicembre 2006 http://www.dia.uniroma3.it/~java/fondinf1/ Array e Oggetti 1 Contenuti Array paralleli

Dettagli

Introduzione alla programmazione Esercizi risolti

Introduzione alla programmazione Esercizi risolti Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

Albero di Riscorsione

Albero di Riscorsione Albero di Riscorsione Albero di ricorsione Un albero di ricorsione è un modo di visualizzare cosa accade in un algoritmo divide et impera L etichetta della radice rappresenta il costo non ricorsivo della

Dettagli

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen Esercitazione Ricorsione May 31, 2016 Esercizi presi dal libro di Rosen Problema 2 a) sezione 5.3 Data la seguente funzione definita ricorsivamente come: f(n+1) = 2f(n) f(0) = 3 Determinare il valore di

Dettagli

La codifica digitale

La codifica digitale La codifica digitale Codifica digitale Il computer e il sistema binario Il computer elabora esclusivamente numeri. Ogni immagine, ogni suono, ogni informazione per essere compresa e rielaborata dal calcolatore

Dettagli

Geometria BIAR Esercizi 2

Geometria BIAR Esercizi 2 Geometria BIAR 0- Esercizi Esercizio. a Si consideri il generico vettore v b R c (a) Si trovi un vettore riga x (x, y, z) tale che x v a (b) Si trovi un vettore riga x (x, y, z) tale che x v kb (c) Si

Dettagli

11.4 Chiusura transitiva

11.4 Chiusura transitiva 6 11.4 Chiusura transitiva Il problema che consideriamo in questa sezione riguarda il calcolo della chiusura transitiva di un grafo. Dato un grafo orientato G = hv,ei, si vuole determinare il grafo orientato)

Dettagli

Dall algoritmo al programma

Dall algoritmo al programma Dall algoritmo al programma Il concetto di algoritmo Un algoritmo è una sequenza di passi necessari per risolvere un problema o eseguire una computazione In alcuni casi, lo stesso problema/computazione

Dettagli

Grafi pesati Minimo albero ricoprente

Grafi pesati Minimo albero ricoprente Algoritmi e Strutture Dati Definizioni Grafi pesati Minimo albero ricoprente Sia G=(V,E) un grafo non orientato e connesso. Un albero ricoprente di G è un sottografo T G tale che: T è un albero; T contiene

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento

Dettagli

Progettazione di Algoritmi: Approccio Top-Down e Bottom Up

Progettazione di Algoritmi: Approccio Top-Down e Bottom Up Progettazione di Algoritmi: Approccio Top-Down e Bottom Up Ci sono due approcci fondamentali per progettare algoritmi Servono ambedue ad aiutarci ad affrontare il problema Si chiamano "top-down" e "bottom-up"

Dettagli

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili Matrici Un po di esercizi sulle matrici Semplici Lettura e scrittura Calcolo della trasposta Media difficoltà Calcolo del determinante Difficili Soluzione di sistemi lineari È veramente difficile? 1 Matrici.h

Dettagli

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015 1 Lunedí 20 Aprile 2015 1 Istituto di Analisi dei Sistemi ed Informatica IASI - CNR Rilassamento di un problema Rilassare un problema di Programmazione Matematica vuol dire trascurare alcuni (tutti i)

Dettagli

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno

Algoritmi e Strutture Dati Esercizi Svolti. Giuseppe Persiano Dipartimento di Informatica ed Appl. Renato M. Capocelli Università di Salerno Algoritmi e Strutture Dati Esercizi Svolti Giuseppe Persiano Dipartimento di Informatica ed Appl Renato M Capocelli Università di Salerno Indice Esercizio 12-3 5 Esercizio 23-4 6 Esercizio 63-3 7 Esercizio

Dettagli

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA Matlab: esempi ed esercizi Sommario e obiettivi Sommario Esempi di implementazioni Matlab di semplici algoritmi Analisi di codici Matlab Obiettivi

Dettagli

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO Rappresentazione degli algoritmi Problema Algoritmo Algoritmo descritto con una qualche notazione Programma Defne del procedimento

Dettagli

Secondo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale

Secondo allenamento. Olimpiadi Italiane di Informatica - Selezione territoriale Secondo allenamento Olimpiadi Italiane di Informatica - Selezione territoriale Luca Chiodini [email protected] - [email protected] 15 marzo 2016 Programma 1. Lettura di un problema tratto dalle

Dettagli

Il concetto di calcolatore e di algoritmo

Il concetto di calcolatore e di algoritmo Il concetto di calcolatore e di algoritmo Elementi di Informatica e Programmazione Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Informatica

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

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve LE STRUTTURE DATI DINAMICHE: GLI ALBERI Cosimo Laneve 1 argomenti 1. definizione di alberi e nozioni relative 2. implementazione degli alberi, creazione, visita 3. algoritmo di visita iterativa e sua implementazione

Dettagli

Progettazione di algoritmi

Progettazione di algoritmi Progettazione di algoritmi Discussione dell'esercizio [labirinto] Nel testo dell'esercizio abbiamo considerato come lunghezza del percorso il numero di bivi ma possiamo stimare meglio la lunghezza reale

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

Informatica Teorica. Macchine a registri

Informatica Teorica. Macchine a registri Informatica Teorica Macchine a registri 1 Macchine a registri RAM (Random Access Machine) astrazione ragionevole di un calcolatore nastro di ingresso nastro di uscita unità centrale in grado di eseguire

Dettagli

Divide et impera. Divide et impera. Divide et impera. Divide et impera

Divide et impera. Divide et impera. Divide et impera. Divide et impera Divide et impera Divide et impera La tecnica detta divide et impera è una strategia generale per impostare algoritmi (par. 9.4). Consideriamo un problema P e sia n la dimensione dei dati, la strategia

Dettagli

Studio delle successioni con il software

Studio delle successioni con il software Studio delle successioni con il software Abbiamo visto due possibili definizioni per alcune successioni: diretta e per ricorrenza (o ricorsiva). Ricordiamo che la successione delle somme dei primi n numeri

Dettagli

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico Click to edit Algoritmo Master title style algoritmo: un insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce un risultato e si arresta in un tempo finito

Dettagli

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe. 1) Comprendere il problema 2) Stabilire quali sono le azioni da eseguire per risolverlo 3) Stabilire la

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli [email protected] Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari Lezione 4 L artimetica binaria: I numeri relativi e frazionari Sommario I numeri relativi I numeri frazionari I numeri in virgola fissa I numeri in virgola mobile 1 Cosa sono inumeri relativi? I numeri

Dettagli

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length); Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

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

Programmazione dinamica

Programmazione dinamica Capitolo 6 Programmazione dinamica 6.4 Il problema della distanza di edit tra due stringhe x e y chiede di calcolare il minimo numero di operazioni su singoli caratteri (inserimento, cancellazione e sostituzione)

Dettagli

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1 . Cammini ottimi E. Amaldi Fondamenti di R.O. Politecnico di Milano .. Cammini minimi e algoritmo di Dijkstra Dato un grafo orientato G = (N, A) con una funzione di costo c : A c ij R e due nodi s e t,

Dettagli

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla Camil Demetrescu Irene Finocchi Giuseppe F. Italiano Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla Indice 1 Un introduzione informale agli algoritmi 1 2 Modelli di calcolo e metodologie di

Dettagli

PARTE III MACCHINE A REGISTRI

PARTE III MACCHINE A REGISTRI PARTE III MACCHINE A REGISTRI Macchine a registri (RAM) Modelli di costo RAM e macchine di Turing Macchine a registri elementari 1 3.1 MACCHINE A REGISTRI (RAM: Random Access Machines) Introdotte da Shepherdson

Dettagli

Cosa è l Informatica?

Cosa è l Informatica? Cosa è l Informatica? Scienza degli elaboratori elettronici (Computer Science) Scienza dell informazione Scienza della rappresentazione, memorizzazione, elaborazione e trasmissione dell informazione Elaboratore

Dettagli

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort

Due algoritmi di ordinamento. basati sulla tecnica Divide et Impera: Mergesort e Quicksort Due algoritmi di ordinamento basati sulla tecnica Divide et Impera: Mergesort e Quicksort (13 ottobre 2009, 2 novembre 2010) Ordinamento INPUT: un insieme di n oggetti a 1, a 2,, a n presi da un dominio

Dettagli

1 Definizione di sistema lineare omogeneo.

1 Definizione di sistema lineare omogeneo. Geometria Lingotto. LeLing1: Sistemi lineari omogenei. Ārgomenti svolti: Definizione di sistema lineare omogeneo. La matrice associata. Concetto di soluzione. Sistemi equivalenti. Operazioni elementari

Dettagli

Calcolatori: Sistemi di Numerazione

Calcolatori: Sistemi di Numerazione Calcolatori: Sistemi di Numerazione Sistemi di Numerazione: introduzione In un Calcolatore, i Dati e le Istruzioni di un Programma sono codificate in forma inaria, ossia in una sequenza finita di e. Un

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla http://www.moreno.marzolla.name/ Ultima Modifica: 7 ottobre 202 Copyright Portions of this work are Copyright 202, Moreno Marzolla. This work is licensed

Dettagli

Progettazione di Algoritmi

Progettazione di Algoritmi Corso di laurea in Informatica Prova scritta del: Progettazione di Algoritmi 29/01/2016 Prof. De Prisco Inserire i propri dati nell apposito spazio. Non voltare la finché non sarà dato il via. Dal via

Dettagli

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi:

FUNZIONI RICORSIVE PROGRAMMAZIONE RICORSIVA: Esempi di problemi ricorsivi: FUNZIONI RICORSIVE Una funzione matematica è definita ricorsivamente quando nella sua definizione compare un riferimento (chiamata) a se stessa. Esempio: Esempi di problemi ricorsivi: 1) Somma dei primi

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla [email protected] Ultimo aggiornamento: 3 novembre 2010 1 Trova la somma/1 Scrivere un algoritmo che dati in input un array A[1... n] di n interi

Dettagli

Tempo e spazio di calcolo

Tempo e spazio di calcolo Tempo e spazio di calcolo Modelli di calcolo e metodologie di analisi F. Damiani - Alg. & Lab. 04/05 (da M. Zacchi - Alg. & Lab. 03/04) In quale modo stimiamo il tempo di calcolo? Possiamo considerare

Dettagli

Programmazione I Paolo Valente /2017. Lezione 6. Notazione posizionale

Programmazione I Paolo Valente /2017. Lezione 6. Notazione posizionale Lezione 6 Notazione posizionale Ci sono solo 10 tipi di persone al mondo: quelle che conoscono la rappresentazione dei numeri in base 2, e quelle che non la conoscono... Programmazione I Paolo Valente

Dettagli

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C

La ricorsione. Ver Claudio Fornaro - Corso di programmazione in C La ricorsione Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C 2 Divide et impera Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici I risultati

Dettagli

Metodo di Quine- McCluskey

Metodo di Quine- McCluskey Metodo di Quine- McCluskey Maurizio Palesi Maurizio Palesi Definizioni Date due funzioni f(x,x 2,,x n ) e g(x,x 2,,x n ) si dice che f copre g (oppure g implica f) e si scrive f g se f(x,x 2,,x n )= quando

Dettagli

4 0 = 4 2 = 4 4 = 4 6 = 0.

4 0 = 4 2 = 4 4 = 4 6 = 0. Elementi di Algebra e Logica 2008. Esercizi 4. Gruppi, anelli e campi. 1. Determinare la tabella additiva e la tabella moltiplicativa di Z 6. (a) Verificare dalla tabella moltiplicativa di Z 6 che esistono

Dettagli

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I)

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I) Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I) Luigi De Giovanni Giacomo Zambelli 1 Problemi di programmazione lineare Un problema

Dettagli

L ALGORITMO DEL SIMPLESSO REVISIONATO

L ALGORITMO DEL SIMPLESSO REVISIONATO L ALGORITMO DEL SIMPLESSO REVISIONATO L'algoritmo del simplesso revisionato costituisce una diversa implementazione dell algoritmo standard tesa a ridurre, sotto certe condizioni, il tempo di calcolo e

Dettagli

Alberi ed Alberi Binari

Alberi ed Alberi Binari Alberi ed Alberi Binari Il tipo di dato Albero Un albero è una struttura di data organizzata gerarchicamente. È costituito da un insieme di nodi collegati tra di loro: ogni nodo contiene dell informazione,

Dettagli

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore

Dettagli