Analisi asintotica della complessità di tempo degli algoritmi

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Analisi asintotica della complessità di tempo degli algoritmi"

Transcript

1 Analisi asintotica della complessità di tempo degli algoritmi Due esempi di funzioni di Python: 1. nel primo mettiamo in evidenza l importanza di una buona organizzazione dei dati in memoria, cioè di una buona struttura dati. 2.nel secondo esibiamo un conteggio per la valutazione della complessità di tempo L esempio di un semplice problema risolto con due algoritmi diversi ci servirà per giustificare l introduzione di strumenti matematici per semplificare il metodo di calcolo della complessità. 1

2 Quanto tempo ci vuole per accedere all elemento di indice i di una lista in Python? Per esempio se la lista è Numeri = [1,2,3,5,7,11,17,123] Numeri[4] = 7 Esempio 1 Vorremmo stabilire quanto tempo è necessario per ottenere la risposta qualunque sia i, tra 0 e n-1, se la lista ha n elementi. Vorremmo prevedere la risposta per ogni tipo di calcolatore. Non vogliamo calcolare esattamente un valore ma piuttosto sapere come il tempo dipende da n, il numero degli elementi della lista o dal loro tipo, se non è costante. 2

3 Esempio 1 Quanto tempo ci vuole per accedere all elemento di indice i di una lista in Python? Per esempio se la lista è Numeri = [1,2,3,5,7,11,17,123] Numeri[4] = 7 Vorremmo stabilire quanto tempo è necessario per ottenere la risposta qualunque sia i, tra 0 e n-1, se la lista ha n elementi. Cosa bisogna sapere per rispondere? Come è implementata l operazione e quindi come sono memorizzati gli elementi! 3

4 Rappresentazione in memoria 1 Ricordiamo che il nostro modello prevede una memoria RAM. In questo modello come è rappresentata in memoria la lista di Python? Supponiamo per ora che la lista contenga solo interi e che un intero sia rappresentato in memoria in una parola di memoria, w. Allora una lista, L, di interi potrebbe occupare un area contigua di memoria, a partire da un indirizzo iniziale associato a L. L indirizzo dell elemento di indice i tra 0 e n-1, si trova calcolando ind(i) = indirizzo iniziale + i* w dove w indica la lunghezza della parola w Esempio ListaInteri = [30,8,23,500] Nel nostro esempio, ListaInteri contiene l indirizzo di partenza, Il suo terzo elemento (che ha indice 2) sarà allocato alla posizione *32=1064 quindi L[2] = contenuto dell indirizzo *32 tempo costante! 4

5 Rappresentazione in memoria 2 Ma una lista in Python può contenere dati di tipo diverso, che occupano spazi di memoria diversi. Per esempio tra gli elementi ci può essere una stringa o un altra lista: Numeri = [1,2,3,5,7,11,17,123] Varia = [universitari,n,5,numeri] universitari n 5 Numeri inizio L elemento di indice i si trova calcolando ind(i)=? 5

6 Rappresentazione in memoria 3 Si potrebbe usare una lista concatenata (linkata): si dota ogni elemento della lista di un campo riferimento, che contiene l indirizzo dell elemento successivo: inizio universitari n 5 Numeri inizio universitari a n b a 5 c Numeri - c b nell esempio inizio, accessibile dal nome della lista, è l indirizzo iniziale dell area di memoria che contiene la stringa universitari e il riferimento a; a è l indirizzo per la stringa n e del riferimento b; b è quello per 5 e il riferimento c; c è l indirizzo dell area di memoria che contiene l indirizzo iniziale nella lista Numeri e il riferimento NULL (NIL,none), cioè riferimento nullo, perché non ci sono altri elementi nella lista. 6

7 Rappresentazione in memoria 4 universitari a n b 5 c Numeri - inizio a b c l indirizzo dell elemento di indice i può essere ottenuto seguendo il riferimento (l indirizzo) contenuto nel campo riferimento dell elemento di indice (i-1). Quindi per ottenerlo bisogna seguire i riferimenti, a partire dal primo, contenuto nel nome della lista! Dunque il numero di passi necessari non è costante, ma dipende dal valore di i, che varia tra 0 e n-1. 7

8 Rappresentazione in memoria 5 Si potrebbe usare una lista di riferimenti, cioè una lista i cui elementi sono gli indirizzi delle locazioni di memoria degli elementi. Il nome della lista, Varia, dà l accesso all indirizzo inizio. inizio universitari n 5 Numeri inizio = Numeri = 5000 Un indirizzo occupa una parola di memoria (nell esempio di lunghezza 32), quindi l elemento di indice i nella lista è contenuto nella locazione di memoria il cui indirizzo è in inizio+i*32. Per esempio 5 è l elemento di indice 2, quindi è memorizzato nella parola di memoria il cui indirizzo è inizio+2*32 =1064, che è n 8000 u n r i 8

9 Rappresentazione in memoria 5 Si potrebbe allora usare una lista di riferimenti, cioè una lista i cui elementi sono gli indirizzi delle locazioni di memoria degli elementi. Il nome della lista, Varia, dà l accesso all indirizzo inizio. universitari n 5 Numeri inizio inizio = Numeri = tempo costante! Se si vuole accedere all elemento di indice 2 della lista numeri, che è l elemento di indice 3 della lista varia, andiamo al contenuto all indirizzo inizio + 3*32 (=5000). Poi l elemento di indice 2 è all indirizzo *32 (=2032) u n 9000 n r i 9

10 Conclusione Questo esempio ci aiuta a capire che per stabilire, su un qualsiasi computer, il tempo di esecuzione di un operazione bisogna innanzi tutto organizzare bene in memoria i dati su cui lavora l operazione, o le operazioni! 10

