Introduzione alla tecnica di Programmazione Dinamica

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Introduzione alla tecnica di Programmazione Dinamica"

Transcript

1 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: Calcolo dei numeri di Fibonacci Esempio di applicazione n. 2: Calcolo di binomiali Esempio di applicazione n. 3: Problema dello Zaino

2 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 2/37 Divide et Impera contro" Programmazione Dinamica Ricordiamo i passi fondamentali degli algoritmi basati sulla tecnica Divide et Impera per risolvere un dato problema algoritmico: 1. Dividi il problema in sottoproblemi di taglia inferiore 2. Risolvi (ricorsivamente) i sottoproblemi di taglia inferiore 3. Combina le soluzioni dei sottoproblemi in una soluzione per il problema originale Nei problemi visti in precedenza, tipicamente i sottoproblemi che si ottenevano dalla applicazione del passo 1. dello schema erano diversi, pertanto, ciascuno di essi veniva individualmente risolto dalla relativa chiamata ricorsiva del passo 2. In molte situazioni, i sottoproblemi ottenuti al passo 1. potrebbero essere simili, o addirittura uguali. In tal caso, l algoritmo basato su D&I risolverebbe lo stesso problema piú volte, svolgendo lavoro inutile!

3 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 3/37 Divide et Impera contro" Programmazione Dinamica In situazioni siffatte (ovvero quando i sottoproblemi di un dato problema algoritmico tendono ad essere simili", o addirittura uguali"), é utile impiegare la tecnica della Programmazione Dinamica. Tale tecnica é essenzialmente simile a D&I, con in piú l accortezza di risolvere ogni sottoproblema una volta soltanto. Gli algoritmi basati su Programmazione Dinamica risultano quindi essere piú efficienti nel caso in cui i sottoproblemi di un dato problema tendono a ripetersi. Idea di Base di PD: Calcola la soluzione a distinti sottoproblemi una volta soltanto, e memorizza tali soluzioni in una tabella, in modo tale che esse possano essere usate nel seguito, se occorre.

4 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 4/37 Primo esempio: calcolo dei numeri di Fibonacci La sequenza F 0,F 1,F 2,F 3,... dei numeri di Fibonacci é definita dall equazione di ricorrenza: F 0 = F 1 = 1, e per ogni n 2 F n = F n 1 +F n 2 Ad esempio, abbiamo che i primi termini della sequenza sono 1,1,2,3,5,8,13,21,34,55,89,144,233,... I numeri di Fibonacci crescono rapidamente, si puó provare infatti che F n 2.694n

5 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 5/37 Esempio 1: Calcolo dei numeri di Fibonacci Il primo algoritmo che viene in mente é basato su D&I e sulla definizione stessa di numeri di Fibonacci FIB(n) ifn 1 then return1 else return FIB(n 1)+FIB(n 2) Sia T(n) la complessitá di FIB(n). Abbiamo che T(0) = T(1) = 1. In generale n 2 vale T(n) = T(n 1)+T(n 2)+1 Definendo T (n) = T(n)+1, otteniamo (esercizio!) che i numeri T (n) hanno la proprietá che T (0) = T (1) = 2 e n 2 T (n) = T (n 1)+T (n 2)

6 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 6/37 Calcolo dei numeri di Fibonacci Quindi (sempre per esercizio), otteniamo T (n) = 2F n, ovvero T(n) = 2F n 1 in altre parole, il tempo di esecuzione T(n) di FIB(n) é pari a T(n) = 2F n n, troppo! Dove stá il problema? Il problema stá nel fatto che il programma FIB viene chiamato sullo stesso input molte volte, é ció é chiaramente inutile.

7 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 7/37 Esempio Vediamo ad esempio lo sviluppo delle chiamate ricorsive per il calcolo di FIB(5). FIB(5) FIB(4) FIB(3) FIB(3) FIB(2) FIB(2) FIB(1) IB(1) FIB(2) FIB(1) FIB(0) FIB(1) FIB(0) FIB(1) FIB(0) FIB(1) viene calcolato 5 volte, FIB(0) e FIB(2) 3 volte, FIB(3) 2 volte

8 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 8/37 Quindi... Dall esempio precedente vediamo che stesse quantitá vengono calcolate piú volte da differenti chiamate ricorsive sullo stesso input! Questo é il motivo per cui FIB(n) é inefficiente. Ovvero, i sottoproblemi in cui il problema originale viene decomposto non sono distinti, ma l algoritmo ricorsivo si comporta come se lo fossero, e li risolve daccapo ogni volta. Una volta che si é individuata la causa della inefficienza dell algoritmo FIB(n), é facile individuare anche la cura. Basta memorizzare in un vettore i valori FIB(i),i < n quando li si calcola per prima volta, cosicché in future chiamate ricorsive a FIB(i) non ci sará piú bisogno di calcolarli, ma basterá leggerli dal vettore. In altri termini, risparmiamo tempo di calcolo alle spese di un piccolo aumento di occupazione di memoria

