Così come per le liste, un dizionario è costituito da un insieme di coppie di elementi (k,e) chiaveelemento.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Così come per le liste, un dizionario è costituito da un insieme di coppie di elementi (k,e) chiaveelemento."

Transcript

1 DIZIONARI Così come per le liste, un dizionario è costituito da un insieme di coppie di elementi (k,e) chiaveelemento. In questo testo si utilizzerà spesso il termine elemento, a volte per indicare la coppia (k,e), a volte per indicare l elemento e contenuto nella coppia (k,e). In alcuni casi, per non fare troppa confusione si indicherà come valore dell elemento l elemento e contenuto nella coppia (k,e) chiave-elemento. Il primo utilizzo di un dizionario è di memorizzare degli elementi (k, e) chiave-elemento in modo tale che sia facile in base alle loro chiavi recuperarli in modo rapido ed efficiente. La motivazione per una tale ricerca è che il contenuto dell elemento contenuto nella coppia di elementi è molto più ampio dell informazione riportata nella chiave. Tuttavia la chiave rappresenta il solo mezzo a disposizione per recuperare ogni voce del dizionario. Alle chiavi contenute in un dizionario non è necessariamente richiesto tuttavia di avere una relazione d ordine totale. Infatti per un dizionario, l unica cosa che conta è avere un sistema per dire se due chiavi di due diversi elementi sono uguali oppure no. Invece quando sulle chiavi è definita una relazione d ordine totale, allora si dice che il dizionario è ordinato. Su un dizionario ordinato si possono aggiungere metodi specifici per tale caratteristica aggiuntiva. Un dizionario in termini informatici ( computer dictionary ) è simile ad un dizionario nel senso comune del termine. Tuttavia su questa struttura non è possibile aggiungere o togliere degli elementi, così come dall equivalente struttura informatica che, così come è strutturata, è fatta apposta per continui inserimenti e rimozioni. Già si è visto sul capitolo 9 come possa essere realizzato in maniera efficiente un dizionario utilizzando come struttura dati gli alberi. Si è visto che tali strutture rappresentano delle ottime soluzioni per inserire, ricercare ed eliminare elementi da un dizionario. Infatti il costo di ognuna delle operazioni effettuabili su di un albero di ricerca avanzato (AVL, (2,4) Tree, ecc.) è dell ordine di O(log n). In questo capitolo si affronterà la costruzione di un Dizionario basandosi su strutture del tutto differenti da quelle viste fino ad ora: le hash tables e le skip list. Queste nuove strutture dati permettono in alcuni casi delle prestazioni strabilianti, a costo però di altre preziose risorse come la memoria. 1

2 Il tipo di dato astratto (ADT) Dizionario Un Dizionario memorizza coppie di valori (k, e) chiave-elemento dove k è la chiave ed e l elemento. Per generalizzare al massimo la struttura dizionario è possibile pensare che sia la chiave, sia l elemento possano essere di qualsiasi tipo e, quindi, in generale di tipo Object. Se si tratta di un dizionario per memorizzare gli studenti di una scuola, probabilmente la chiave di ogni elemento sarà costituita dal numero di matricola dello studente. Potrebbe anche esserci il caso in cui la chiave di ogni coppia chiave elemento coincida con l elemento stesso, cioè che la chiave del dizionario e l elemento da memorizzare coincidano. E per esempio il caso in cui si vogliano memorizzare tutti i numeri primi: il numero primo rappresenta la chiave e coincide con l elemento da memorizzare. Si possono distinguere due casi di dizionari: 1) dizionari non ordinati; 2) dizionari ordinati. In tutti due i casi c è sempre una coppia chiave-elemento in cui la chiave rappresenta un identificatore di che cosa è memorizzato nell elemento in base ad una regola di associazione impostata dal costruttore del dizionario. Così come esiste sempre un modo per determinare se due chiavi sono uguali. Nei dizionari ordinati esiste una relazione d ordine totale fra le chiavi degli elementi ed esistono metodi aggiuntivi dell ADT dizionario che caratterizzano tale tipologia di struttura e che fanno uso di tale relazione d ordine fra le chiavi dei vari elementi. In un dizionario ordinato è possibile determinare l ordine relativo di un elemento rispetto ad un altro dello stesso dizionario in base ad uno strumento comparatore che viene fornito come parametro durante le fasi di costruzione dell oggetto istanziato da una tale tipologia di struttura. Per generalizzare è possibile anche che esistano più elementi memorizzati nello stesso dizionari con la stessa chiave. In alcuni casi tale comportamento deve essere evitato. Per esempio non possono esistere in un dizionario due persone con lo stesso codice fiscale. In questo caso, quando le chiavi sono uniche nel dizionario, allora si può pensare che esista una specie di mappatura fra le chiavi dei vari elementi e gli indirizzi fisici di memoria in cui tali elementi sono memorizzati. L ADT dizionario Il dato astratto dizionario supporta i seguenti metodi: size() : ritorna il numero degli elementi di D Input: niente Output: numero intero isempty() : Verifica se D è vuoto Input: niente Output: {true, false} elements() : ritorna gli elementi (valori) memorizzati in D Input: niente Output: Iteratore di oggetti (elementi) keys() : ritorna le chiavi memorizzate in D Input: niente Output: Iteratore di oggetti (chiavi) 2