11 Tempo costante e no Ordinare 30 numeri o ordinarne 3 milioni fa molta differenza, in tal caso il tempo non è costante, ma dipende dalla dimensione dell input, cioè, in questo caso, dal numero degli elementi da ordinare. Intuitivamente il numero di esecuzioni delle operazioni primitive può crescere con il crescere della dimensione dell input. Consideriamo un altro esempio in Python. 11

12 L inserimento in una lista? Il metodo nome_lista.insert(where,el) inserisce l elemento el nella posizione where nella lista nome_lista. Quindi where è l'indice del primo elemento che verrà spostato nella posizione successiva, per poter inserire el. E eseguito in un tempo costante o dipendente dalla dimensione (=numero degli elementi) della lista? inizio n-3 n-2 n-1... Occorrerà (a parte i controlli sui valori della chiamata, di costo costante) 1. aumentare di uno la lunghezza, n, della lista e allocare nuova memoria per la lista, se possibile - tempo che può essere considerato costante 12

13 L inserimento in una lista? Il metodo nome_lista.insert(where,el) inserisce l elemento el nella posizione where nella lista nome_lista. Quindi where è l'indice del primo elemento che verrà spostato nella posizione successiva, per poter inserire el. E eseguito in un tempo costante o dipendente dalla dimensione (=numero degli elementi) della lista? inizio n-3 n-2 n spostare a destra di una posizione tutti i riferimenti da where a n-1. Ogni spostamento ha un costo costante, ma ne devo fare n-1-where +1 = n-where. - tempo dipendente da where, che può essere 0 o n-1 13

14 L inserimento in una lista? Il metodo nome_lista.insert(where,el) inserisce l elemento el nella posizione where nella lista nome_lista. Quindi where è l'indice del primo elemento che verrà spostato nella posizione successiva, per poter inserire el. E eseguito in un tempo costante o dipendente dalla dimensione (=numero degli elementi) della lista? inizio n-3 n-2 n inserire l indirizzo di el in where - tempo costante 14

15 Analisi inserimento in una lista Il metodo nome_lista.insert(where,el) inserisce l elemento el nella posizione where nella lista nome_lista. I passi sono: 1. aumentare di uno la lunghezza, n, della lista e allocare nuova memoria per la lista, se possibile - tempo che possiamo considerare costante 2. spostare a destra di una posizione tutti i puntatori da where a n - tempo dipendente da where, che può essere 0 o n-1 3. inserire el in where - tempo costante Possiamo dire che nel caso peggiore where = 0 e allora l operazione è eseguita in c * n + d passi per un certo c > 0, che dà conto del costo costante dell operazione di spostamento a destra dei riferimenti che è eseguita n volte e d > 0 che dà conto del costo costante delle operazioni ai punti 1 e 3. nel caso migliore where = n-1 e allora l operazione è eseguita con c + d passi in generale che l operazione è eseguita in un numero di passi superiormente limitato da c * n + d 15

16 Analisi inserimento in una lista Il metodo nome_lista.insert(where,el) inserisce l elemento el nella posizione where nella lista nome_lista. Visto che nel caso peggiore where = 0 e allora l operazione è eseguita in c * n + d passi per un certo c > 0, che dà conto del costo costante dell operazione di spostamento a destra dei riferimenti che è eseguita n volte e d > 0 che dà conto del costo costante delle operazioni ai punti 1 e 3. nel caso migliore where = n-1 e allora l operazione è eseguita con c + d passi in generale che l operazione è eseguita in un numero di passi superiormente limitato da c * n + d Se chiamiamo Tins(n) la funzione che esprime il tempo di calcolo del metodo su un input di dimensione n, possiamo dire che Tins(n) c * n + d. Oppure se chiamiamo TMAXins(n) la funzione che esprime il tempo di calcolo del metodo nel caso peggiore su un input di dimensione n, possiamo dire che TMAXins(n)= c * n + d. 16

17 L inserimento in una lista,il codice in C: L assegnamento items[i+1] = items[i] è ripetuto per i da n fino a where, cioè per n - where volte. L istruzione for è eseguita ancora una volta per stabilire che i è diventato where-1 e quindi determinare l uscita dal ciclo. Quindi detto a il costo dell assegnamento e dei confronti, si ha un costo di esecuzione del ciclo for minore o uguale a a(n - where +1) Quindi TMAXins(n) c * n + d, dove d è il costo costante delle operazioni all esterno del ciclo e c è opportunamente scelta in modo da maggiorare, semplificandola, l espressione a(n ). static int ins1(pylistobject *self, Py_ssize_t where, PyObject *v) { Py_ssize_t i, n = Py_SIZE(self); PyObject **items; if (v == NULL) { PyErr_BadInternalCall(); return -1; } if (n == PY_SSIZE_T_MAX) { PyErr_SetString(PyExc_OverflowError, "cannot add more objects to list"); return -1; } } if (list_resize(self, n+1) == -1) return -1; if (where < 0) { where += n; if (where < 0) where = 0; } if (where > n) where = n; items = self->ob_item; for (i = n; --i >= where; ) items[i+1] = items[i]; Py_INCREF(v); items[where] = v; return 0; tempo costante! 17

18 CONCLUSIONE L esempio ci aiuta a capire che per analizzare un algoritmo abbiamo bisogno di considerare diversi casi, a parità di dimensione dell input. In molti casi possiamo solo limitare superiormente il tempo di calcolo di un algoritmo per una certa dimensione dell input, considerando il caso peggiore per quella dimensione. 18

19 Altro esempio di analisi della complessità: Inserimento di un elemento in una lista ordinata Data una lista A di interi ordinata in ordine crescente, cioè in modo tale che A[i] A[i+1], per 0 i<n-1, vogliamo inserire un elemento, in modo da ottenere ancora una lista di interi ordinata crescente. Esempio: inserimento di 80 in :