9 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 9/37 Algoritmo pú efficiente per i numeri di Fibonacci MEMFIB(n) % (si fá uso di un array ausiliario F[0...n]) ifn 1 then return 1 else iff[n] non é definitito F[n] MEMFIB(n 1)+MEMFIB(n 2) returnf[n] L aspetto importante dell algoritmo MEMFIB(n) é che esso, prima di sviluppare la ricorsione per calcolare qualche quantitá MEMFIB(i), per qualche i < n, controlla innanzitutto se essa é stata calcolata precedentemente e posta in F[i]. Nel caso affermativo, la ricorsione non viene sviluppata e si legge semplicemente il valore da F[i], con conseguente risparmio di tempo Inoltre, se ad es. sviluppiamo le chiamate ricorsive di MEMFIB(5), ci rendiamo conto che le componento dell array F[0...5] vengono calcolate e assegnate nell ordine F[2],F[3],F[4],F[5]

10 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 10/37 Possiamo quindi anche usare un algoritmo iterativo ITERFIB(n) F[0] 1,F[1] 1 fori 2 ton do F[i] F[i 1]+F[i 2] returnf[n] L algoritmo ITERFIB(n) richiede tempo O(n) e memoria O(n) per calcolare l n-esimo numero di Fibonacci F n, un miglioramento esponenziale rispetto al nostro primo algoritmo FIB(n)! Un ulteriore miglioramento lo si puó ottenere sullo memoria usata. Infatti, non é difficile notare che delle locazioni dell array F ce ne occorrono solo le ultime due calcolate, e non tutte le n (i dettagli sono lasciati per esercizio).

11 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 11/37 Caveat Emptor! Abbiamo detto che il primo algoritmo FIB(n) ha complessitá O(F n ) = O( n ) e che gli algoritmi MEMFIB(n) e ITERFIB(n) hanno complessitá O(n). In realtá abbiamo un pó imbrogliato, nel senso che ció che abbiamo effettivamente provato é che gli algoritmi FIB(n), MEMFIB(n) e ITERFIB(n) eseguono O(F n ) = O( n ), O(n), e O(n) operazioni, rispettivamente. Ma quanto costa ciascuna di queste operazioni? Molto. Infatti, poiché in numeri di Fibonacci F n crescono esponenzialmente ( come n ), la loro rappresentazione in binario é un vettore lungo O(n) bits, quindi ogni operazione che li coinvolge (addizione, sottrazione,... ) costa tempo O(n), e non tempo costante.

12 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 12/37 Pertanto... La vera complessitá di FIB(n), é O(nF n ) = O(n n ), e la vera complessitá di MEMFIB(n) e ITERFIB(n) é O(n n) = O(n 2 ) In ogni caso, un miglioramento esponenziale lo abbiamo ottenuto

13 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 13/37 Come abbiamo fatto ad ottenerlo? 1. Siamo partiti da un algoritmo ricorsivo (e non efficiente), ottenuto applicando D&I al problema in questione 2. Abbiamo scoperto che i motivi dell inefficienza dell algoritmo risiedevano nel fatto che l algoritmo risolveva piú volte lo stesso sottoproblema 3. Abbiamo aggiunto una tabella all algoritmo, indicizzata dai possibili valori input (=sottoproblemi) alle chiamate ricorsive. 4. Abbiamo altresí aggiunto, prima di ogni chiamata ricorsiva dell algoritmo su di un particolare sottoproblema, un controllo sulla tabella per verificare se la soluzione a quel sottoproblema era stata giá calcolata in precedenza. Nel caso affermativo, ritorniamo semplicemente la soluzione al sottoproblema (senza ricalcolarla). Altrimenti, chiamiamo ricorsivamente l algoritmo per risolvere il (nuovo) sottoproblema. Questa tecnica (chiamata Memoization) ha validitá abbastanza generale, e ci permetterá di ottenere algoritmi efficienti per una varietá di problemi

14 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 14/37 Esempio 2: Calcolo di Combinazioni Sia ( n r) il numero di modi con cui possiamo scegliere r oggetti da un insieme di n elementi. Come possiamo calcolare ( n r)? Per scegliere r oggetti da un insieme di n elementi, possiamo o scegliere di prendere il primo oggetto dell insieme (in questo caso ci resterá il problema di scegliere i restanti r 1 oggetti da un insieme di n 1 elementi, e questo si potrá fare in ( n 1 r 1) modi), oppure scegliere di non prendere il primo oggetto dell insieme (in questo secondo caso ci resterá il problema di scegliere tutti gli r oggetti da un insieme di n 1 elementi, e questo si potrá fare in ( ) n 1 r modi). Ció equivale a dire che ( n ( r) = n 1 ) ( r 1 + n 1 ) r

15 Possiamo quindi usare D&I per calcolare ( ) n r Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 15/37 CHOOSE(n, r) ifr = 0 o n = r then return(1) else return (CHOOSE(n 1,r 1)+ CHOOSE(n 1,r)) Analisi: Sia T(n, r) il numero di operazioni effettuate dall algoritmo CHOOSE(n,r), e sia T(n) = max r T(n,r). Abbiamo c se n = 1, T(n) = 2T(n 1)+d se n > 1 per qualche costante c e d.