3 findelement(k) : Se D contiene l elemento con chiave k allora ritorna tale elemento, altrimenti ritorna il valore speciale NO_SUCH_KEY Input: Object(key) Output: Object(elemento) findallelements(k) : Ritorna un iteratore su tutti gli elementi di D aventi chiave k Input: Object(key) Output: Iteratore di oggetti (elementi) insertitem(k,e) : inserisce in D un nuovo elemento di chiave k e valore e Input: Object(key), Object(element) Output: niente removeelement(k) : Se D contiene un elemento con chiave k allora rimuove tale elemento e ne ritorna l elemento, altrimenti ritorna il valore speciale NO_SUCH_KEY Input: Object(key) Output: Object(elemento) removeallelements(k) : rimuove tutti gli elementi di chiave k e restituisce un Iteratore a tali elementi Input: Object(key) Output: Iteratore di oggetti (elementi) Quando i metodi findelement() e removeelement() non hanno successo allora entrambi ritornano il valore speciale NO_SUCH_KEY che è esso stesso un elemento, non nel senso di valore. Un elemento di questo tipo prende il nome di sentinella. L utilizzo di sentinelle nei programmi è consuetudine abbastanza comune. In taluni casi, l utilizzo di una sentinella può essere considerato come l unico modo davvero efficace per risolvere determinati tipi di problemi. Il caso in esame è uno di questi. Infatti il problema di come segnalare l insuccesso di un metodo di ritrovamento di un elemento potrebbe essere segnalato lanciando un eccezione. Tuttavia tale metodologia presenta il grande svantaggio di doversi trovare a gestire su un altra parte del codice tale eccezione. Oltretutto la gestione delle eccezioni richiede molte più risorse che il semplice utilizzo di un elemento (ks,es) speciale come il NO_SUCH_KEY. Si potrebbe pure essere portati a pensare di poter ritornare un riferimento nullo come valore di ritorno dei due metodi chiamati. Tuttavia tale soluzione presenta lo svantaggio, come descritto più avanti, di confondere valori nulli con il fatto di non aver portato a termine con successo il metodo in questione. I metodi findelement(k) e removeelement(k), nel caso siano presenti più elementi con la stessa chiave, non fanno altro che ritornare il primo elemento trovato con tale chiave. La figura seguente mostra un esempio di come agiscono i metodi dell ADT Dizionario sull insieme degli elementi forniti nell esempio. 3

4 Test di uguaglianza delle chiavi Ciascun dizionario standard richiede, per come è stato definito, che esista un meccanismo per decidere se due chiavi di due elementi distinti di uno stesso dizionario siano uguali oppure no. Tale meccanismo, nel caso il Dizionario sia ordinato, viene fornito dal comparatore associato al dizionario. In caso contrario l oggetto equality tester è lo strumento utilizzato per lo scopo. Tale oggetto supporta il metodo areequal() per stabilire se due chiavi sono uguali oppure no. In questo senso un comparatore può essere visto come una estensione dell equality tester. ADT Dizionari implementati in JAVA Il pacchetto standard java.util include una interfaccia della struttura dati astratta Dizionario, chiamata java.util.map. In più, in questo pacchetto è anche presente una classe astratta, che non implementa completamente tutti i metodi, chiamata java.util.dictionary. Tale classe implementa l interfaccia java.util.map. Tali classi possono però considerarsi obsolete. Per questi motivi: 1) Le classi Map e Dictionary non hanno metodi che permettono di memorizzare elementi con chiavi uguali. Quindi non c è corrispondenza, per esempio con il metodo findallelements(k) visto prima. 2) Le modalità di effettuazione dei confronti fra le chiavi sono diversi 3) Viene utilizzato il riferimento a null sia come valore di un elemento sia come una sentinella per indicare l insuccesso dell esecuzione di alcuni metodi. I due ultimi motivi sono particolarmente importanti. Modalità di confronto delle chiavi con la classe java.util.map La classe java.util.map sottintende che l oggetto chiave contenuto negli elementi del Dizionario implementi l interfaccia Comparable e quindi abbia in se il metodo od i metodi per il confronto dei valori delle chiavi. Questo approccio, se da un lato appare molto comodo, dall altro ha la notevole limitazione di dover fornire dei metodi di comparazione univocamente legati al tipo di chiave utilizzato nel Dizionario. Ma in taluni contesti, le chiavi non possono conoscere quale è il giusto criterio di comparazione. Infatti, utilizzando tali chiavi in algoritmi diversi, le regole possono essere diverse. Per esempio, considerando come chiavi le coordinate di un punto, per alcuni algoritmi l eguaglianza di due chiavi sono rappresentate da punti avente la stessa ascissa x. Altri invece potrebbero considerare l uguaglianza di due chiavi nel caso l ordinata y di due punti siano le stesse. L utilizzo di un comparatore esterno fornisce un modo generale, riutilizzabile, ed adattabile di determinare l eguaglianza di due chiavi. Utilizzo di null sia come un elemento, sia come una sentinella La terza principale differenza con la struttura dati Dizionario definita precedentemente è che la classe java.util.map utilizza gli oggetti null come valore speciale di ritorno (=sentinella) per metodi che non sono riusciti a portare a termine con successo il loro compito. Tuttavia, sempre la classe Map, permette di memorizzare elementi nulli, cioè riferimenti a null, come elementi di alcune coppie (k,e) chiave-valore appartenenti al dizionario. Tale concessione genera dei pericolosi equivoci nel momento in cui un metodo quale findelement(k) restituisce un riferimento a null. Infatti tale valore potrebbe essere generato per il fatto di non aver trovato alcun elemento con tale 4

5 chiave, oppure per aver trovato un elemento con valore nullo. Per dirimere ogni dubbio a proposito esiste il metodo containskey(k) della classe Map che restituisce il valore booleano true nel caso il dizionario contenga un elemento con tale chiave. Metodi corrispondenti Ecco lo schema completo delle corrispondenze fra le classi java.util.map e l ADT Dizionario. Log Files Un metodo molto semplice di realizzare un Dizionario è quello di utilizzare un vettore non ordinato di elementi, una lista oppure in generale una sequenza di elementi che memorizzi coppie (k,e) chiave-elemento una dopo l altra. Una tale implementazione prende il nome di log file (file di registro) o audit trail. I file di registro sono molto utilizzati soprattutto in applicazioni finanziarie e laddove occorra tener traccia di ogni genere di operazione che venga compiuta su una banca dati o su una struttura riportante informazioni critiche. L importanza di uno strumento simile la si capisce nel momento in cui avviene un crash di sistema o si verifica un problema di qualsiasi natura durante lo svolgimento di una operazione delicata. In questo caso esistono dei meccanismi di sicurezza che, andando a leggere le operazioni svolte prima e durante il problema, riescono a riportare il sistema alla situazione iniziale. 5