20 Inserimento in un array ordinato: soluzione 1 Data una lista A di interi ordinata in ordine crescente, cioè in modo tale che A[i] A[i+1], per 0 i<n-1, vogliamo inserire un elemento, in modo da ottenere ancora una lista di interi ordinata crescente. Usiamo la stessa idea dell inserimento di un elemento in una posizione di una lista Python, con la differenza che la posizione va determinata sulla base dell ordine. Diamo una funzione in cui assumiamo che l elemento da inserire sia posto nell ultima posizione. Esempio: inserimento di 80 nell array:

21 Inserimento in un array ordinato: soluzione 1 Data una lista A di interi ordinata in ordine crescente tranne l ultimo elemento, cioè in modo tale che A[i] A[i+1], per 0 i<n-2, vogliamo inserire l ultimo elemento in modo da ottenere una lista di interi ordinata crescente di tutti gli elementi. Esempio: inserimento di 80 nel posto giusto nell array: x = A[5] > x A[4] > x A[3] > x A[2] x 21

22 Inserimento in un array ordinato: soluzione 1 Data una lista A di interi ordinata in ordine crescente tranne l ultimo elemento, cioè in modo tale che A[i] A[i+1], per 0 i<n-2, vogliamo inserire l ultimo elemento in modo da ottenere una lista di interi ordinata crescente di tutti gli elementi. Esempio: inserimento di 80 nel posto giusto nell array: InsOrd(A,lo,hi) input:a è una lista di interi, e A[hi] è l elemento da inserire tra gli elementi A[lo],...,A[hi-1] prec: A[lo:hi-1] è ordinato post: l array A[lo:hi] è ordinato x = A[hi] i = hi-1 while (i lo and x < A[i]) {A[i+1] = A[i] // spostamento di una posizione a destra i = i - 1 } A[i+1] = x 7 // Se all uscita i = lo - 1, vuol dire che il controllo x < A[i] è risultato vero per i = hi-1 fino a lo, quindi x viene correttamente inserito in A[lo]. Se l uscita è determinata da x A[i], allora, x < A[j] per i < j hi-1 e, poichè A è ordinato, tutti quelli che precedono A[i] sono minori o uguali di x mentre i successivi sono più grandi. Quindi i+1 è il posto giusto per x in A. 22

23 Inserimento in un array ordinato: complessità soluzione 1 InsOrd(A,lo,hi) input:a è una lista di interi, e A[hi] è l elemento da inserire tra gli elementi A[lo],...,A[hi-1] prec: A[lo:hi-1] è ordinato post: l array A[lo:hi] è ordinato x = A[hi] i = hi-1 while (i lo and x < A[i]) {A[i+1] = A[i] // spostamento di una posizione a destra i = i - 1 } A[i+1] = x Gli assegnamenti sono ripetuti finchè vale i lo e x<a[i]. Chiamiamo n il numero di elementi di A[lo:hi], c il costo (costante e positivo) dei confronti e degli assegnamenti all interno del ciclo while e d quello (costante e positivo) delle operazioni al di fuori del ciclo. 23

24 Inserimento in un array ordinato: complessità soluzione 1 InsOrd(A,lo,hi) input:a è una lista di interi, e A[hi] è l elemento da inserire tra gli elementi A[lo],...,A[hi-1] prec: A[lo:hi-1] è ordinato post: l array A[lo:hi] è ordinato x = A[hi] i = hi-1 while (i lo and x < A[i]) {A[i+1] = A[i] // spostamento di una posizione a destra i = i - 1 } A[i+1] = x 1. nel caso migliore non si entra nel ciclo while perché x A[hi-1], x si trova già nella posizione giusta e allora tutta l operazione è eseguita in tempo costante. 2. nel caso peggiore x < A[lo] e allora le operazioni all interno del ciclo sono eseguite n volte, quindi la complessità di tempo nel caso peggiore su un input di dimensione n è TMAXInsOrd(n) = c * n + d. 3. in generale l operazione su un input di n elementi è eseguita in un numero di passi superiormente limitato da c * n + d, cioè TInsOrd(n) c * n + d. 24

25 Inserimento in un array ordinato: soluzione 2 Data una lista A di interi ordinata in ordine crescente, cioè in modo tale che A[i] A[i+1], per 0 i<n-1, vogliamo inserire un elemento, in modo da ottenere ancora una lista di interi ordinata crescente. Possiamo usare l algoritmo della ricerca binaria o dicotomica, per determinare la posizione di inserimento dell elemento. Una volta determinata la corretta posizione, i, possiamo inserire l elemento spostando a destra di una posizione tutti gli elementi dall i-simo all ultimo. 25

26 Algoritmo della ricerca binaria o dicotomica, per determinare la posizione di inserimento di un elemento in un array ordinato. RBisect(A,k) INPUT: una sequenza A di elementi e l elemento da cercare, k. PREC: A[0] A[1]... A[n-1], dove n è il numero degli elementi OUTPUT: restituisce la posizione nella quale inserire k se non occorre nella sequenza, l indice dell elemento immediatamente a destra dell ultima occorrenza di k altrimenti. sia lo = 0 e hi = len(a) %inizialmente k può essere ovunque nel vettore %nel ciclo che segue l intervallo della ricerca è sempre determinato dagli indici lo,,hi-1 finchè ci sono elementi da esaminare sia m l indice dell elemento centrale in A[lo],,A[hi] se k < A[m] poni hi=m %cerca k tra gli elementi di indice lo,,m-1, se k A[m] poni lo=m+1 %cerca k tra gli elementi di indice m+1,,hi-1 return lo 26

27 RBisect(A,k) RBisect: dettagli INPUT: una lista A di interi e l elemento da cercare, k. PREC: A[0] A[1]... A[n-1], dove n è il numero degli elementi OUTPUT: restituisce la posizione nella quale inserire k se non occorre nella sequenza, l indice dell elemento immediatamente a destra dell ultima occorrenza di k altrimenti. 1. sia lo = 0 e hi = len(a) 2. finchè ci sono elementi da esaminare %nel ciclo che segue l intervallo della ricerca è sempre determinato dagli indici lo,,hi-1 3. sia m l indice dell elemento centrale in A[lo],,A[hi] 4. se k < A[m] poni hi=m 5. se k A[m] poni lo=m+1 6. return lo Quando non ci sono più elementi da esaminare? Quando lo=hi, visto che gli elementi su cui si fa la ricerca sono quelli di indice compreso tra lo e hi-1. Come calcolo l indice dell elemento centrale? Se si pone m = (hi-1 - lo +1)/2, perché non va bene? Perché essendo lo l indice di partenza, per trovare il punto centrale nell intervallo [lo,hi-1] devo aggiungerlo alla metà del numero degli elementi. Quindi m = lo + (hi-lo)/2 oppure m = (lo + hi)/2 se si è sicuri di non 27 incorrere in overflow

28 RBisect: Esempio RBisect(A,k) INPUT: una lista A di interi e l elemento da cercare, k. PREC: A[0] A[1]... A[n-1], dove n è il numero degli elementi OUTPUT: restituisce la posizione nella quale inserire k se non occorre nella sequenza, l indice dell elemento immediatamente a destra dell ultima occorrenza di k altrimenti. 1. lo = 0 e hi = len(a) 2. finchè lo < hi %nel ciclo che segue l intervallo della ricerca è sempre determinato dagli indici lo,,hi-1 3. m = lo + (hi-lo)/2 4. se k < A[m] poni hi=m 5. se k A[m] poni lo=m+1 6. return lo lo=0,hi=7 m=3 e key=4<8 lo=0,hi=3 m=1 e key 4 lo=2,hi =3 m=2 e key 4 lo=3,hi=3 e uscita

29 RBisect: complessità 1 RBisect(A,k) INPUT: una lista A di interi e l elemento da cercare, k. PREC: A[0] A[1]... A[n-1], dove n è il numero degli elementi OUTPUT: restituisce la posizione nella quale inserire k se non occorre nella sequenza, l indice dell elemento immediatamente a destra dell ultima occorrenza di k altrimenti. 1. lo = 0 e hi = len(a) 2. finchè lo < hi %nel ciclo che segue l intervallo della ricerca è sempre determinato dagli indici lo,,hi-1 3. m = lo + (hi-lo)/2 4. se k < A[m] poni hi=m 5. se k A[m] poni lo=m+1 6. return lo Le istruzioni dei punti 1,2,3,4,5,6 sono di costo costante. Le istruzioni 1 e 6 sono eseguite solo una volta Quante volte sono eseguite le istruzioni 2,3,4 e 5? 29

30 RBisect: complessità 2 RBisect(A,k) INPUT: una lista A di interi e l elemento da cercare, k. PREC: A[0] A[1]... A[n-1], dove n è il numero degli elementi OUTPUT: restituisce la posizione nella quale inserire k se non occorre nella sequenza, l indice dell elemento immediatamente a destra dell ultima occorrenza di k altrimenti. 1. lo = 0 e hi = len(a) 2. finchè lo < hi %nel ciclo che segue l intervallo della ricerca è sempre determinato dagli indici lo,,hi-1 3. m = lo + (hi-lo)/2 4. se k < A[m] poni hi=m 5. se k A[m] poni lo=m+1 6. return lo All inizio abbiamo n elementi nell intervallo della ricerca, poi circa la metà, n/2, poi ancora la metà n/4, Quante volte posso dimezzare n prima di arrivare ad avere un numero di elementi minore o uguale a 1? 30

31 RBisect: complessità 3 Supponiamo n = 2 k, allora dopo k divisioni per 2 si ottiene 1, e k = lg n, avendo posto log2 n = lg n Se 2 k n < 2 k+1, di nuovo dopo k divisioni per 2 si ottiene 1: 1 n/2 k < 2 k+1 /2 k = 2. k è la parte intera inferiore del logaritmo in base 2 di n. Quindi possiamo dire che le istruzioni all interno del ciclo sono eseguite circa lg n volte. Chiamiamo n il numero di elementi di A, cr il costo (costante e positivo) dei confronti e degli assegnamenti all interno del ciclo while e dr quello (costante e positivo) delle operazioni al di fuori del ciclo. 31

32 RBisect: complessità 4 RBisect(A,k) INPUT: una lista A di interi e l elemento da cercare, k. PREC: A[0] A[1]... A[n-1], dove n è il numero degli elementi OUTPUT: restituisce la posizione nella quale inserire k se non occorre nella sequenza, l indice dell elemento immediatamente a destra dell ultima occorrenza di k altrimenti. 1. lo = 0 e hi = len(a) 2. finchè lo < hi %nel ciclo che segue l intervallo della ricerca è sempre determinato dagli indici lo,,hi-1 3. m = lo + (hi-lo)/2 4. se k < A[m] poni hi=m 5. se k A[m] poni lo=m+1 6. return lo Quindi posso concludere che TRBisect(n) = TMAXRBisect(n) = cr * lg n + dr, per opportune costanti cr,dr >0 (qui l indice R in basso sta per Ricerca). Qui infatti il numero di esecuzioni del ciclo è lo stesso su ogni input di n elementi. Tornando al problema dell inserimento di un elemento in una lista ordinata, a questa complessità va aggiunta quella per spostare gli elementi di indice lo fino all ultimo di una posizione a destra per poter inserire k. 32

33 Confronto di complessità Nel caso peggiore per l operazione di spostamento a destra e inserimento si ha: TMAXinsPos(n)=cI * n + di, (dove I sta per Inserimento). A TMAXinsPos(n) si deve sommare il costo della ricerca della posizione in cui inserire l elemento TMAXRBisect(n) = cr * lg n + dr Per cui in definitiva TMAXinsOrd2(n) = TMAXRBisect(n) + TMAXinsPos(n)= ci * n + di + cr * lg n + dr Mentre per la prima soluzione sempre nel caso peggiore: TMAXInsOrd(n) = c * n + d Siamo ora in grado di decidere quale dei due algoritmi è meglio? Nel caso peggiore, con il primo algoritmo facciamo n confronti e n assegnamenti per fare spazio, mentre con il secondo facciamo lg n confronti e n spostamenti per fare spazio. Le costanti invece dipendono dal particolare ambiente hardware/software e non pesano sul tasso di crescita delle funzioni TMAX. 33

34 La crescita di una funzione lineare: f(n) = 3n

35 Lg n g(n) = lg n La funzione logaritmo cresce molto lentamente. 35

36 Confronto tra i due algoritmi TMAXInsOrd(n) = c * n + d TMAXinsOrd2(n) = TMAXRBisect(n) + TMAXinsPos(n)= ci * n + di + cr * lg n + dr Nel caso peggiore, con il primo algoritmo facciamo n confronti e n assegnamenti per fare spazio, mentre con il secondo facciamo lg n confronti e n spostamenti per fare spazio. Intuitivamente, se i confronti sono molto costosi e n è molto grande è preferibile l algoritmo che ne fa di meno, altrimenti meglio il più semplice. Ma in casi più complessi come regolarsi? Introduciamo uno strumento che ci consenta di non dover considerare le costanti, visto che non sono determinanti nella comprensione di come cresce la funzione complessità di tempo in dipendenza dell input. 36

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

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

Dettagli

Esercizi di Algoritmi e Strutture Dati

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

Dettagli

Heap e code di priorità

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

Dettagli

Programmazione I - corso B a.a prof. Viviana Bono

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 15 Algoritmi su array: selection sort, insertion sort, fusione

Dettagli

Analisi ammortizzata (Tarjan in 1985)

Analisi ammortizzata (Tarjan in 1985) In questa lezione Analisi della complessità di una sequenza di operazioni di estrazione e inserimento in una tabella memorizzata su un array, usando l analisi ammortizzata. Analisi ammortizzata (Tarjan

Dettagli

Il problema delle azioni

Il problema delle azioni Il problema delle azioni Per studiare l andamento del mercato azionario bisogna seguire i prezzi delle azioni in un lasso di tempo abbastanza lungo, diciamo n giorni. Se si dispone dei prezzi di un azione

Dettagli

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:

Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: Pag 24 3) Il problema della ricerca Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: si incontrano in una grande varietà di situazioni reali; appaiono come sottoproblemi

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi Codice BCD Prima di passare alla rappresentazione dei numeri relativi in binario vediamo un tipo di codifica che ha una certa rilevanza in alcune applicazioni: il codice BCD (Binary Coded Decimal). È un

Dettagli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

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

Dettagli

Problemi, istanze, soluzioni

Problemi, istanze, soluzioni lgoritmi e Strutture di Dati II 2 Problemi, istanze, soluzioni Un problema specifica una relazione matematica tra dati di ingresso e dati di uscita. Una istanza di un problema è formata dai dati di un

Dettagli

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

Un ripasso di aritmetica: Conversione dalla base 10 alla base 2

Un ripasso di aritmetica: Conversione dalla base 10 alla base 2 Un ripasso di aritmetica: Conversione dalla base 10 alla base 2 Dato un numero N rappresentato in base dieci, la sua rappresentazione in base due sarà del tipo: c m c m-1... c 1 c 0 (le c i sono cifre

Dettagli

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

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

Dettagli

A lezione sono stati presentati i seguenti passi per risolvere un problema:

A lezione sono stati presentati i seguenti passi per risolvere un problema: Calcolo delle radici di un polinomio Problema: Dati i coefficienti a,b,c di un polinomio di 2 grado della forma: ax^2 + bx + c = 0, calcolare le radici. A lezione sono stati presentati i seguenti passi

Dettagli

Rappresentazione dell Informazione

Rappresentazione dell Informazione Rappresentazione dell Informazione Rappresentazione delle informazioni in codice binario Caratteri Naturali e Reali positivi Interi Razionali Rappresentazione del testo Una stringa di bit per ogni simbolo

Dettagli

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt); Un esempio per iniziare Il controllo del programma in C DD Cap.3 pp.91-130 /* calcolo di 8!*/ #include #define C 8 int main() int i=1; int fatt=1; while (i

Dettagli

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso Laboratorio di Informatica Esercitazione su algoritmi e diagrammi di flusso Algoritmi, programmi e dati Algoritmo = insieme di istruzioni che indicano come svolgere operazioni complesse su dei dati attraverso

Dettagli

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo 1 Cos è l informatica? L informatica è la scienza della rappresentazione e dell elaborazione dell informazione Algoritmi e loro proprietà Proprietà formali degli Algoritmi Efficienza rispetto al tempo

Dettagli

Somma di numeri binari

Somma di numeri binari Fondamenti di Informatica: Codifica Binaria dell Informazione 1 Somma di numeri binari 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Esempio: 10011011 + 00101011 = 11000110 in base e una base Fondamenti di

Dettagli

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche

Costo di esecuzione. Quanto costa? Spazio. Spazio e tempo. Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Università Roma La Sapienza Corsi di Laurea Informatica/Tecnologie Informatiche Quanto costa? Prof. Stefano Guerrini guerrini@di.uniroma1.it Programmazione II (can. P-Z) A.A. 2005-06 Cosa contribuisce

Dettagli

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

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

Dettagli

Note per la Lezione 4 Ugo Vaccaro

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

Dettagli

Strutture dati e algoritmi. Sommario

Strutture dati e algoritmi. Sommario Sommario Strutture dati e algoritmi: Ricerca (lineare e binaria) Ordinamento (per selezione) Strutture dati e algoritmi Come esempi concreti di applicazioni in C++ si useranno le strutture dati e gli algoritmi.

Dettagli

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo

Dettagli

Esercizi sulla complessità di frammenti di pseudo-codice

Esercizi sulla complessità di frammenti di pseudo-codice Esercizi sulla complessità di frammenti di pseudo-codice Esercizio 1 Si determini la complessità temporale del seguente frammento di pseudo-codice in funzione di n. Il ciclo contiene solo istruzioni elementari;

Dettagli

La codifica digitale

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

Dettagli

Stringhe e allocazione dinamica della memoria

Stringhe e allocazione dinamica della memoria Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per

Dettagli

Sviluppo di programmi

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

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/20010 I. Castelli Alberi binari di ricerca, A.A. 2009/20010

Dettagli

L Allocazione Dinamica della Memoria

L Allocazione Dinamica della Memoria L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento

Dettagli

ESPONENZIALI E LOGARITMI. chiameremo logaritmica (e si legge il logaritmo in base a di c è uguale a b ).

ESPONENZIALI E LOGARITMI. chiameremo logaritmica (e si legge il logaritmo in base a di c è uguale a b ). ESPONENZIALI E LOGARITMI Data una espressione del tipo a b = c, che chiameremo notazione esponenziale (e dove a>0), stabiliamo di scriverla anche in un modo diverso: log a c = b che chiameremo logaritmica

Dettagli

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 25/02/2016/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 25/02/2016/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 25/02/2016/ Foglio delle domande/ VERSIONE 1 1) In Python, se scrivo v = [ ] in un programma, vuol dire che a) v è un quadrato b) v è una list c) v