16 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 16/37 Risolviamo l equazione di ricorrenza T(n) = 2T(n 1)+d = 2(2T(n 2)+d)+d = 4T(n 2)+2d+d = 2 i T(n i)+d = 2 n 1 T(1)+d. i 1 j=0 n 2 j=0 2 j = c2 n 1 +d(2 n 1 1) = (c+d)2 n 1 d Quindi T(n) = Θ(2 n ) 2 j

17 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 17/37 Purtroppo l algoritmo risolve gli stessi sottoproblemi piú volte Albero delle chiamate ricorsive di CHOOSE(6, 4)) ( 5 3 ( 4 ) ( ( 6 ) 4) ( 5 4) ) ( 4 3 ) ( 4 4) ( 3 ) ( 3 1 2) ( 3 ) ( 3 2 3) ( 3 ) ( 3 2 3) ( 2 ) ( 2 1 2) ( 1 ) ( 1 0 1) ( 2 ) ( 2 1 2) ( 1 ) ( 1 0 1) ( 2 ) ( 2 1 2) ( 1 ) ( 1 0 1)

18 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 18/37 Situazione quindi giá vista... Abbiamo cioé un algoritmo inefficiente CHOOSE(n, r) per il calcolo dei numeri ( n r), la cui inefficienza risiede nel fatto che esso ricalcola (mediante chiamate ricorsive ad esso stesso) quanto giá calcolato in precedenza. Sappiamo giá come ovviare a tale situazione: aggiungere all algoritmo una tabella T[i,j] che contenga i valori ( i j) man mano che li calcoliamo. Faremo precedere ad ogni chiamata ricorsiva dell algoritmo CHOOSE(i,j) un controllo per verificare se numero ( i j) é stato precedentemente computato; nel caso affermativo ci limiteremo a leggerlo dalla tabella in T[i, j], altrimenti sviluppiamo la ricorsione per calcolarlo (ció accadrá una sola volta), e lo memorizzeremo in T[i,j].

19 Algoritmo ricorsivo per il calcolo di ( ) n r Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 19/37 MEMCHOOSE(n,r) % (si fá uso di una tabella ausiliaria T[1...n,0...r]) ifr = 0 oppure n = r then return(1) else ift[n,r] non é definito T[n,r] MEMCHOOSE(n 1,r 1) +MEMCHOOSE(n 1,r) return (T[n,r]) Espandendo in un albero tutte le chiamate ricorsive sull esempio n = 6 e r = 4 (esercizio molto consigliato!) ci si rende conto che l algoritmo MEMCHOOSE(6, 4) riempie le entrate della tabella T[1...6, 0...4] a partire da quelle che appaiono sulle foglie dell albero, e poi via via dal basso in alto, fino all entrata T[6,4] che conterrá l output dell algoritmo.