6 Da come è stato presentato si capisce che il file log è una struttura che, data la bassa probabilità che si verifichi un problema, deve permettere inserimenti in sequenza con una elevata efficienza a scapito di una bassa efficienza di recupero delle informazioni. Formalmente si dice che i files di log implementano l ADT dizionario D utilizzando una sequenza S per memorizzare gli elementi di D in un ordine arbitrario. Si assume che l implementazione della sequenza S sia fatta tramite l utilizzo di un Vettore o di una lista doppiamente concatenata. Si può parlare di log file anche come una implementazione di una sequenza non ordinata (unorderd sequenze implementation). Analisi di una struttura dati di tipo log file Lo spazio richiesto per una struttura di questo tipo è dell ordine di Θ(n) e quindi l utilizzo della memoria di queste strutture è proporzionale al numero di elementi memorizzati. Per quanto riguarda il tempo, i log files hanno metodi di inserimento degli elementi molto veloci, dell ordine di O(1). Questo a scapito di tempi di ricerca molto lunghi, dato che per trovare un singolo elemento di chiave k in questa struttura, bisogna visitare tutti gli elementi dal primo fino all elemento trovato o fino alla fine, in caso di insuccesso. Così la complessità di un metodo di ricerca di un elemento avrà in media una complessità dell ordine di O(n). Lo stesso si può dire per tutti i metodi di ricerca (findallelements Θ(n)) e rimozione degli elementi (removeelement(k) O(n), removeallelements(k) Θ(n)). HASH TABLES Le parole contenute in un dizionario sono tutte formate da combinazioni di lettere dell alfabeto. Naturalmente non tutte le combinazioni di lettere formano delle parole sensate. Anzi, le parole prive di significato sono molte più di quelle contenute in un dizionario di Italiano. Si pensi per un attimo di avere a disposizione un vettore contenente tante celle quante sono le possibili combinazioni di lettere. Allora, ordinando tutte le possibili associazioni di lettere in ordine alfabetico, sarebbe possibile associare ad ogni parola un indirizzo di una cella di tale vettore. La cosa sorprendente è che tale numerazione permetterebbe di raggiungere ogni possibile parola in un tempo molto piccolo, dell ordine di O(1). Infatti sarebbe molto semplice ricavarsi una regola per associare, data una qualsiasi combinazione finita di lettere, un indice di tale vettore a tale parola. Quindi, anche le operazioni di inserimento e di rimozione degli elementi nel vettore sarebbero tutte operazioni molto veloci. 6

7 L esempio riportato fa capire le potenzialità ed i limiti di una tale tecnica. Infatti una realizzazione di questo tipo, anche se molto veloce, occuperebbe una quantità di memoria enorme, dato che le parole di un dizionario formano un numero molto più piccolo (circa ) di tutte le possibili combinazioni di lettere (20 21!). La cosa potrebbe essere risolta conoscendo una regola per cui, ad ogni parola del dizionario, sarebbe possibile associare univocamente un numero intero da 0 al massimo numero di parole presenti nel dizionario. Questa soluzione permetterebbe di non sprecare neppure una locazione di memoria e consentirebbe di avere prestazioni di ricerca, di inserimento e di estrazione dell ordina di O(1). Per sfortuna, una tale situazione non esiste nella pratica. Pur tuttavia l esempio suggerisce che è possibile sfruttare tecniche simili per ricavare indirizzi o indici di un vettore su cui memorizzare gli elementi. Uno dei modi più efficienti di implementare l ADT dizionario è attraverso l utilizzo delle tabelle di hashing (=spezzettare). Tali tabelle utilizzano le tecniche di compressione dei valori delle chiavi visti nell esempio. E meglio andare con ordine. Il vettore di secchi (bucket array) Un bucket array (letteralmente: array di secchi) è un vettore A[] di dimensione N, dove ogni cella di A[] può essere pensata come un secchio (bucket) ovverosia un contenitore di una coppia (k, e) chiave-elemento del dizionario D e dove N definisce la capacità del vettore. Se le chiavi degli elementi fossero dei numeri interi compresi fra 0 e N-1, e le chiavi fossero anche ben distribuite nell insieme [0, N-1], allora, immaginando di avere un solo elemento per chiave, questa sequenza di contenitori rappresenterebbe tutto ciò che occorre per memorizzare gli elementi nel Dizionario. Infatti un elemento e di chiave k sarebbe semplicemente memorizzato nel vettore A[] in posizione A[k]. Le chiavi associate ad elementi nulli semplicemente indicherebbero la posizione del vettore in cui inserire uno speciale elemento sentinella NO_SUCH_KEY. Naturalmente se le chiavi non fossero nulle, potrebbero verificarsi delle collisioni, nel senso che due elementi diversi con la stessa chiave potrebbero fare riferimento ad un unico indirizzo. Ma visto che una cella del vettore o secchio può contenere un solo elemento, bisognerebbe pensare ad una strategia per gestire il problema. Problema che prende il nome di gestione delle collisioni. Naturalmente la cosa migliore da fare è evitare che le collisioni si verifichino, dato che è sempre meglio prevenire che curare. Analisi di una struttura a bucket array Nel caso le chiavi siano uniche, le collisioni non rappresenterebbero un problema, e quindi le ricerche, gli inserimenti e le estrazioni di elementi occuperebbero un tempo che, nel peggiore dei casi, sarebbe dell ordine di O(1). Questo fatto appare come una grande risultato. Raggiunto però a scapito della risorsa memoria. Infatti per memorizzare gli elementi del dizionario occorrerebbero comunque Θ(n) spazi di memoria, anche nel caso che nel dizionario non fosse presente alcun 7

