Analisi asintotica della complessità di tempo degli algoritmi
|
|
- Amerigo Capelli
- 7 anni fa
- Visualizzazioni
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
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
DettagliEsercizi 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
DettagliHeap 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
DettagliProgrammazione 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
DettagliAnalisi 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
DettagliIl 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
DettagliNell 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
DettagliCorso 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
DettagliFondamenti 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
DettagliProblemi, 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
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
DettagliUn 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
DettagliAlgoritmi 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
DettagliA 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
DettagliRappresentazione 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
DettagliUn 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
DettagliLaboratorio 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
DettagliAlgoritmi 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
DettagliSomma 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
DettagliCosto 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
DettagliLE 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
DettagliNote 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
DettagliStrutture 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.
DettagliINDICI 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
DettagliEsercizi 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;
DettagliLa 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
DettagliStringhe 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
DettagliSviluppo 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
DettagliAlberi 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
DettagliL 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
DettagliESPONENZIALI 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
DettagliInformatica/ 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
DettagliLezione 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
DettagliAlgoritmi 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
Dettagli6 - 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
DettagliPermutazioni. 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,
DettagliInformatica/ 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
DettagliTempo 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
DettagliAppunti 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
DettagliLinguaggio 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
DettagliAppunti 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
DettagliIntroduzione 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
DettagliCONSEGUENZA 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
DettagliELEMENTI 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
DettagliERRATA 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
DettagliSommario. 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
DettagliNote 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
DettagliLaboratorio 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
DettagliAlberi 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
DettagliEsercizi 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
DettagliEsercitazione 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
DettagliLaboratorio 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:
DettagliAlgoritmi 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
DettagliProblema: 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
DettagliArray 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
DettagliADT 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:
DettagliArchitettura 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
DettagliESERCIZI 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
DettagliAlgoritmi 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
DettagliInformatica/ 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
DettagliSomma 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
DettagliSistemi 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
DettagliCaratteri 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
Dettaglipoiché 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
DettagliInformatica 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
DettagliDerivazione 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
DettagliAlgoritmi 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)
DettagliLaboratorio 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
DettagliAlgoritmi 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.
DettagliAllocazione 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
DettagliAlberi 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,
DettagliErrori 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
DettagliAlbero 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
DettagliAlberi. 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
DettagliUD 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
DettagliProgetto 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
DettagliEsempio 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,
DettagliAlberi 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,
DettagliEsercizi 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
DettagliCodifica 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
DettagliRappresentazione 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
DettagliConversione 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
DettagliIn 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
DettagliCompitino 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
DettagliIndici 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
DettagliUNIVERSITÀ 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
DettagliCosa 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
DettagliAddizionatori: 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
DettagliCorso 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
DettagliIl 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
DettagliProgrammazione 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
Dettagli2. 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
DettagliStrutture 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
DettagliArray. 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
DettagliLezione 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
DettagliFondamenti 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.
DettagliAnalogico 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
DettagliEsercizi 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
DettagliEsercizio 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
DettagliLa 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