Dettagli

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

Lezione 4. Problemi trattabili e soluzioni sempre più efficienti. Gianluca Rossi Lezione 4 Problemi trattabili e soluzioni sempre più efficienti Gianluca Rossi Trattabile o intrattabile? Consideriamo ora il problema, ben noto a tutti gli studenti a partire dalla scuola media, di calcolare

Dettagli

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi

Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Algoritmi e Strutture Dati - II modulo Soluzioni degli esercizi Francesco Pasquale 6 maggio 2015 Esercizio 1. Su una strada rettilinea ci sono n case nelle posizioni 0 c 1 < c 2 < < c n. Bisogna installare

Dettagli

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

Permutazioni. 1 Introduzione

Permutazioni. 1 Introduzione Permutazioni 1 Introduzione Una permutazione su un insieme di n elementi (di solito {1, 2,...,n}) è una funzione biiettiva dall insieme in sé. In parole povere, è una regola che a ogni elemento dell insieme,

Dettagli

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande/ VERSIONE 1 1) L approccio con cui si studia un sistema focalizzandosi solo sul rapporto tra input e output si chiama

Dettagli

Tempo e spazio di calcolo

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

Dettagli

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio Appunti di informatica Lezione 10 anno accademico 2016-2017 Mario Verdicchio Esercizio Scrivere un programma che, data una sequenza di 10 interi (scelta dall utente), la ordini in ordine crescente Soluzione