8 elemento. Nel caso N fosse molto grande, questa implementazione rappresenterebbe un enorme spreco di memoria. Un altro problema di questo tipo di implementazione è rappresentato dal fatto che le chiavi di tutti gli elementi devono essere diverse fra loro. Dato che questi due problemi sono molto comuni, si definisce come struttura dati di tipo hash table l associazione del bucket array assieme ad una buona funzione di mappatura delle chiavi degli elementi nell intervallo [0, N-1]. Funzioni di hashing La seconda parte di una struttura ad hash table, è una funzione h, detta funzione di hash, che mappa le chiavi delgi elementi del dizionario in un intervallo di interi da 0 a N-1, dove N è la capacità del vettore di secchi per questa tabella. Atraverso una tale funzione h è possibile applicare il metodo del bucket array a chiavi arbitrarie. L idea di questa strategia è di utilizzare una funzione h(k) in modo tale da permettere l associazione di una qualsiasi chiave k di un elemento di un dizionario ad un valore h(k) intero compreso nell intervallo [0, N-1]. Si può dire che una tale funzione h() è tanto migliore quanto riesce ad evitare le collisioni di elementi diversi del dizionario. Naturalmente, per ragioni pratiche, la funzione h() deve anche essere la più semplice possibile da calcolare. Seguendo queste due considerazioni la funzione h() può essere suddivisa in due fasi: 1) mappatura di una qualsiasi chiave (in generale di tipo Object) ad un valore numerico intero; 2) mappatura di tale valore intero in un altro compreso nell intervallo [0,N-1]. La prima mappatura si chiama codifica hash, la seconda mappa di compressione. Codifica Hash La prima azione che una funzione di hash deve compiere è quella di prendere una arbitraria chiave k di un qualsiasi elemento del dizionario e di assegnare ad essa un valore intero. Non importa se questo valore è positivo o negativo, se è compreso nell intervallo [0, N-1] o meno. L importante è che siano evitate il più possibile le collisioni fra chiavi diverse. In più, dovrebbe capitare che chiavi 8

9 considerate uguali dai metodi dell oggetto comparatore o equality tester forniti col dizionario, fossero mappate sullo stesso valore numerico. Funzioni di Hash in Java La generica classe Object definita in Java supporta il metodo hashcode(). Tale metodo mappa ogni oggetto istanziato da tale classe in un corrispondente valore numerico a 32 bit (tipo int). Volendo, ogni classe in Java supporta un tale metodo, visto che lo eredita dalla classe generale Object. Tuttavia bisogna stare attenti ad utilizzare tale metodo così come è. Infatti esso non fa altro che mappare l indirizzo di memoria dell oggetto nel corrispondente valore numerico intero. E quindi potrebbe capitare il caso di due oggetti chiave considerati uguali dal metodo areequal() del comparatore, ma mappati su due valori numerici completamente diversi, solamente per il fatto di essere memorizzati su due locazioni di memoria completamente differenti. Per fortuna che la classe String sovrascrive il metodo hashcode() per fornirne uno più consono alle aspettative di chi vuole implementare un dizionario. Comunque ci sono molti metodi per realizzare delle funzioni di mappatura in modo molto più appropriato. Casting ad un intero Il primo metodo molto semplice per realizzare una funzione di hash è quello di forzare la variabile oggetto chiave ad essere del tipo intero. Così per esempio tutti i tipi interi byte, short, int ed anche per il tipo char si ottiene un ottima funzione di mappatura. Invece per chiavi di tipo float un tale modo di procedere potrebbe essere poco efficace, per il fatto che il casting ad un intero di un numero in virgola mobile porterebbe alla perdita delle cifre decimali del numero stesso, facendo in modo così di mappare chiavi diverse sullo stesso valore intero. Per fortuna è possibile utilizzare come funzione di mappatura il metodo della classe Float floattobits(x) che converte un numero di tipo float nella corrispondente rappresentazione intera del valore dei suoi bits. 9

10 Sommare componenti Per valori di tipo long e double, la cui rappresentazione occupa il doppio di bits utilizzati per la rappresentazione di valori float, il metodo precedente non risulterebbe praticabile. La soluzione è rappresentata dal forzare il numero corrispondente ottenuto come rappresentazione dei suoi bits ad essere di tipo intero (int). Ma ci si accorge subito comunque del fatto che una tale soluzione favorisce la perdita di informazione di alcuni bits. Così come il metodo alternativo: che somma ai primi bits della corrispondente rappresentazione intera di un long i successivi bits meno significativi di tale rappresentazione attraverso un operazione di shift degli stessi bits. A parole non ci si spiega bene come a mostrarne un esempio: static int hashcode(long i) //long = 64 bit { return (int)((i >>32) + (int)i ); } Lo schema presentato può essere applicato ad ogni tipo di rappresentazione binaria di oggetti la cui rappresentazione binaria del loro valore consiste in un insieme (x 0, x 1,, x k-1 ) di numeri interi. Una funzione valida potrebbe essere questa: h(x)= i= 0 ma sono argomenti affrontati più avanti, dare importanza anche alla posizione di ogni intero, cosa che la sommatoria precedente non fa. Ancora, la rappresentazione di un numero in virgola mobile può essere rappresentato come somma dei numeri ottenuti trasformando la mantissa e l esponente. k 1 x i. Sarebbe necessario però in questo caso, Funzioni di hash polinomiali La somma dei valori interi delle corrispondenti rappresentazioni binarie dei singoli gruppi di bytes può essere estesa anche nel caso delle stringhe. Infatti, pensando che ogni carattere ha una particolare rappresentazione binaria ad uno o due byte (caratteri Unicode), è possibile effettuare la somma dei valori interi di tale rappresentazione, così come mostrato in precedenza. Per esempio la stringa roma si trasforma nel corrispondente valore: 3 x= roma h(x)= x i in cui x 0 è il valore intero della corrispondente rappresentazione i= 0 della lettera r, x 1 della lettera o, e così via Tale tipo di metodologia soffre però del fatto che chiavi diverse composte esattamente dagli stessi caratteri permutati fra di loro vengono mappati nello stesso valore finale. E il caso della chiave amor o ancora della chiave mora. Non è una bella soluzione. Per risolvere il problema è necessario introdurre dei pesi da associare a ciascuna rappresentazione intera del carattere corrispondente a seconda di dove si trovi sul testo: 10

