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

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

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

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

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

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

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

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

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

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

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

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

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

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

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

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

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

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

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

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

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

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

Algoritmi e diagrammi di flusso

Algoritmi e diagrammi di flusso Algoritmi e diagrammi di flusso Un algoritmo può essere descritto come una sequenza finita ed ordinata di operazioni che descrivono la soluzione di un problema. Per sequenza finita si intende che un algoritmo

Dettagli

Corso di Matematica per la Chimica

Corso di Matematica per la Chimica Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano

Dettagli

Appunti di informatica. Lezione 2 anno accademico 2015-2016 Mario Verdicchio

Appunti di informatica. Lezione 2 anno accademico 2015-2016 Mario Verdicchio Appunti di informatica Lezione 2 anno accademico 2015-2016 Mario Verdicchio Sistema binario e logica C è un legame tra i numeri binari (0,1) e la logica, ossia la disciplina che si occupa del ragionamento

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

Plate Locator Riconoscimento Automatico di Targhe

Plate Locator Riconoscimento Automatico di Targhe Progetto per Laboratorio di Informatica 3 - Rimotti Daniele, Santinelli Gabriele Plate Locator Riconoscimento Automatico di Targhe Il programma plate_locator.m prende come input: l immagine della targa

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

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

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

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

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

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA Tutti gli anni, affrontando l argomento della divisibilità, trovavo utile far lavorare gli alunni sul Crivello di Eratostene. Presentavo ai ragazzi una

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

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

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

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso Università Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Comparatori. Comparatori di uguaglianza

Comparatori. Comparatori di uguaglianza Comparatori Scopo di un circuito comparatore é il confronto tra due codifiche binarie. Il confronto può essere effettuato per verificare l'uguaglianza oppure una relazione d'ordine del tipo "maggiore",

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

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che:

Esercizio 1 Dato il gioco ({1, 2, 3}, v) con v funzione caratteristica tale che: Teoria dei Giochi, Trento, 2004/05 c Fioravante Patrone 1 Teoria dei Giochi Corso di laurea specialistica: Decisioni economiche, impresa e responsabilità sociale, A.A. 2004/05 Soluzioni degli esercizi

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

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

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

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

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

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Formattazione. ü Introduzione

Formattazione. ü Introduzione Formattazione ü Introduzione Abbiamo fatto un bel po' di lavoro con Mathematica, vero? Abbiamo visto come creare, valutare, semplificare, disegnare, programmare, cucinare, pescare, ed anche come sfilare

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

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

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI

RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI RAPPRESENTAZIONE GRAFICA DEGLI ALGORITMI Diagramma di flusso L algoritmo può essere rappresentato in vari modi, grafici o testuali. Uno dei metodi grafici più usati e conosciuti è il cosiddetto diagramma

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

Lezione 10: Il problema del consumatore: Preferenze e scelta ottimale

Lezione 10: Il problema del consumatore: Preferenze e scelta ottimale Corso di Scienza Economica (Economia Politica) prof. G. Di Bartolomeo Lezione 10: Il problema del consumatore: Preferenze e scelta ottimale Facoltà di Scienze della Comunicazione Università di Teramo Scelta

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

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

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani Ricerca Operativa Esercizi sul metodo del simplesso Luigi De Giovanni, Laura Brentegani 1 1) Risolvere il seguente problema di programmazione lineare. ma + + 3 s.t. 2 + + 2 + 2 + 3 5 2 + 2 + 6,, 0 Soluzione.

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

Soluzione dell esercizio del 12 Febbraio 2004

Soluzione dell esercizio del 12 Febbraio 2004 Soluzione dell esercizio del 12/2/2004 1 Soluzione dell esercizio del 12 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. 2. Modello concettuale

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

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

PROGRAMMA SVOLTO NELLA SESSIONE N.

PROGRAMMA SVOLTO NELLA SESSIONE N. Università C. Cattaneo Liuc, Corso di Statistica, Sessione n. 1, 2014 Laboratorio Excel Sessione n. 1 Venerdì 031014 Gruppo PZ Lunedì 061014 Gruppo AD Martedì 071014 Gruppo EO PROGRAMMA SVOLTO NELLA SESSIONE

Dettagli

4. Operazioni elementari per righe e colonne

4. Operazioni elementari per righe e colonne 4. Operazioni elementari per righe e colonne Sia K un campo, e sia A una matrice m n a elementi in K. Una operazione elementare per righe sulla matrice A è una operazione di uno dei seguenti tre tipi:

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

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario

Dettagli

Ricerca binaria. Operazione dominante: confronto