Dettagli

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.

Linguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. Linguaggio C Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. 1 Complessità degli Algoritmi Si definisce Complessità di un Algoritmo C(A) la funzione dei parametri rilevanti per A che determina

Dettagli

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio

Appunti di informatica. Lezione 3 anno accademico Mario Verdicchio Appunti di informatica Lezione 3 anno accademico 2015-2016 Mario Verdicchio Numeri binari in memoria In un calcolatore, i numeri binari sono tipicamente memorizzati in sequenze di caselle (note anche come

Dettagli

Introduzione ai puntatori in C Definizione

Introduzione ai puntatori in C Definizione Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il

Dettagli

CONSEGUENZA PROPORZIONI

CONSEGUENZA PROPORZIONI Corso di laurea: BIOLOGIA Tutor: Floris Marta PRECORSI DI MATEMATICA CONSEGUENZA PROPORZIONI PROBLEMI DEL TRE SEMPLICE Le conoscenze acquisite sui rapporti e sulle proporzioni possono essere applicate

Dettagli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli ELEMENTI DI INFORMATICA L-B Ing. Claudia Chiusoli Materiale Lucidi delle lezioni Date degli appelli Testi di esami precedenti Informazioni e contatti http://www.lia.deis.unibo.it/courses/ Programma del

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort

Sommario. Ordinamento. Selection Sort Bubble Sort/ Shaker Sort Shell Sort Ordinamento Sommario Ordinamento Selection Sort Bubble Sort/ Shaker Sort Shell Sort Cosa e' l'ordinamento Il problema consiste nell elaborare insiemi di dati costituiti da record I record hanno sono costituiti

Dettagli

Note sull implementazione in virgola fissa di filtri numerici

Note sull implementazione in virgola fissa di filtri numerici Note sull implementazione in virgola fissa di filtri numerici 4 settembre 2006 1 Introduction Nonostante al giorno d oggi i processori con aritmetica in virgola mobili siano molto comuni, esistono contesti

Dettagli

Laboratorio di Python

Laboratorio di Python Laboratorio di Python Matrici con Liste Lab09 5 Aprile 2017 Outline Correzione esercizi per oggi Matrici Teoria Esercizi Esercizi per casa Esercizio 1 per casa Scrivere una funzione che verifica se una

Dettagli

Alberi binari e alberi binari di ricerca

Alberi binari e alberi binari di ricerca Alberi binari e alberi binari di ricerca Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Dettagli

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che:

Esercizi su Python. 14 maggio Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che: Esercizi su Python 14 maggio 2012 1. Scrivere una procedura che generi una stringa di 100 interi casuali tra 1 e 1000 e che: 1. conti quanti elementi pari sono presenti nella lista; 2. conti quanti quadrati

Dettagli

Esercitazione 3. Espressioni booleane I comandi if-else e while

Esercitazione 3. Espressioni booleane I comandi if-else e while Esercitazione 3 Espressioni booleane I comandi if-else e while Esercizio Si consideri la seguente istruzione: if (C1) if (C2) S1; else S2; A quali delle seguenti interpretazioni corrisponde? if (C1) if

Dettagli

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

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

Dettagli

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento

Algoritmi e Strutture Dati. Capitolo 4 Ordinamento Algoritmi e Strutture Dati Capitolo 4 Ordinamento Ordinamento Dato un insieme S di n oggetti presi da un dominio totalmente ordinato, ordinare S Esempi: ordinare una lista di nomi alfabeticamente, o un

Dettagli

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

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

Dettagli

Array e liste. IASD a.a

Array e liste. IASD a.a Array e liste IASD a.a. 2015-16 Sequenze lineari n elementi a 0, a 1,..., a n 1 dove a j = (j + 1)-esimo elemento per 0 ij n 1. In una sequenza è importante l ordine degli elementi Consideriamo una sequenza

Dettagli

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: Ordered search table Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D: possiamo memorizzare le entrate di D in un array list S in ordine non decrescente di chiavi:

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori Moltiplicazione e divisione tra numeri interi: algoritmi e circuiti slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello Operazioni aritmetiche e logiche Abbiamo visto che le ALU sono in grado

Dettagli

ESERCIZI SULLE MATRICI

ESERCIZI SULLE MATRICI ESERCIZI SULLE MATRICI Consideriamo il sistema lineare a, x + a, x + + a,n x n = b a, x + a, x + + a,n x n = b a m, x + a m, x + + a m,n x n = b m di m equazioni in n incognite che ha a, a,n A = a m, a

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Analisi Asintotica Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino Un graduale processo di astrazione Passo 1: abbiamo ignorato il costo effettivo

Dettagli

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 30/06/2016/ Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 30/06/2016/ Foglio delle domande / VERSIONE 1 Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 30/06/2016/ Foglio delle domande/ VERSIONE 1 1) In Python, se scrivo v = [ ] in un programma, vuol dire che a) v è un quadrato b) v è un insieme vuoto