20 Algoritmo iterativo per il calcolo di ( ) n r Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 20/37 Vogliamo calcolare tutti valori ( i j), per i = 0,...n e j = 0,...r, e metterli nella tabella T[i,j] (noi siamo interessati al valore T[n,r]). La formula per ( ( i j) é i ) ( j = i 1 ) ( j 1 + i 1 ) j ) ( con le condizioni iniziali = 1= i 0) L algoritmo iterativo é: ITERCHOOSE(n, r) fori 0 ton r dot[i,0] 1 fori 0 tor dot[i,i] 1 forj 1 tor do fori j +1 ton r+j do T[i,j] T[i 1,j 1]+T[i 1,j] return(t[n,r]) ( i i

21 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 21/37 Come funziona l algoritmo ITERCHOOSE(n, r) fori 0 ton r dot[i,0] 1 fori 0 tor dot[i,i] 1 forj 1 tor do fori j +1 ton r +j do T[i,j] T[i 1,j 1]+T[i 1,j] return(t[n,r]) Al momento dell assegnazione T[i,j] T[i 1,j 1]+T[i 1,j] occorre che T[i 1,j 1] e + T[i 1,j] siano stati giá calcolati (e infatti l algoritmo correttamente procede in questo modo) i 1 j 1 j i +

22 Ricordiamo: T[i,j] = T[i 1,j 1]+T[i 1,j],T[i,0] = T[i,i] = i 1 i j 1 j Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 22/37

23 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 23/37 Analisi dell algoritmo ITERCHOOSE(n, r) ITERCHOOSE(n, r) fori 0 ton r dot[i,0] 1 fori 0 tor dot[i,i] 1 forj 1 tor do fori j +1 ton r +j do T[i,j] T[i 1,j 1]+T[i 1,j] return(t[n,r]) La tabella T[0...n,0...r] ha n r n 2 entrate, ciascuna viene calcolata con una addizione dalle precedenti due (ció richiede tempo O(1)). Quindi l algoritmo ha complessitá O(n 2 ) (ricordiamo che il primo algoritmo ricorsivo aveva complessitá Θ(2 n )) L algoritmo usa O(n 2 ) spazio per memorizzare la tabella, ma poiché T[i,j] = T[i 1,j 1]+T[i 1,j], ad ogni iterazione dell algoritmo basta solo memorizzare la colonna j 1 e j. Quindi l algoritmo necessita solo di O(n) locazioni di memoria.

24 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 24/37 Morale Quando, nella risoluzione di un problema, Divide et Impera genera molti sottoproblemi identici, la ricorsione porta ad algoritmi inefficienti Conviene allora memorizzare la soluzione ai sottoproblemi in una tabella, e leggerli all occorrenza Questa é l essenza della Programmazione Dinamica

25 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 25/37 Per progettare un algoritmo basato con la PD occorre: Identificazione: progettare un algoritmo Divide et Impera analizzarlo: tempo di calcolo esponenziale Perchè?: problemi identici sono risolti più volte

26 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 26/37 Per progettare un algoritmo basato con la PD occorre: Costruzione: prendi la parte dell algoritmo D&I che fá l Impera", e rimpiazza le chiamate ricorsive con letture in tabella invece di ritornare un valore, memorizzalo in un entrata della tabella usa le condizione di base di D&I per riempire l inzio della tabella riempi la tabella, seguendo un opportuno ordine, in modo tale che il calcolo di nuove entrate della tabella venga effettuato usando valori della tabella giá riempiti in precedenza

27 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 27/37 Confronto tra D&I e PD: Divide et Impera: CHOOSE(n, r) ifr = 0 oppure n = r then return(1) else return (CHOOSE(n 1,r 1)+ CHOOSE(n 1,r)) MEMCHOOSE(n, r) ifr = 0 oppure n = r then return(1) else ift[n,r] non é definito T[n,r] MEMCHOOSE(n 1,r 1) +MEMCHOOSE(n 1,r) return (T[n,r])

28 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 28/37 Confronto tra D&I e PD: Divide et Impera: CHOOSE(n, r) ifr = 0 o n = r then return(1) else return (CHOOSE(n 1,r 1)+ CHOOSE(n 1,r)) Programmazione Dinamica: ITERCHOOSE(n, r) fori 0 ton r dot[i,0] 1 fori 0 tor dot[i,i] 1 forj 1 tor do fori j +1 ton r+j do T[i,j] T[i 1,j 1]+T[i 1,j] return(t[n,r]) i 1 i j 1 j +

29 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 29/37 Il problema dello Zaino (semplice) Dati n oggetti di lunghezza s 1,...,s n, esiste un sottoinsieme di tali oggetti di lunghezza totale S? s 1 s 2 s 3 s 4 s 5 s 6 S s 5 s 6 s 1 s 2 s 3 s 4 S

30 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 30/37 Divide et Impera: individuazione e risoluzione sottoproblemi Vogliamo progettare un algoritmo ZAINO(i, j) che su input (i, j) restituisca valore True se e solo se esiste un sottoinsieme dei primi i oggetti s 1,...s i di lunghezza totale pari a j (alla fine ci servirá ZAINO(n, S)) s 1 s 2 s 3 s 4... s i 1 s i Quando ZAINO(i, j) restituirá valore True? j Distinguiamo i due casi: 1) o l oggetto i-esimo s i viene usato per arrivare alla lunghezza totale j, 2) oppure l oggetto i-esimo non é usato.

31 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 31/37 Divide et Impera 1) Se l oggetto i-esimo s i non viene usato per arrivare alla lunghezza totale j, allora ZAINO(i, j) restituirá valore True se e solo se ZAINO(i 1,j) restituisce valore True s 1 s 2 s 3 s 4... s i 1 j

32 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 32/37 Divide et Impera 1) Se l oggetto i-esimo s i viene usato per arrivare alla lunghezza totale j, allora ZAINO(i,j) restituirá valore True se e solo se ZAINO(i 1,j s i ) restituirá valore True s 1 s 2 s 3 s 4... s i 1 j s i s i j

33 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 33/37 Il codice ZAINO(i,j) %(ritorna True se da s 1,...,s i si puó riempire tutto j) ifi = 0 then return(j = 0) %(True se j = 0, False altrimenti) else if ZAINO(i 1,j) then return (True) else ifs i j then return (ZAINO(i 1,j s i )) T(n) = tempo di esecuzione di ZAINO(n,S) c se n = 1, T(n) = 2T(n 1)+d se n > 1 come prima, ha soluzione T(n) = Θ(2 n )

34 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 34/37 Programmazione Dinamica Memorizza ZAINO(i, j) in una tabella t[i, j]: t[i,j] é posto a True se e solo se o vale t[i 1,j] é True, oppure t[i 1,j s i ] ha senso ed é stato posto in precedenza a True Ció viene fatto col seguente codice t[i,j] t[i 1,j] ifj s i 0 then t[i,j] (t[i,j] OR t[i 1,j s i ]) j s i j i 1 i per calcolare t[i, j] occorre che la riga i 1 sia stata giá calcolata, quindi calcoleremo la matrice t[, ] riga per riga, da sinistra a destra, e dall alto in basso

