Introduzione alla tecnica di Programmazione Dinamica
|
|
- Romolo Pagano
- 8 anni fa
- Visualizzazioni
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 Dr Maria Federico Programmazione dinamica Solitamente usata per risolvere problemi di ottimizzazione il problema ammette
DettagliSommario 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
DettagliProgrammazione 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)
DettagliEsercizi 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
DettagliConvertitori 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
DettagliEsercizi 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
DettagliComplemento 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,
DettagliDimensione 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
DettagliAlgoritmi 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
DettagliAA 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
DettagliFondamenti 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
DettagliAPPUNTI 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....................................
DettagliAlgoritmi 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
DettagliAlgoritmi 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
DettagliLezione 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
DettagliINTRODUZIONE 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.
Dettagli4 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
DettagliCALCOLATORI 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
Dettagli10 - 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
DettagliIniziamo 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
DettagliDue 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
DettagliSiamo 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
DettagliAlgoritmi 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
Dettaglif(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
DettagliAlgoritmi 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
DettagliCorso 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
DettagliAppunti 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
DettagliProcesso 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
DettagliPlate 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
DettagliLezione 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
DettagliRicorsione. (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
DettagliCorso 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
Dettagli12 - 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,
DettagliEsempi 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
DettagliEsercizi 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
DettagliUNA 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
DettagliFunzioni 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
DettagliLa 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
DettagliDispense 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
DettagliExcel. 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
DettagliSISTEMI 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
DettagliAppunti 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)
DettagliComparatori. 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",
DettagliLa 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
DettagliEsercizio 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
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
DettagliIntroduzione. 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...
DettagliParte 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
DettagliEsercizi 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à
DettagliGESTIONE 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
DettagliUso 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
DettagliFormattazione. ü 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
DettagliNote 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
DettagliIntroduzione 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
DettagliRAPPRESENTAZIONE 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
DettagliCorrettezza. 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
DettagliLezione 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
DettagliFasi 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
DettagliArduino: 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
DettagliRicerca 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.
DettagliRICORSIVITA. 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
DettagliSoluzione 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
DettagliPROBLEMA 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
DettagliPermutazione 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
DettagliPROGRAMMA 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
Dettagli4. 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:
DettagliParte 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
DettagliAlberi 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
DettagliRicerca 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,
DettagliProof. 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
DettagliSchemi 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
DettagliInformatica 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è
DettagliAnalisi 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
DettagliUniversita' 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
DettagliProf. 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
Dettagli4. 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:
DettagliLa 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,
DettagliDefinire 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
DettagliALGEBRA 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
DettagliNote per la Lezione 6 Ugo Vaccaro
Progettazione di Algoritmi Anno Accademico 2016 2017 Note per la Lezione 6 Ugo Vaccaro Ancora sulla tecnica Programmazione Dinamica Nella lezione scorsa abbiamo appreso che la tecnica Divide-et-Impera,
Dettagli1. 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,
DettagliAlgoritmi 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à
DettagliSemantica 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.
DettagliSemantica 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è,
DettagliLogica 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
DettagliMetodi 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
DettagliParte 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
DettagliEsercizi 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
DettagliCALCOLATORI 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
DettagliCorso 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
DettagliEXCEL 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")
DettagliMisure 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
DettagliEsercitazione 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.
Dettagli2.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
DettagliCorso 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
DettagliSommario 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
DettagliMetodologie 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
DettagliOsservazioni 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
DettagliMatlab: 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
DettagliCALCOLO 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