Dettagli

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi Somma di numeri floating point Algoritmi di moltiplicazione e divisione per numeri interi Standard IEEE754 " Standard IEEE754: Singola precisione (32 bit) si riescono a rappresentare numeri 2.0 10 2-38

Dettagli

Sistemi Web per il turismo - lezione 3 -

Sistemi Web per il turismo - lezione 3 - Sistemi Web per il turismo - lezione 3 - Software Si definisce software il complesso di comandi che fanno eseguire al computer delle operazioni. Il termine si contrappone ad hardware, che invece designa

Dettagli

Caratteri e stringhe

Caratteri e stringhe Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un

Dettagli

poiché f(n) max{f(n),g(n)}, e g(n) max{f(n),g(n)}, sommando termine a termine: Quindi possiamo concludere che f(n)+g(n) = Θ(max{f(n),g(n)})

poiché f(n) max{f(n),g(n)}, e g(n) max{f(n),g(n)}, sommando termine a termine: Quindi possiamo concludere che f(n)+g(n) = Θ(max{f(n),g(n)}) Sol Esercizio 1 Es. Notazione asintotica: 1. Si dimostri che f(n)+g(n) = Θ(max{f(n),g(n)}) sotto l ip. f(n),g(n) >0, a partire da un certo n 0. poiché f(n) max{f(n),g(n)}, e g(n) max{f(n),g(n)}, sommando