11 x 0 a k-1 + x 1 a k x k-2 a + x k-1 = x k-1 + a(x k-2 + a(x k a(x 2 + a(x 1 + a x 0 )) )) Questo particolare tipo di rappresentazione prende il nome di funzione di codifica polinomiale (polynomial hash code). Intuitivamente si può pensare che la funzione di hash utilizzi la moltiplicazione della costante a come un mezzo per fare spazio per ogni nuovo componente della tupla di valori mantenendo al tempo stesso la caratterizzazione data dal componente precedente. Utilizzando una rappresentazione finita per la chiave intera ottenuta, chiaramente si produrrà una qualche perdita di informazione dovuta agli overflow che si verificheranno durante il calcolo della sommatoria pesata. Si sceglie semplicemente di ignorare tali overflow e di prendere solamente il risultato ottenuto. Si è anche notato come la scelta di un buon valore della costante moltiplicativa a sia decisiva per ottenere ottimi risultati. Prove effettuate su circa 50'000 parole del dizionario inglese, mostrano come l utilizzo di valori di a ugualia 33, 37, 39 e 41 producano al massimo solamente 7 collisioni! Codici di hash a traslazione ciclica (cyclic shift hash code) Una variante della rappresentazione polinomiale è realizzabile sostituendo l utilizzo della costante moltiplicativa a con delle operazioni di traslazioni (shift) dei bit delle corrispondenti rappresentazioni numeriche dei singoli elementi x i della rappresentazione polinomiale. L esempio seguente mostra un algoritmo per mappare una stringa in un corrispondente valore intero: static int hashcode(string s) { int h = 0; //variabile a 32 bit for (int i = 0; i < s.lenght(); i ++) { h = (h << 5) (h >>> 27); // shift a 5 bit ciclico h += (int) s.charat(i); // aggiunta del successivo carattere } return h; } La figura seguente illustra meglio il concetto di traslazione di 5 posizioni dei bit di un numero binario: La tabellina seguente illustra come, scegliendo con accortezza l entità delle traslazioni dei singoli bit sia possibile ottenere risultati eccellenti. La prima colonna indica l entità della traslazione dei singoli bit. La seconda quante collisioni si sono verificate in tutto il dizionario, la terza qual è stato il numero massimo di collisioni per un singolo valore h() della funzione di hashing. 11

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

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash Funzioni Hash Sommario Tabelle ad indirizzamento diretto e hash Funzioni Hash Requisiti Metodo della divisione Metodo della moltiplicazione Funzione Hash Universale La ricerca Talvolta si richiede che

Dettagli

Esercizi Capitolo 7 - Hash

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

Dettagli

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati Algoritmi e Strutture Dati Capitolo 7 Tabelle hash Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano Implementazioni Dizionario Tempo richiesto dall operazione più costosa: -Liste - Alberi di ricerca

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

Linguaggio C - sezione dichiarativa: costanti e variabili

Linguaggio C - sezione dichiarativa: costanti e variabili Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente

Dettagli

PROBLEMI ALGORITMI E PROGRAMMAZIONE

PROBLEMI ALGORITMI E PROGRAMMAZIONE PROBLEMI ALGORITMI E PROGRAMMAZIONE SCIENZE E TECNOLOGIE APPLICATE CLASSE SECONDA D PROGRAMMARE = SPECIFICARE UN PROCEDIMENTO CAPACE DI FAR SVOLGERE AD UNA MACCHINA UNA SERIE ORDINATA DI OPERAZIONI AL

Dettagli

Equazioni lineari con due o più incognite

Equazioni lineari con due o più incognite Equazioni lineari con due o più incognite Siano date le uguaglianze: k 0; x + y = 6; 3a + b c = 8. La prima ha un termine incognito rappresentato dal simbolo letterale k; la seconda ha due termini incogniti

Dettagli

Strutture dati e loro organizzazione. Gabriella Trucco

Strutture dati e loro organizzazione. Gabriella Trucco Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi

Dettagli

modificato da andynaz Cambiamenti di base Tecniche Informatiche di Base

modificato da andynaz Cambiamenti di base Tecniche Informatiche di Base Cambiamenti di base Tecniche Informatiche di Base TIB 1 Il sistema posizionale decimale L idea del sistema posizionale: ogni cifra ha un peso Esempio: 132 = 100 + 30 + 2 = 1 10 2 + 3 10 1 + 2 10 0 Un numero

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

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

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

La codifica. dell informazione

La codifica. dell informazione 00010010101001110101010100010110101000011100010111 00010010101001110101010100010110101000011100010111 La codifica 00010010101001110101010100010110101000011100010111 dell informazione 00010010101001110101010100010110101000011100010111

Dettagli

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa: Come nella Mappa: un Dizionario è un contenitore di elementi del tipo (k,v) dove k è la chiave e v è il suo corrispondente valore. ogni elemento (k,v) viene detto entrata (entry) del Dizionario. chiavi

Dettagli

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2 LA CODIFICA DELL INFORMAZIONE Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2 Codifica dati e istruzioni Per scrivere un programma è necessario rappresentare istruzioni

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

Aritmetica dei Calcolatori Elettronici