35 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 35/37 L algoritmo di Programmazione Dinamica ZAINO(s 1,...,s n,s) 1. t[0,0] True 2. fori 1 tos dot[0,j] False 3. fori 1 ton do 4. forj 0 tos do 5. t[i,j] t[i 1,j] 6. ifj s i 0 then 7. t[i,j] (t[i,j] t[i 1,j s i ]) 8. return(t[n, S]) Analisi: Linee 1. e 8. costano O(1). Il for sulla linea 2. costa O(S). Linee 5 7 costano O(1). Il for sulle linee 4 7 costa O(S). Il for sulle linee 3 7 costa O(nS). In totale, il tempo di esecuzione é O(nS)

36 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 36/37 Esempio s 1 = 1,s 2 = 2,s 3 = 2,s 4 = 4,s 5 = 5,s 6 = 2,s 7 = 4,S = 15 t[0, 0] =True, t[0, j] =False t[i,j] (t[i 1,j] t[i 1,j s i ]) T F F F F F F F F F F F F F F F T T F F F F F F F F F F F F F F T T T T F F F F F F F F F F F F

37 Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 37/37 Esercizi Completare la tabella É possibile calcolare t[n,s] usando solo 2 righe di t[, ]? É possibile calcolare t[n,s] usando solo una riga di t[, ]?

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

Sommario della lezione

Sommario della lezione Universitá degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/36 Sommario della lezione Ulteriori esempi di applicazione della Programmazione Dinamica Esempio di applicazione

Dettagli

Esercizi per il corso di Algoritmi e Strutture Dati

Esercizi per il corso di Algoritmi e Strutture Dati 1 Esercizi per il corso di Algoritmi e Strutture Dati 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 algoritmi

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

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

4.1 Modelli di calcolo analisi asintotica e ricorrenze

4.1 Modelli di calcolo analisi asintotica e ricorrenze 4 Esercizi Prima Parte 4.1 Modelli di calcolo analisi asintotica e ricorrenze Esercizio 4 1 Rispondere alle seguenti domande: 1. Come misuriamo l efficienza di un algoritmo?. Quali sono gli algoritmi più

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

Sommario della lezione

Sommario della lezione Università degli Studi di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Acc. 2014/15 p. 1/33 Sommario della lezione Ancora sui cammini minimi: Cammini minimi in grafi con archi di costo negativo Algoritmi

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Strategie per la progettazione di algoritmi: memoizzazione e programmazione dinamica Numeri di Fibonacci Coefficienti

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

16.3.1 Alberi binari di ricerca

16.3.1 Alberi binari di ricerca 442 CAPITOLO 16. STRUTTURE DI DATI DINAMICHE root 7 5 11 2 8 13 10 Figura 16.11 Esempio di albero binario: ogni nodo contiene il dato da immagazzinare e tre puntatori che definiscono le sue relazioni di

Dettagli

Introduzione al Corso di Algoritmi

Introduzione al Corso di Algoritmi Università di Salerno Corso di Algoritmi Prof. Ugo Vaccaro Anno Accademico 2014/15 p. 1/36 Introduzione al Corso di Algoritmi Di cosa parliamo oggi: Una discussione generale su cosa studieremo, perchè

Dettagli

Esercizi Capitolo 6 - Alberi binari di ricerca

Esercizi Capitolo 6 - Alberi binari di ricerca Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile

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

Esercizi Capitolo 2 - Analisi di Algoritmi

Esercizi Capitolo 2 - Analisi di Algoritmi Esercizi Capitolo - Analisi di Algoritmi Alberto Montresor 19 Agosto, 014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare

Dettagli

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2) Definiamo innanzitutto una relazione d ordine tra le funzioni. Siano φ e ψ funzioni

Dettagli

Parte 2. Determinante e matrice inversa

Parte 2. Determinante e matrice inversa Parte. Determinante e matrice inversa A. Savo Appunti del Corso di Geometria 013-14 Indice delle sezioni 1 Determinante di una matrice, 1 Teorema di Cramer (caso particolare), 3 3 Determinante di una matrice

Dettagli

Algoritmi e Strutture Dati II: Parte B Anno Accademico 2004-2005. Lezione 11

Algoritmi e Strutture Dati II: Parte B Anno Accademico 2004-2005. Lezione 11 Algoritmi e Strutture Dati II: Parte B Anno Accademico 2004-2005 Docente: Ugo Vaccaro Lezione 11 In questa lezione vedremo alcune applicazioni della tecnica greedy al progetto di algoritmi on-line. Vediamo

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Esercizi Capitolo 5 - Alberi

Esercizi Capitolo 5 - Alberi Esercizi Capitolo 5 - Alberi Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.6. Unità di controllo microprogrammata Lezione n.6 Unità di controllo microprogrammata 1 Sommario Unità di controllo microprogrammata Ottimizzazione, per ottimizzare lo spazio di memoria occupato Il moltiplicatore binario Esempio di architettura

Dettagli