Dettagli

Informatica Teorica. Macchine a registri

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

Dettagli

Derivazione numerica. Introduzione al calcolo numerico. Derivazione numerica (II) Derivazione numerica (III)

Derivazione numerica. Introduzione al calcolo numerico. Derivazione numerica (II) Derivazione numerica (III) Derivazione numerica Introduzione al calcolo numerico Il calcolo della derivata di una funzione in un punto implica un processo al limite che può solo essere approssimato da un calcolatore. Supponiamo

Dettagli

Algoritmi e soluzione di problemi

Algoritmi e soluzione di problemi Algoritmi e soluzione di problemi Dato un problema devo trovare una soluzione. Esempi: effettuare una telefonata calcolare l area di un trapezio L algoritmo è la sequenza di operazioni (istruzioni, azioni)

Dettagli

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007 Dott.Davide Di Ruscio Dipartimento di Informatica Università degli Studi di L Aquila Lezione del 07/02/07 Nota Questi lucidi sono tratti

Dettagli

Algoritmi e strutture dati

Algoritmi e strutture dati Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 4 Implementazioni delle partizioni Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio 2016.

Dettagli

Allocazione Dinamica della Memoria

Allocazione Dinamica della Memoria Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando

Dettagli

Alberi ed Alberi Binari

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

Dettagli

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. Cicli e array Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7 Lez. 8 - Introduzione all ambiente

Dettagli

Albero di Riscorsione

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

Dettagli

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco. Alberi Alberi Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo Fosco Dora Drogo Frodo Dudo Daisy Alberi Gli alberi sono una generalizzazione