Aritmetica dei Calcolatori Elettronici Aritmetica dei Calcolatori Elettronici Prof. Orazio Mirabella L informazione Analogica Segnale analogico: variabile continua assume un numero infinito di valori entro l intervallo di variazione intervallo

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

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

Rapida Nota sulla Rappresentazione dei Caratteri

Rapida Nota sulla Rappresentazione dei Caratteri TECNOLOGIA DIGITALE TECNOLOGIA DIGITALE (segue) CPU, memoria centrale e dispositivi sono realizzati con tecnologia elettronica digitale Dati ed operazioni vengono codificati tramite sequenze di bit 8 bit

Dettagli

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara Sistemi lineari Lorenzo Pareschi Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara http://utenti.unife.it/lorenzo.pareschi/ lorenzo.pareschi@unife.it Lorenzo Pareschi (Univ. Ferrara)

Dettagli

La rappresentazione delle informazioni

La rappresentazione delle informazioni La rappresentazione delle informazioni In queste pagine cercheremo di capire come sia possibile rappresentare mediante numeri e memorizzare in un file testi, immagini, video, suoni... Il computer per lavorare

Dettagli

Rappresentazione dell informazione

Rappresentazione dell informazione Rappresentazione dell informazione Problema che coinvolge aspetti filosofici Interessa soprattutto distinguere informazioni diverse Con un solo simbolo è impossibile Pertanto l insieme minimo è costituito

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

Programmazione I Paolo Valente /2017. Lezione 6. Notazione posizionale

Programmazione I Paolo Valente /2017. Lezione 6. Notazione posizionale Lezione 6 Notazione posizionale Ci sono solo 10 tipi di persone al mondo: quelle che conoscono la rappresentazione dei numeri in base 2, e quelle che non la conoscono... Programmazione I Paolo Valente

Dettagli

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010

Tipi di dati scalari (casting e puntatori) Alessandra Giordani Lunedì 10 maggio 2010 Tipi di dati scalari (casting e puntatori) Alessandra Giordani agiordani@disi.unitn.it Lunedì 10 maggio 2010 http://disi.unitn.it/~agiordani/ I tipi di dati scalari I tipi aritmetici, i tipi enumerativi

Dettagli

Aritmetica dei Calcolatori

Aritmetica dei Calcolatori Aritmetica dei Calcolatori Nicu Sebe March 14, 2016 Informatica Nicu Sebe 1 / 34 Operazioni su Bit Bit Scienza della rappresentazione e dell elaborazione dell informazione Abbiamo visto come i computer

Dettagli

Cap. 2 - Rappresentazione in base 2 dei numeri interi

Cap. 2 - Rappresentazione in base 2 dei numeri interi Cap. 2 - Rappresentazione in base 2 dei numeri interi 2.1 I NUMERI INTERI RELATIVI I numeri relativi sono numeri con il segno: essi possono essere quindi positivi e negativi. Si dividono in due categorie:

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

Fondamenti di Informatica T1 Mappe

Fondamenti di Informatica T1 Mappe Fondamenti di Informatica T1 Mappe Tutor Melissa Licciardello melissa.licciardell2@unibo.it Melissa Licciardello Fondamenti di Informatica T1 1 / 16 Mappe Matrice N x 2 : Gli elementi della prima colonna,

Dettagli

Teoria dell informazione

Teoria dell informazione Corso di Laurea a Distanza in Ingegneria Elettrica Corso di Comunicazioni Elettriche Teoria dell informazione A.A. 2008-09 Alberto Perotti DELEN-DAUIN Modello di sistema di comunicazione Il modello di

Dettagli

Prova d Esame Compito A

Prova d Esame Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public

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

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

Calcolo numerico e programmazione Rappresentazione dei numeri

Calcolo numerico e programmazione Rappresentazione dei numeri Calcolo numerico e programmazione Rappresentazione dei numeri Tullio Facchinetti 16 marzo 2012 10:54 http://robot.unipv.it/toolleeo Rappresentazione dei numeri nei calcolatori

Dettagli

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno.

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno. Definizione Oggetto del calcolo combinatorio è quello di determinare il numero dei modi mediante i quali possono essere associati, secondo prefissate regole, gli elementi di uno stesso insieme o di più

Dettagli

La rappresentazione dei dati

La rappresentazione dei dati La rappresentazione dei dati Base binaria E la base minima che include cifre diverse si devono conoscere le tabelline dello 0 dell 1 in elettronica si realizzano bene dispositivi bistabili There are only

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

R. Cusani, F. Cuomo: Telecomunicazioni - DataLinkLayer: Gestione degli errori, Aprile 2010

R. Cusani, F. Cuomo: Telecomunicazioni - DataLinkLayer: Gestione degli errori, Aprile 2010 1 11. Data link layer: codici di rilevazione di errore, gestione degli errori La rilevazione di errore Un codice a rilevazione di errore ha lo scopo di permettere al ricevente di determinare se vi sono

Dettagli

Strutture fisiche di accesso

Strutture fisiche di accesso Strutture fisiche di accesso Esercitazioni - Basi di dati (complementi) Autore: Dr. Simone Grega Esercizio 1 Siano date le seguenti informazioni: B=4096 bytes la dimensione di un blocco H=12 bytes la dimensione

Dettagli

Introduzione alla programmazione Esercizi risolti

Introduzione alla programmazione Esercizi risolti Esercizi risolti 1 Esercizio Si determini se il diagramma di flusso rappresentato in Figura 1 è strutturato. A B C D F E Figura 1: Diagramma di flusso strutturato? Soluzione Per determinare se il diagramma

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

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

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

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

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

Lezione 3. I numeri relativi

Lezione 3. I numeri relativi Lezione 3 L artimetcia binaria: i numeri relativi i numeri frazionari I numeri relativi Si possono rappresentare i numeri negativi in due modi con modulo e segno in complemento a 2 1 Modulo e segno Si