Ricerca binaria. Operazione dominante: confronto procedure ordinaperfusioni(var a: nelements; n: integer); var b: nelements; procedure mergesort(var a,b: nelements; primo,ultimo:integer); var q: integer; procedure merge(var a,b: nelements; primo, ultimo,

Dettagli

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero

Dettagli

Schemi delle Lezioni di Matematica Generale. Pierpaolo Montana

Schemi delle Lezioni di Matematica Generale. Pierpaolo Montana Schemi delle Lezioni di Matematica Generale Pierpaolo Montana Al-giabr wa al-mukabalah di Al Khuwarizmi scritto approssimativamente nel 820 D.C. Manuale arabo da cui deriviamo due nomi: Algebra Algoritmo

Dettagli

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati Informatica 3 Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Lezione 10 - Modulo 1 Perchè

Dettagli

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Premessa Con l analisi di sensitività il perito valutatore elabora un range di valori invece di un dato

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

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

4. Operazioni aritmetiche con i numeri binari

4. Operazioni aritmetiche con i numeri binari I Numeri Binari 4. Operazioni aritmetiche con i numeri binari Contare con i numeri binari Prima di vedere quali operazioni possiamo effettuare con i numeri binari, iniziamo ad imparare a contare in binario:

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

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

ALGEBRA DELLE PROPOSIZIONI

ALGEBRA DELLE PROPOSIZIONI Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra

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

1. PRIME PROPRIETÀ 2

1. PRIME PROPRIETÀ 2 RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,

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

Semantica Assiomatica

Semantica Assiomatica Semantica Assiomatica Anche nella semantica assiomatica, così come in quella operazionale, il significato associato ad un comando C viene definito specificando la transizione tra stati (a partire, cioè,

Dettagli

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo Logica Numerica Approfondimento E. Barbuto Minimo Comune Multiplo e Massimo Comun Divisore Il concetto di multiplo e di divisore Considerato un numero intero n, se esso viene moltiplicato per un numero

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

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno Parte II Indice Operazioni aritmetiche tra valori rappresentati in binario puro somma sottrazione Rappresentazione di numeri con segno modulo e segno complemento a 2 esercizi Operazioni aritmetiche tra

Dettagli

Esercizi su lineare indipendenza e generatori

Esercizi su lineare indipendenza e generatori Esercizi su lineare indipendenza e generatori Per tutto il seguito, se non specificato esplicitamente K indicherà un campo e V uno spazio vettoriale su K Cose da ricordare Definizione Dei vettori v,,v

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

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T Scorrimento-Rotazione-Ricerca Prerequisiti Programmazione elementare Conoscenza ed uso di vettori Introduzione Lo scopo di questa Unità è approfondire il concetto di vettore

Dettagli

EXCEL FUNZIONI PRINCIPALI

EXCEL FUNZIONI PRINCIPALI EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")

Dettagli

Misure di base su una carta. Calcoli di distanze

Misure di base su una carta. Calcoli di distanze Misure di base su una carta Calcoli di distanze Per calcolare la distanza tra due punti su una carta disegnata si opera nel modo seguente: 1. Occorre identificare la scala della carta o ricorrendo alle

Dettagli

Esercitazione Informatica I AA 2012-2013. Nicola Paoletti

Esercitazione Informatica I AA 2012-2013. Nicola Paoletti Esercitazione Informatica I AA 2012-2013 Nicola Paoletti 4 Gigno 2013 2 Conversioni Effettuare le seguenti conversioni, tenendo conto del numero di bit con cui si rappresenta il numero da convertire/convertito.

Dettagli

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione Capitolo 2 MATRICI Fra tutte le applicazioni su uno spazio vettoriale interessa esaminare quelle che mantengono la struttura di spazio vettoriale e che, per questo, vengono dette lineari La loro importanza

Dettagli

Corso di Scienza Economica (Economia Politica) prof. G. Di Bartolomeo

Corso di Scienza Economica (Economia Politica) prof. G. Di Bartolomeo Corso di Scienza Economica (Economia Politica) prof. G. Di Bartolomeo Lezione 14 Equilibrio economico generale (efficienza nello scambio) e fallimenti del mercato Facoltà di Scienze della Comunicazione

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

Metodologie di programmazione in Fortran 90

Metodologie di programmazione in Fortran 90 Metodologie di programmazione in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2007/2008 Fortran 90: Metodologie di programmazione DIS - Dipartimento di

Dettagli

Osservazioni sulla continuità per le funzioni reali di variabile reale

Osservazioni sulla continuità per le funzioni reali di variabile reale Corso di Matematica, I modulo, Università di Udine, Osservazioni sulla continuità Osservazioni sulla continuità per le funzioni reali di variabile reale Come è noto una funzione è continua in un punto

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

CALCOLO COMBINATORIO

CALCOLO COMBINATORIO CALCOLO COMBINATORIO 1 Modi di formare gruppi di k oggetti presi da n dati 11 disposizioni semplici, permutazioni Dati n oggetti distinti a 1,, a n si chiamano disposizioni semplici di questi oggetti,

Dettagli