ALGORITMI 1. GLI ALGORITMI 2. IL LINGUAGGIO DI PROGETTO

ALGORITMI 1. GLI ALGORITMI 2. IL LINGUAGGIO DI PROGETTO ALGORITMI 1. GLI ALGORITMI Un algoritmo è la descrizione del percorso risolutivo di un problema per giungere dai dati iniziali ai risultati finali. Scriviamo l algoritmo pensando di rivolgerci a un esecutore,

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012 Concetti importanti da (ri)vedere Programmazione imperativa Strutture di

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it 18 marzo 2011 Problema basato su 10.5 del libro di testo La CINA (Compagnia Italiana per il Noleggio di Automobili) dispone di

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] Strutture dati Dinamiche: Le liste Una lista è una sequenza di elementi di un certo tipo in cui è possibile aggiungere e/o

Dettagli

La selezione binaria

La selezione binaria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Introduzione L esecuzione di tutte le istruzioni in sequenza può non è sufficiente per

Dettagli

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico Processo di risoluzione di un problema ingegneristico 1. Capire l essenza del problema. 2. Raccogliere le informazioni disponibili. Alcune potrebbero essere disponibili in un secondo momento. 3. Determinare

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 Il problema La CMC produce automobili in uno stabilimento

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

Obiettivo Principale: Spiegare come la stessa cosa possa essere realizzata in molti modi diversi e come, a volte, ci siano modi migliori di altri.

Obiettivo Principale: Spiegare come la stessa cosa possa essere realizzata in molti modi diversi e come, a volte, ci siano modi migliori di altri. 6 LEZIONE: Algoritmi Tempo della lezione: 45-60 Minuti. Tempo di preparazione: 10-25 Minuti (a seconda che tu abbia dei Tangram disponibili o debba tagliarli a mano) Obiettivo Principale: Spiegare come

Dettagli

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata Esempi di Problema: Prendere un Caffè al Distributore Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica, e Programmi D. Gubiani

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona.

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario Implementazione di Utilizzo ricorsione per processare dati in java vs. multipla

Dettagli

Matlab: Strutture di Controllo. Informatica B

Matlab: Strutture di Controllo. Informatica B Matlab: Strutture di Controllo Informatica B Tipo di dato logico È un tipo di dato che può avere solo due valori true (vero) 1 false (falso) 0 I valori di questo tipo possono essere generati direttamente

Dettagli

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Oggetti sintattici e oggetti semantici Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P.

Dettagli

Elementi di Informatica

Elementi di Informatica Università degli Studi di Udine Facoltà di Ingegneria CORSO DI LAUREA IN SCIENZE dell ARCHITETTURA Elementi di Informatica Algoritmi, e Programmi D. Gubiani 29 marzo 2010 D. Gubiani Algoritmi, e Programmi

Dettagli

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno UD 3.1b: Costrutti di un Algoritmo Dispense 1.2 I Costrutti di base 13 apr 2010

Dettagli

1. I database. La schermata di avvio di Access