Dettagli

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Il Modello di von Neumann (2) Prevede 3 entità logiche: Introduzione all Architettura degli Elaboratori Sommario Macchina di von Neumann Esecuzione dei programmi Rappresentazione dei dati Dati numerici Dati alfabetici 1 2 Il Modello di von Neumann (1) L architettura

Dettagli

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi

Gestione degli impegni Requisiti generali Si fissi come ipotesi che la sequenza di impegni sia ordinata rispetto al tempo,, e che ogni lavoratore abbi Fondamenti di Informatica T-1 modulo 2 Laboratorio 10: preparazione alla prova d esame 1 Esercizio 1 - Gestione degli impegni Gli impegni giornalieri dei dipendenti di un azienda devono essere aggiornati

Dettagli

1.2d: La codifica Digitale dei caratteri

1.2d: La codifica Digitale dei caratteri 1.2d: La codifica Digitale dei caratteri 2 Bibliografia Curtin, 3.6 (vecchie edizioni) Curtin, 2.5 (nuova edizione) CR pag. 9-14 Questi lucidi 3 La codifica dei caratteri Un testo è rappresentato attraverso

Dettagli

Informatica Generale 1 - Esercitazioni Flowgraph, algebra di Boole e calcolo binario

Informatica Generale 1 - Esercitazioni Flowgraph, algebra di Boole e calcolo binario Informatica Generale 1 - Esercitazioni Flowgraph, algebra di Boole e calcolo binario Daniele Pighin pighin@fbk.eu FBK Via Sommarive, 18 I-38050 Trento, Italy February 27, 2008 Outline 1 Algebra di Boole

Dettagli

Rappresentazione di numeri interi

Rappresentazione di numeri interi Corso di Calcolatori Elettronici I Esercizi Rappresentazione di numeri interi ing. Alessandro Cilardo Corso di Laurea in Ingegneria Biomedica Interi senza segno Qual è l intervallo di rappresentazione

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

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

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

1.2d: La codifica Digitale dei caratteri

1.2d: La codifica Digitale dei caratteri 1.2d: La codifica Digitale dei caratteri 2 12 ott 2011 Bibliografia Curtin, 3.6 (vecchie edizioni) Curtin, 2.5 (nuova edizione) CR pag. 9-14 Questi lucidi 3 12 ott 2011 La codifica dei caratteri Un testo

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

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: 1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente

Dettagli

Informatica. Mario Pavone - Dept. Mathematics & Computer Science - University of Catania. Trasferimento. Ambiente esterno.

Informatica. Mario Pavone - Dept. Mathematics & Computer Science - University of Catania. Trasferimento. Ambiente esterno. Trasferimento Ambiente esterno Controllo Informatica Mario Pavone - Dept. Mathematics & Computer Science - University of Catania mpavone@dmi.unict.it Cos è l Informatica La scienza della rappresentazione

Dettagli

Rappresentazione e Codifica dell Informazione

Rappresentazione e Codifica dell Informazione Rappresentazione e Codifica dell Informazione Capitolo 1 Chianese, Moscato, Picariello, Alla scoperta dei fondamenti dell informatica un viaggio nel mondo dei BIT, Liguori editore. Sistema di numerazione

Dettagli

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

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA

ESAME DI FONDAMENTI DI INFORMATICA I ESAME DI ELEMENTI DI INFORMATICA. 28 Gennaio 1999 PROVA SCRITTA 28 Gennaio 1999 PROVA SCRITTA Esercizio 1 Un elaboratore rappresenta numeri interi in complemento a due su 8 bit e numeri reali in utilizzando un byte per la mantissa normalizzata e un byte per l esponente

Dettagli

1.2f: Operazioni Binarie

1.2f: Operazioni Binarie 1.2f: Operazioni Binarie 2 18 ott 2011 Bibliografia Questi lucidi 3 18 ott 2011 Operazioni binarie Per effettuare operazioni è necessario conoscere la definizione del comportamento per ogni coppia di simboli

Dettagli

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell

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

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

Cosa è l Informatica?

Cosa è l Informatica? Cosa è l Informatica? Scienza degli elaboratori elettronici (Computer Science) Scienza dell informazione Scienza della rappresentazione, memorizzazione, elaborazione e trasmissione dell informazione Elaboratore

Dettagli

Informazione e sua rappresentazione: codifica

Informazione e sua rappresentazione: codifica Corso di Calcolatori Elettronici I Informazione e sua rappresentazione: codifica ing. Alessandro Cilardo Corso di Laurea in Ingegneria Biomedica Il concetto di informazione Qualunque informazione è definita

Dettagli

Rappresentazione dei Numeri

Rappresentazione dei Numeri Rappresentazione dei Numeri Rappresentazione dei Numeri Il sistema numerico binario è quello che meglio si adatta alle caratteristiche del calcolatore Il problema della rappresentazione consiste nel trovare

Dettagli

Informazione e sua rappresentazione: codifica

Informazione e sua rappresentazione: codifica Corso di Calcolatori Elettronici I A.A. 2011-2012 Informazione e sua rappresentazione: codifica Lezione 2 Prof. Antonio Pescapè Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso

Dettagli

Modulo 1: Le I.C.T. UD 1.2d: La codifica Digitale dei caratteri

Modulo 1: Le I.C.T. UD 1.2d: La codifica Digitale dei caratteri Modulo 1: Le I.C.T. : La codifica Digitale dei caratteri Prof. Alberto Postiglione Corso di Informatica Generale (AA 07-08) Corso di Laurea in Scienze della Comunicazione Università degli Studi di Salerno

Dettagli

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna: Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione

Dettagli

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente

Dettagli

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Descrizione delle operazioni di calcolo. Espressioni costanti semplici Descrizione delle operazioni di calcolo Come abbiamo detto l interprete è in grado di generare nuovi valori a partire da valori precedentemente acquisiti o generati. Il linguaggio di programmazione permette