Dettagli

UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE. Dispense, cap

UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE. Dispense, cap UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE Dispense, cap. 5.1-5.2 Ricerca di un'informazione in una tabella Determinare se una parola X è presente in un dizionario (cioè in una lista

Dettagli

Progetto e analisi di algoritmi

Progetto e analisi di algoritmi Progetto e analisi di algoritmi Roberto Cordone DTI - Università degli Studi di Milano Polo Didattico e di Ricerca di Crema Tel. 0373 / 898089 E-mail: cordone@dti.unimi.it Ricevimento: su appuntamento

Dettagli

Esempio di Prova Scritta

Esempio di Prova Scritta Esempio di Prova Scritta La prova scritta è composta da alcuni esercizi per un totale di 10 punti (durata:circa 1h15 ). Le tipologie di esercizi possibili comprendono:! sintesi di una funzione ricorsiva/iterativa,

Dettagli

Alberi Binari di Ricerca

Alberi Binari di Ricerca Alberi Binari di Ricerca Prof. G. M. Farinella gfarinella@dmi.unict.it www.dmi.unict.it/farinella Riferimenti Bibliografici Cormen T.H., Leiserson C.E., Rivest R.L Introduction to Algorithms, Third Edition,

Dettagli

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

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

Dettagli

Codifica binaria. Rappresentazioni medianti basi diverse

Codifica binaria. Rappresentazioni medianti basi diverse Codifica binaria Rappresentazione di numeri Notazione di tipo posizionale (come la notazione decimale). Ogni numero è rappresentato da una sequenza di simboli Il valore del numero dipende non solo dalla

Dettagli

Rappresentazione binaria delle variabili (int e char)

Rappresentazione binaria delle variabili (int e char) Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati

Dettagli

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due Conversione di base Dato N>0 intero convertirlo in base b dividiamo N per b, otteniamo un quoto Q 0 ed un resto R 0 dividiamo Q 0 per b, otteniamo un quoto Q 1 ed un resto R 1 ripetiamo finché Q n < b

Dettagli

In questa lezione Strutture dati elementari: Pila Coda

In questa lezione Strutture dati elementari: Pila Coda In questa lezione Strutture dati elementari: Pila Coda 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le

Dettagli

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare

Dettagli

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2 INDICI MULTILIVELLO DINAMICI Indici multilivello dinamici (B-alberi e B + -alberi) Gli indici multilivello dinamici (B-alberi e B + -alberi) sono casi speciali di strutture ad albero. Un albero è formato

Dettagli

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

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

Dettagli

Cosa si intende con stato

Cosa si intende con stato Il concetto di stato Cosa si intende con stato I una particolare configurazione delle informazioni di una macchina, che in qualche modo memorizza le condizioni in cui si trova, e che cambia nel tempo passando

Dettagli

Addizionatori: metodo Carry-Lookahead. Costruzione di circuiti combinatori. Standard IEEE754

Addizionatori: metodo Carry-Lookahead. Costruzione di circuiti combinatori. Standard IEEE754 Addizionatori: metodo Carry-Lookahead Costruzione di circuiti combinatori Standard IEEE754 Addizionatori Il circuito combinatorio che implementa l addizionatore a n bit si basa su 1-bit adder collegati

Dettagli

Corso di Informatica Modulo T1 1 - Il concetto di problema

Corso di Informatica Modulo T1 1 - Il concetto di problema Corso di Informatica Modulo T1 1 - Il concetto di problema 1 Prerequisiti Concetti intuitivi di: Proporzione Problema Variabile Numeri interi e reali 2 1 Introduzione Nel risolvere un problema abbiamo

Dettagli

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3 Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali

Dettagli

Programmazione I - Laboratorio

Programmazione I - Laboratorio Programmazione I - Laboratorio Esercitazione 4 - Puntatori, vettori e stringhe Gianluca Mezzetti 1 Paolo Milazzo 2 1. Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ mezzetti mezzetti

Dettagli

2. Algoritmi e Programmi

2. Algoritmi e Programmi 12 2. Algoritmi e Programmi Dato un problema, per arrivare ad un programma che lo risolva dobbiamo: individuare di cosa dispongo: gli input; definire cosa voglio ottenere: gli output; trovare un metodo

Dettagli

Strutture di Controllo

Strutture di Controllo Introduzione Strutture di Controllo per strutture condizionali e cicliche Quando si affronta la programmazione si devono indicare al computer delle istruzioni da eseguire. Se il computer potesse comprendere

Dettagli

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali

Array. Maurizio Palesi Salvatore Serrano. In C si possono definire tipi strutturati Vi sono due costruttori fondamentali MASTER Information Technology Excellence Road (I.T.E.R.) Array Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Tipi di dato stutturati In C si possono

Dettagli

Lezione 6 Selection/Insertion Sort su interi e stringhe

Lezione 6 Selection/Insertion Sort su interi e stringhe Lezione 6 Selection/Insertion Sort su interi e stringhe Rossano Venturini rossano@di.unipi.it Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Tutoraggio Venerdì 14

Dettagli

Fondamenti di Informatica T-1 Modulo 2

Fondamenti di Informatica T-1 Modulo 2 Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array 2 Esercizio 1 Creare un programma che legga da input un numero non noto a priori di interi (al più 10) terminati da 0.

Dettagli

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale Analogico vs. Digitale LEZIONE II La codifica binaria Analogico Segnale che può assumere infiniti valori con continuità Digitale Segnale che può assumere solo valori discreti Analogico vs digitale Il computer

Dettagli

Esercizi di Algoritmi e Strutture Dati

Esercizi di Algoritmi e Strutture Dati Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera

Dettagli

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

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

Dettagli

La struttura dati CODA

La struttura dati CODA Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta

Dettagli