1. I database. La schermata di avvio di Access 7 Microsoft Access 1. I database Con il termine database (o base di dati) si intende una raccolta organizzata di dati, strutturati in maniera tale che, effettuandovi operazioni di vario tipo (inserimento

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Ricorsione. (da lucidi di Marco Benedetti)

Ricorsione. (da lucidi di Marco Benedetti) Ricorsione (da lucidi di Marco Benedetti) Funzioni ricorsive Dal punto di vista sintattico, siamo in presenza di una funzione ricorsiva quando all interno della definizione di una funzione compaiono una

Dettagli

Corso di Tecniche di Programmazione

Corso di Tecniche di Programmazione Corso di Tecniche di Programmazione Corsi di Laurea in Ingegneria Informatica ed Automatica Anno Accedemico 003/004 Proff. Giuseppe De Giacomo, Luca Iocchi, Domenico Lembo Dispensa : Algoritmi di Ordinamento

Dettagli

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione 4 LEZIONE: Programmazione su Carta a Quadretti Tempo della lezione: 45-60 Minuti. Tempo di preparazione: 10 Minuti Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione SOMMARIO:

Dettagli

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006

Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006 Laboratorio di architettura degli elaboratori Progetto finale AA 2005/2006 Esercizio 1 - Heapsort Si consideri la seguente struttura dati, chiamata heap. Essa è un albero binario semi-completo (ossia un

Dettagli

Interpretazione astratta

Interpretazione astratta Interpretazione astratta By Giulia Costantini (819048) e Giuseppe Maggiore (819050) Contents Interpretazione astratta... 2 Idea generale... 2 Esempio di semantica... 2 Semantica concreta... 2 Semantica

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1 SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi

Dettagli

Ricorsione. Corso di Fondamenti di Informatica

Ricorsione. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Ricorsione Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e

Dettagli

Altri metodi di indicizzazione

Altri metodi di indicizzazione Organizzazione a indici su più livelli Altri metodi di indicizzazione Al crescere della dimensione del file l organizzazione sequenziale a indice diventa inefficiente: in lettura a causa del crescere del

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

Implementazione del gioco del Bantumi Corso di Intelligenza Artificiale 2012

Implementazione del gioco del Bantumi Corso di Intelligenza Artificiale 2012 Implementazione del gioco del Bantumi Corso di Intelligenza Artificiale 2012 Nicola Febbrari Università degli Studi di Verona Facoltà MM.FF.NN. nicola.febbrari@studenti.univr.it 22 gennaio 2013 1 Introduzione

Dettagli

Note su quicksort per ASD 2010-11 (DRAFT)

Note su quicksort per ASD 2010-11 (DRAFT) Note su quicksort per ASD 010-11 (DRAFT) Nicola Rebagliati 7 dicembre 010 1 Quicksort L algoritmo di quicksort è uno degli algoritmi più veloci in pratica per il riordinamento basato su confronti. L idea

Dettagli

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Rappresentazione di numeri Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno Un numero e un entità teorica,

Dettagli

Appunti del corso di Informatica 1 (IN1 Fondamenti) 2 Introduzione alla programmazione

Appunti del corso di Informatica 1 (IN1 Fondamenti) 2 Introduzione alla programmazione Università Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN1 Fondamenti) 2 Introduzione alla programmazione Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

CAPITOLO I. Prof. Ing. Michele Marra - Appunti delle Lezioni di Ricerca Operativa Programmazione Dinamica

CAPITOLO I. Prof. Ing. Michele Marra - Appunti delle Lezioni di Ricerca Operativa Programmazione Dinamica CAPITOLO I. - PROGRAMMAZIONE DINAMICA La programmazione dinamica è una parte della programmazione matematica che si occupa della soluzione di problemi di ottimizzazione di tipo particolare, mediante una

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione La Codifica dell informazione (parte 1) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente:

Dettagli

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:

Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione

Dettagli

La ricorsione. Politecnico di Milano Sede di Cremona

La ricorsione. Politecnico di Milano Sede di Cremona La ricorsione Politecnico di Milano Sede di Cremona Gianpaolo Cugola Dipartimento di Elettronica e Informazione cugola@elet.polimi.it http://www.elet.polimi.it/~cugola Definizioni ricorsive Sono comuni

Dettagli

La programmazione con vincoli in breve. La programmazione con vincoli in breve

La programmazione con vincoli in breve. La programmazione con vincoli in breve Obbiettivi Introdurre la nozione di equivalenza di CSP. Dare una introduzione intuitiva dei metodi generali per la programmazione con vincoli. Introdurre il framework di base per la programmazione con

Dettagli

Esercizi per il corso di Algoritmi, anno accademico 2014/15

Esercizi per il corso di Algoritmi, anno accademico 2014/15 1 Esercizi per il corso di Algoritmi, anno accademico 2014/15 Esercizi sulle Notazioni Asintotiche 1. Esercizio: Provare le seguenti relazioni, esibendo opportune costanti c 1,c 2 ed n 0. Si assuma per

Dettagli

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa

Ricerche, ordinamenti e fusioni. 5.1 Introduzione. 5.2 Ricerca completa Ricerche, ordinamenti e fusioni 5.1 Introduzione Questo capitolo ci permette di fare pratica di programmazione utilizzando gli strumenti del linguaggio introdotti finora. A una prima lettura possono essere

Dettagli

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo

Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo Metodi e Modelli per l Ottimizzazione Combinatoria Il problema del flusso di costo minimo L. De Giovanni G. Zambelli 1 Problema del flusso a costo minimo Il problema del flusso a costo minimo é definito

Dettagli

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala L algoritmo di ricerca binaria Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala L algoritmo di ricerca binaria (o dicotomica) In informatica,, la ricerca dicotomica

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

Esercizio: numero primo

Esercizio: numero primo Esercizio: numero primo Dato un numero N scrivere un algoritmo che verifichi se N è un numero primo e stampi un relativo messaggio Il numero N è un numero primo se è divisibile solo per 1 e per N Quindi,

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Parte 3. Rango e teorema di Rouché-Capelli

Parte 3. Rango e teorema di Rouché-Capelli Parte 3. Rango e teorema di Rouché-Capelli A. Savo Appunti del Corso di Geometria 203-4 Indice delle sezioni Rango di una matrice, 2 Teorema degli orlati, 3 3 Calcolo con l algoritmo di Gauss, 6 4 Matrici

Dettagli

Aritmetica: operazioni ed espressioni

Aritmetica: operazioni ed espressioni / A SCUOLA DI MATEMATICA Lezioni di matematica a cura di Eugenio Amitrano Argomento n. : operazioni ed espressioni Ricostruzione di un abaco dell epoca romana - Museo RGZ di Magonza (Germania) Libero da

Dettagli

Lezione 9: Cambio di base

Lezione 9: Cambio di base Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire

Dettagli

Definizione 8.1. Si dice successione una qualsiasi funzione a: N R. Spesso per indicare una successione si usa la sequenza delle immagini:

Definizione 8.1. Si dice successione una qualsiasi funzione a: N R. Spesso per indicare una successione si usa la sequenza delle immagini: Appendice 1 Le successioni Definizione 8.1. Si dice successione una qualsiasi funzione a: N R. Spesso per indicare una successione si usa la sequenza delle immagini: a 0 = a(0), a 1 = a(1),..., a n = a(n),....

Dettagli

Matlab: Funzioni. Informatica B. Daniele Loiacono

Matlab: Funzioni. Informatica B. Daniele Loiacono Matlab: Funzioni Informatica B Funzioni A cosa servono le funzioni? 3 x = input('inserisci x: '); fx=1 for i=1:x fx = fx*x if (fx>220) y = input('inserisci y: '); fy=1 for i=1:y fy = fy*y A cosa servono

Dettagli

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008 Se devo memorizzare più valori che sono in qualche modo parenti dal punto di vista logico, posso usare il concetto di vettore di variabili (array). Ad esempio, se devo memorizzare le temperature di tutti

Dettagli

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA Francesco Bottacin Padova, 24 febbraio 2012 Capitolo 1 Algebra Lineare 1.1 Spazi e sottospazi vettoriali Esercizio 1.1. Sia U il sottospazio di R 4 generato dai

Dettagli

Complessità computazionale

Complessità computazionale 1 Introduzione alla complessità computazionale Un problema spesso può essere risolto utilizzando algoritmi diversi Come scegliere il migliore? La bontà o efficienza di un algoritmo si misura in base alla

Dettagli

Dispense di Informatica per l ITG Valadier

Dispense di Informatica per l ITG Valadier La notazione binaria Dispense di Informatica per l ITG Valadier Le informazioni dentro il computer All interno di un calcolatore tutte le informazioni sono memorizzate sottoforma di lunghe sequenze di

Dettagli

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione Esercizi II parte Esercizio 1 Discutere la correttezza di ciascuna delle seguenti affermazioni. Dimostrare formalmente la validità

Dettagli

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma. Semantica dei programmi La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma. Semantica operazionale: associa ad ogni programma la sequenza delle sue

Dettagli

LEZIONE: Pensiero Computazionale. Tempo della lezione: 45-60 Minuti. - Tempo di preparazione: 15 Minuti.

LEZIONE: Pensiero Computazionale. Tempo della lezione: 45-60 Minuti. - Tempo di preparazione: 15 Minuti. 3 LEZIONE: Pensiero Computazionale Tempo della lezione: 45-60 Minuti. - Tempo di preparazione: 15 Minuti. Obiettivo Principale: Introdurre il modello del Pensiero Computazionale come metodo per la risoluzione

Dettagli

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base: LA STRUTTURA DI RIPETIZIONE La ripetizione POST-condizionale La ripetizione PRE-condizionale INTRODUZIONE (1/3) Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto

Dettagli

Sommario della lezione

Sommario della lezione Sommario della lezione Ulteriori applicazioni del Massimo Flusso 1. Connettività di grafi. Selezione di progetti 3. Trasporto in reti 4. Eliminazione in tornei Università degli Studi di Salerno Corso di

Dettagli

Permutazione degli elementi di una lista

Permutazione degli elementi di una lista Permutazione degli elementi di una lista Luca Padovani padovani@sti.uniurb.it Sommario Prendiamo spunto da un esercizio non banale per fare alcune riflessioni su un approccio strutturato alla risoluzione

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Parte 1. Vettori di bit - AA. 2012/13 1.1

Parte 1. Vettori di bit - AA. 2012/13 1.1 1.1 Parte 1 Vettori di bit 1.2 Notazione posizionale Ogni cifra assume un significato diverso a seconda della posizione in cui si trova Rappresentazione di un numero su n cifre in base b: Posizioni a n

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

int f(char *s, short n, float x) {... } /* definizione di f */ int f(char *, short, float); /* prototipo di f */

int f(char *s, short n, float x) {... } /* definizione di f */ int f(char *, short, float); /* prototipo di f */ Prototipi di funzione Il prototipo di una funzione costituisce una dichiarazione della funzione, e come tale fornisce al compilatore le informazioni necessarie a gestire la funzione stessa. Nella definizione

Dettagli

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014 LUdeS Informatica 2 EXCEL Seconda parte AA 2013/2014 STAMPA Quando si esegue il comando FILE STAMPA, Excel manda alla stampante tutte le celle del foglio di lavoro corrente che hanno un contenuto. Il numero

Dettagli

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3 RICORSIVITA 1. Cos è la ricorsività? La ricorsività è un metodo di soluzione dei problemi che consiste nell esprimere la soluzione relativa al caso n in funzione della soluzione relativa al caso n-1. La

Dettagli

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica

CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica CONTROLLI AUTOMATICI E AZIONAMENTI ELETTRICI Ingegneria Meccatronica CONTROLLI AUTOMATICI e AZIONAMENTI ELETTRICI INTRODUZIONE A MATLAB Ing. Alberto Bellini Tel. 0522 522626 e-mail: alberto.bellini@unimore.it

Dettagli