Dettagli

La Rappresentazione dell Informazione

La Rappresentazione dell Informazione La Rappresentazione dell Informazione Parte III I codici Codici a.a. 27-28 Un codice è una funzione che associa ad una sequenza di simboli un significato Codice : {entità} {sequenze di simboli} Un codice

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Tipi strutturati: Stringhe Anno Accademico 2010/2011 Francesco Tortorella Stringhe di caratteri La stringa è il tipo strutturato con cui vengono rappresentati gruppi di caratteri quali

Dettagli

FILE E INDICI Architettura DBMS

FILE E INDICI Architettura DBMS FILE E INDICI Architettura DBMS Giorgio Giacinto 2010 Database 2 Dati su dispositivi di memorizzazione esterni! Dischi! si può leggere qualunque pagina a costo medio fisso! Nastri! si possono leggere le

Dettagli

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD Macchine RAM API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD 2 Macchina RAM 3 Esercizio Si consideri il linguaggio definito da: L = wcw R w a, b } 1. Codificare un programma RAM per il riconoscimento

Dettagli

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: Tipi di dato Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi: esprimere in modo sintetico la loro rappresentazione in memoria, e un insieme di operazioni ammissibili permettere

Dettagli

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi Codifica dei Numeri Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi giacomo.boracchi@polimi.it Rappresentazione dei Numeri Codifica dei Numeri in Base 10 Le cifre che abbiamo a disposizione sono

Dettagli

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO Rappresentazione degli algoritmi Problema Algoritmo Algoritmo descritto con una qualche notazione Programma Defne del procedimento

Dettagli

Lab 02 Tipi semplici in C

Lab 02 Tipi semplici in C Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010 Lab 02 Tipi semplici in C Lab02 1 Obiettivo dell esercitazione Acquistare

Dettagli

Architetture degli Elaboratori I I Compito di Esonero (A) - 14/11/1996

Architetture degli Elaboratori I I Compito di Esonero (A) - 14/11/1996 1 Architetture degli Elaboratori I I Compito di Esonero (A) - 14/11/1996 Riportare le soluzioni su questi fogli utilizzando eventualmente il retro come brutta. Non è ammessa la consultazione di nessun

Dettagli

percorso 4 Estensione on line lezione 2 I fattori della produzione e le forme di mercato La produttività La produzione

percorso 4 Estensione on line lezione 2 I fattori della produzione e le forme di mercato La produttività La produzione Estensione on line percorso 4 I fattori della produzione e le forme di mercato lezione 2 a produzione a produttività Una volta reperiti i fattori produttivi necessari l imprenditore dovrà decidere come

Dettagli

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari Lezione 4 L artimetica binaria: I numeri relativi e frazionari Sommario I numeri relativi I numeri frazionari I numeri in virgola fissa I numeri in virgola mobile 1 Cosa sono inumeri relativi? I numeri

Dettagli

Aritmetica dei Calcolatori 3

Aritmetica dei Calcolatori 3 Laboratorio di Architettura 31 maggio 2013 1 Numeri Floating Point 2 Standard IEEE754 3 Esercitazione Numeri Floating Point (FP) Il termine Floating Point (virgola mobile) indica la codifica usata per

Dettagli

Sistemi di numerazione

Sistemi di numerazione Sistemi di numerazione Introduzione Un sistema di numerazione è un sistema utilizzato per esprimere i numeri e possibilmente alcune operazioni che si possono effettuare su di essi. Storicamente i sistemi

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

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

19/09/14. Il codice ASCII. Altri codici importanti. Extended ASCII. Tabella del codice ASCII a 7 bit. Prof. Daniele Gorla

19/09/14. Il codice ASCII. Altri codici importanti. Extended ASCII. Tabella del codice ASCII a 7 bit. Prof. Daniele Gorla Il codice ASCII ASCII è un acronimo per American Standard Code for Information Interchange Nato nell IBM nel 1961, diventa standard ISO (International Organization for Standardization) nel 1968. Codifica

Dettagli

Una classe Borsellino. Tipi numerici di base - Costanti. Esempio d uso. Classe Borsellino cont d. Primi passi per l implementazione di Purse

Una classe Borsellino. Tipi numerici di base - Costanti. Esempio d uso. Classe Borsellino cont d. Primi passi per l implementazione di Purse Una classe Borsellino Tipi numerici di base - Interi e decimali Definizione di costanti /** Realizza un borsellino per le monete. Registra il numero di monete e calcola il valore totale public class Purse

Dettagli

Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative.

Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative. Insiemi Specifiche, rappresentazione e confronto tra realizzazioni alternative. Algoritmi e Strutture Dati + Lab A.A. 14/15 Informatica Università degli Studi di Bari Aldo Moro Nicola Di Mauro Definizione

Dettagli

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout

Dettagli

Informatica 1. Prova di recupero 21 Settembre 2001

Informatica 1. Prova di recupero 21 Settembre 2001 Informatica 1 Prova di recupero 21 Settembre 2001 Si risolvano i seguenti esercizi. Ai fini della determinazione del voto finale il loro punteggio andrà sommato al punteggio del laboratorio. Il tempo complessivo

Dettagli

Argomenti trattati. Informazione Codifica Tipo di un dato Rappresentazione dei numeri Rappresentazione dei caratteri e di altre informazioni

Argomenti trattati. Informazione Codifica Tipo di un dato Rappresentazione dei numeri Rappresentazione dei caratteri e di altre informazioni Argomenti trattati Informazione Codifica Tipo di un dato Rappresentazione dei numeri Rappresentazione dei caratteri e di altre informazioni Informazione mi dai il numero di Andrea? 0817651831 Il numero

Dettagli

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione

Dettagli

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012 Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 I numeri reali Sommario Conversione dei numeri reali da base 10 a base B Rappresentazione dei numeri reali Virgola fissa Virgola mobile (mantissa

Dettagli