TABELLA DEI SIMBOLI. Structure of a Compiler. Semantic Analyzer SYMBOL TABLE. Code Generator. Optimizer

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "TABELLA DEI SIMBOLI. Structure of a Compiler. Semantic Analyzer SYMBOL TABLE. Code Generator. Optimizer"

Transcript

1 TABELLA DEI SIMBOLI Structure of a Compiler Scanner Parser SYMBOL TABLE Semantic Analyzer Optimizer Code Generator 1

2 Ruolo della tabella dei simboli La tabella dei simboli è una delle più importanti strutture dati di un compilatore Creata dal front-end per contenere le informazioni sul programma oggetto IR si riferisce agli oggetti tramite puntatori alle voci corrispondenti nella tabella di simboli Questo è fatto fin quasi alla fine della compilazione Così la tabella dei simboli è utilizzata durante l intera trasformazione Il contenuto può essere modificato nel processo di ottimizzazione Scope Una (sintatticamente definita) all interno di un programma nella quale gli identificatori (I nomi) possono essere dichiarati.. E.g. funzioni, istruzioni blocco. Gli scope possono essere innestati in alcuni linguaggi 2

3 Alcune considerazioni.. Static scope in linguaggi strutturati a blocchi Lo scope di un identificatore include il blocco di definizione e i blocchi in esso contenuti che non contengono una ulteriore dichiarazione dell identificatore Nested declaration di funzioni Direttive per la promozione ad un scope globale Block Scoping of Variables { int x, y, z ; x y z /* some code */ { int y ;. x y z. /* some more code */ { int z ; x = y + z ; */ In generale: al punto p quale dichiarazione di x è valida? Come il compilatore tiene traccia di ciò? 3

4 Block Scoping of Variables Blocchi nested Se la variabile x è utilizzata nel blocco B e dichiarata in B allora la sua dichiarazione è utilizzata. Altrimento se x è dichiarata nel blocco C esterno a B ma non in nessun altro blocco all interno di C ed esterno a B viene utilizzata la dichiarazione di x in C Ogni differente variabile richiede una propria entry nella symbol table. Cioè avremo più entri per x etc. { /* this is block C */ int x, y, z ; x y z /* some code */ { /* this is block D */ int y ;. x y z. /* some code */ { /* this is block B */ int z ; x = y + z ; /* which ones are used??? */ Scope of Variable Declaration Static Scope Lo scope è determinato dalle relazioni di nesting del programma sorgente, e.g. C, JAVA, Pascal. Dynamic scope Lo scope è determinato dalle relazioni che scaturiscono dalle chiamante a run time. E.g. Lisp. 4

5 Lexical vs. Dynamic Scoping program whichone (input, output ) ; var r : real ; procedure show ; begin write ( r : 5:3 ) end ; procedure small ; var r : real ; begin r := ; show end ; begin r := 0.25 ; show ; small ; writeln ; end Questo programma chiama show ; small? Lexical vs. Dynamic Scoping program whichone (input, output ) ; var r : real ; procedure show ; begin write ( r : 5:3 ) end ; procedure small ; var r : real ; begin r := ; show end ; begin r := 0.25 ; show ; small ; writeln ; end output?? Con static scoping, è Con dynamic scoping, è

6 Lifetime of Variable Lifetime is the time during execution of a program when a given variable first becomes visible to when it is last visible. Also called extent. The lifetime of a global variable covers the entire execution (unless it is temporarily superseded in some places). The lifetime of a local or automatic variable is usually an activation of the program unit within which it is declared. Some languages permit variables to be local to blocks also. Lifetime and Scope Examples In C, scope of automatic variable is procedure or block where it is declared to end of program unit In PL/1 scope encompasses entire relevant program unit In Pascal, a variable in outermost scope is visible everywhere in program except where another variable with same name is declared (and in the routines it contains) Fortran has common blocks, static memory that is visible in all routines where it is declared. Scope encompasses all those routines. Local static variables in C and SAVEd variables in Fortran have global lifetime but are only visible in certain regions, so scope may be a file or a procedure Dynamic variables have a lifetime that extends from their point of allocation to the point(s) of their destruction. 6

7 Interfaccia della tabella dei simboli openscope() closescope() entersymbol(nome, tipo) retrievesymbol(nome) declaredlocally(nome) void builtsymboltable () {processnode(astroot)} void processnode(node) { switch (kind(node) { case block: {symtab.openscope(); break;} case def: {symtab.entersymbol(node.name, node.type); break;} case ref: {symb = symtab.retrivesymbol(node.name) if (symb == null) errore; break:} } foreach (c : node.getcildren() ) processnode(c) If (kind(node) == block) symtab.cosescope(); } 7

8 Contenuto della tabella dei simboli La tabella dei simboli memorizza informazioni su: Identificatori Etichette Valori numerici (costanti) Stringhe di caratteri Variabili generate temporaneamente dal compilatore Le tabelle di simboli possono essere possono separate (una per ogni scope o una singola Linguaggi struttuturati a blocchi e scope Regole comuni I nomi accessibili ad un certo punto di un programma sono quelli definiti nel current scope e tutti quelli definiti negli open scope Se un nome è dichiarato in più di un scope è valido quello nello scope più interno (innermost scope) Le nuove dichiarazioni possono essere fatte solo nel current scope. Regole singolari È possibile accedere a defiizioni in outrmost global scope (extern in C, public static field in Java) 8

9 Una o più tabelle dei sinboli Una tabella per ogni scope Gli scope sono aperti e chiusi con una strategia LIFO Svantaggi: può essere necessario ricercare in più tabelle un nome Un unica tabella Insieme al nome viene inserito nella tabella il nome dello scope o il livello di profondità dello scope Può essere utilizzato uno stack per ogni nome comune, la ricerca di un nome si limita alla ricerca nel top della specifica pila Tecniche delle implementazioni Lista semplice non ordinara: compatta ma lenta in pratica O(n) complessita delle ricerca O (1) complessita dell inserimento Lista semplice ordinata: semplice, buona se le tabelle sono note in anticipo O(log n) complessita delle ricerca binaria O(n) complessita dell inserimento Binary search tree: approccio meno semplice O(log n) complessita media delle ricerca O(n) worst case Ol(og n) complessita dell inserimento Albero binario bilanciato Con un albero bilanciato otteniamo i tempi previsti Su un ingresso arbitrario l'albero non è necessariamente bilanciato Che cosa succede se le variabili sono in ordine alfabetico Utilizzare un algoritmo di bilanciamento approssimativa Complica l'attuazione Spazio overhead è direttamente proporzionale al numero di elementi nella tabella O 9

10 Implementazione della tabella dei simboli Implementazioni semplici basare su array sono troppo semplici nei casi reali L approccio più comune usa un hashing aperto (open hashing) La funzione Hash è basata su identificativo Un numero di funzioni sono conosciute Gli entry della tabella dei simboli usualmente puntano ad altre strutture per salvare stringhe di caratteri (nome della variabile, const char ) Consente la stessa dimensione per ogni entry Hash table O(1) complessita media delle ricerca O(1) complessita media dell inserimento Caso peggiore molto improbabile Tale approccio è adottato nella maggior parte dei compilatori O(n + m) spazio dove n è il numero di simboli e m è il numero di voci della tabella di hash 10

11 TABELLE HASH Le tabelle hash sono strutture di dati che consentono la ricerca, l inserzione e in certi casi la cancellazione di n chiavi in tempomedio costante, e tempo pessimo Θ(n). Poiché tutte le chiavi sono sequenze binarie, esse possono essere interpretate come numer interi. Dimensionare la tabella in base al numero di elementi attesi ed utilizzare una speciale funzione (funzione hash) per indicizzare la tabella Una funzione hash h ha come dominio l insieme C di tutte le possibili chiavi, e come codominio l insieme {0,..., m-1} per un dato intero m. Essa trasforma quindi ogni possibile chiave K di C in un indirizzo hash h(k) tra 0 e m-1, inteso come posizione per K in un array A[0..m-1]. Idealmente la chiave K sarà memorizzata in A[h(K)]. Una funzione hash è quindi una funzione che data una chiave k C restituisce la posizione della tabella in cui l elemento con chiave k viene memorizzato h : C [0, 1,...m 1] N.B: la dimensione m della tabella può non coincidere con la C, anzi in generale m < C 11

12 L idea èquella di definire una funzione d accesso che permettadi ottenere la posizione di un elemento in data la sua chiave Con l hashing, un elemento con chiave k viene memorizzato nella cella h(k) Pro riduciamo lo spazio necessario per memorizzare la tabella Contro: perdiamo la corrispondenza tra chiavi e posizioni in tabella le tabelle hash possono soffrire del fenomeno delle collisioni Le chiavi possibili sono in genere moltissime e non note a priori (per esempio i codici di login in un sistema, o le variabili che un utente inserirà in un programma, o i cognomi dei clienti di una ditta), quindi si ha C >> m. Dunque è estremamente complesso definitre una funzione hash che grarantisca una corrispondenza biunivoca fra chiave e indirizzo hash. Cioè e difficile avere la garanzia che K1 K2 h(k1) h(k2) Nasce quindi un problema di collisioni: (K1 K2 si può avere h(k1) = h(k2)) per solo una delle chiavi (tipicamente la prima che si è presentata, diciamo K1) potrà essere allocata in A[h(K1)], e le altre saranno poste altrove. 12

13 Collisioni Due chiavi k1 e k2 collidono quando corrispondono alla stessa posizione della tabella, ossia quando h(k1) = h(k2) Soluzione ideale: eliminare del tutto le collisioni scegliendoun opportuna (= perfetta) funzione hash. Una funzione hash si dice perfetta se è iniettiva, cioè se per ogni k1, k2 C K1 K2 h(k1) h(k2) Deve essere U <=m Se U > m, evitare del tutto le collisioni èimpossibile (Ad es.supponente di dover inserire un nuovo elemento in una tabella piena) Problemi da affrontare Dobbiamo quindi affrontare tre problemi: 1. scegliere la dimensione m; 2. Scegliere la funzione h; 3. Risolvere le collisioni. 13

14 Scelta di m e definizione del fattore di carico In ogni istante si indica con n il numero di chiave presenti nella tabella: dunque n varia durante l applicazione mentre la dimensione m del vettore A è fissata all inizio. Si definisce il fattore di carico α = n/m e si sceglie m in modo che presumibilmente α non superi 0.9: se ciò dovesse accadere si raddoppia la dimensione di A e si riallocano tutte le chiavi nel nuovo vettore. In genere m si sceglie come potenza di due o come numero primo Funzione hash Tra tanti metodi ne indichiamo due, usati rispettivamente per m potenza di 2 o per m primo. In entrambi i casi, se si ammette che tutte le sequenze di bit delle chiavi siano equiprobabili, per ogni chiave K l indirizzo hash h(k) ha valore tra 0 e m-1 con pari probabilità 1/m. In questo caso la funzione hash si dice semplicemente uniforme. 1. Poniamo che sia m=2 s, quindi le posizioni di A sono ndirizzate con s bit. La sequenza binaria che rappresenta la chiave K è divisa in parti di s bit ciascuna, e tra esse sicalcola lo XOR bit a bit per ottenere una sequenza di s bit che rappresenta h(k). Si noti che tutti i bit della chiave contribuiscono a formare h(k). 2. Poniamo che m sia un numero primo. Per ogni chiave K si pone h(k)=k mod m (cioè h(k) è il resto della divisione tra K e m). 14

15 Funzione hash Una buona funzione hash deve: 1. essere facile da calcolare (costo costante) 2. soddisfare il requisito di uniformità semplice: ogni chiave deve avere la stessa probabilità di vedersi assegnata una qualsiasi posizione ammissibile, indipendentemente da altri valori hash già assegnati Sia P(k) la probabilità che sia estratta una chiave k tale che h(k) = j, allora k:h(k)=j P(k) = (1/m) per j = 0,...,m 1 Una buona funzione hash Il requisito di uniformità semplice è difficile da verificare perchè raramente è nota la funzione di distribuzione di probabilità con cui vengono estratte le chiave (la funzione Pr) Nella pratica però è possibile usare delle euristiche per realizzare delle funzioni hash con buone prestazioni: Metodo della divisione Metodo della moltiplicazione 15

16 Metodo della divisione Consiste nell associare alla chiave k il valore hash h(k) = k mod m Semplice e veloce, ma occorre evitare certi valori di m; m non dovrebbe essere una potenza di 2 Se m = 2p, h(k) rappresenta solo i p bit meno significativi di k. Questo limita la casualità di h, in quanto è funzione di una porzione (di dimensione logaritmica) della chiave Bisogna rendere la funzione h dipendente da tutti i bit della chiave; una buona scelta per m è un numero primo non troppo vicino ad una potenza di due Metodo della moltiplicazione Consiste nell associare alla chiave k il valore hash h(k) = m (ka ka) ka ka è la parte frazionaria di ka Ha il vantaggio che il valore di m non è critico; di solito si sceglie m = 2p Per quanto riguarda il valore di A, in letteratura viene suggerito un valore prossimo a (5 1)/2 16

17 Risoluzione delle collisioni Una possibile alternativa: utilizzare una buona funzione hash (per minimizzare le collisioni) e prevedere nel contempo deimetodi di risoluzione delle collisioni Metodi classici di risoluzione delle collisioni: Liste di collisione: gli elementi collidenti sono contenuti in liste esterne alla tabella; T[i ] punta alla lista di elementitali che h(k) = i Indirizzamento aperto: tutti gli elementi sono contenuti nella tabella; se una cella èoccupata, se ne cerca un altra libera Risoluzione delle collisioni per concatenazione (chaining) Gli elementi collidenti vengono inseriti nella stessa posizione della tabella in una lista concatenata 17

18 Costo della ricerca: analisi nel caso peggiore Data una tabella A con m posizioni ed n elementi, quanto tempo richiede la ricerca di un elemento data la sua chiave? Caso peggiore: tutte le chiavi vengono inserite nella stessa posizione della tabella creando un unica lista di collisione di lunghezza n In questo caso il tempo di ricerca è(n) (ossia il costo della ricerca nella lista di collisione) + il tempo di calcolo di h Costo della ricerca: analisi del caso medio Si definisce fattore di carico il rapporto tra il numero n degli elementi memorizzati e la dimensione m della tabella = n/m Nell ipotesi di uniformità semplice della funzione hash è il numero medio di elementi memorizzati in ogni lista concatenata < 1 molte posizioni disponibili rispetto agli elementi memorizzati = 1 numero di elementi memorizzati èuguale alla dimensione della tabella > 1 situazione attesa: molti elementi memorizzati rispetto alla dimensione della tabella 18

19 Analisi nel caso medio Il comportamento nel caso medio dipende da come la funzione hash distribuisce le chiavi sulle m posizioni della tabella Ipotesi: uniformità semplice della funzione di hash h(k) è calcolata in O(1) così che il costo della ricerca di un elemento con chiave k dipenda esclusivamente dalla lunghezza della lista A[h(k)] Indirizzamento Aperto La rappresentazione non fa uso di puntatori Le collisioni vengono gestite memorizzando elementi collidenti in altre posizione della tabella Invece di seguire le liste di collisione, calcoliamo la sequenza di posizioni da esaminare Il fattore di carico non può mai superare 1 Si usa meno memoria rispetto allar appresentazione con liste di collisione perchè non ci sono puntatori 19

20 Indirizzamento Aperto Prevede che si usi solo lo spazio della tabella, senza uso di zone di trabocco, allocando gli elementi che determinano collisioni in posizioni diverse da quella che loro competerebbe Supponiamo di voler inserire un elemento con chiave k e la sua posizione naturale h(k) sia già occupata Cerchiamo la cella vuota (se c è) scandendo le celle secondo una sequenza di indici; ad esempio: c(k, 0) c(k, 1)... c(k,m) c(k, 0) = h(k) c(k, 1) = h(k) c(k,m) = h(k) + m Indirizzamento Aperto Per inserire una nuova chiave si esamina una successione di posizioni della tabella, si esegue una scansione, finchè non si trova una posizione vuota in cui inserire la chiave La sequenza di posizioni esaminate dipende dalla chiave che deve essere inserita Estendiamo la funzione hash in modo che possa tener conto anche del numero di posizioni già esaminate h : C {0, 1,...,m 1} {0, 1,...,m 1} 20

21 Operazione di Inserimento Hash-Insert(T, k) { i = 0 do { j = h(k, i ) if (A[j] = null A[j] = deleted} {A[j] = k; return j} else i = i + 1 }while (i!= m) error overflow sulla tabella hash Operazione di Ricerca Hash-Search(T, k){ i = 0 do { j = h(k, i ) if (A[j ] = k) return j I = i + 1 } while (A[j ]!= null && i!= m) return null 21

22 Tecniche di scansione: Scansione Lineare Sia h : C {0, 1,...,m 1} una funzione hash ordinaria Il metodo di scansione lineare usa la funzione hash (estesa) definita come h(k, i ) =( h (k) + i)mod m h(k, 0) = h (k) mod m h(k, 1) = (h (k) + 1) mod m, h(k, 2) = (h (k) + 2) mod m La scansione lineare presenta un fenomeno conosciuto come agglomerazione primaria Le posizioni occupate della tabella si accumulano per lunghi tratti, aumentando cos`ı il tempo medio di ricerca Tecniche di scansione: Scansione Lineare Inoltre... La prima posizione esaminata determina l intera sequenza di scansione; quindi abbiamo solo m sequenze di scansione distinte Il numero ottimo è m! ed è dato dall ipotesi di unformità della funzione hash: ognuna delle m! permutazioni di (h,...,m 1) è equiprobabile Siamo molto lontani dal numero ottimo 22

23 Tecniche di scansione: Scansione Quadratica Sia h : C U {0, 1,...,m 1} una funzione hash ordinaria Il metodo di scansione quadratica usa la funzione hash (estesa) definita come h(k, i ) = (h (k) + c1*i + c2*i 2 )mod m dove, c1 e c2 sono delle costanti ausiliarie (con c2!= 0) Un esempio: h(k, i ) = ( (h (k) + c1*i + c2*i 2 )mod m dove, c1 = c2 = 1 h(k, 0) = h (k), h(k, 1) = h (k) = h0(k) + 2, h(k, 2) = h (k) = h0(k) + 6, h(k, 3) = h (k) = h0(k) + 12, h(k, 4) = h (k) = h0(k) + 20 Cosa succede se m = 20? Viene scandita solo una porzione (in realtà 1/4) della tabella Elimina il problema dell agglomerazione primaria, ma viene usata l intera tabella; solo per alcune combinazioni di c1, c2 ed m; se m = 2 p una buona scelta è c1 = c2 = 1/2, perchè ivalori h(k, i) per i [0,m 1] sono tutti distinti 2. h(k1, 0) = h(k2, 0) implica h(k1, i) = h(k2, i) questo porta ad una forma di addensamento (più lieve rispetto a quella primaria) detta agglomerazione secondaria di nuovo, la prima posizione determina l intera sequenza di scansione ed abbiamo solo m sequenze di scansione distinte 23

24 Hashing Doppio L hashing doppio usa una funzione hash (estesa) della forma h(k, i ) = (h 1 (k) + ih 2 (k))mod m dove h 1, h 2 sono delle funzioni hash (ordinarie) ausiliarie La prima posizione esaminata è A[h 1 (k)] mod m; ogni posizione esaminata successivamente è distanziata dalla precedente di una quantità h 2 (k) mod m La sequenza di scansione dipende da k in due modi: a seconda della chiave, possono variare sia la posizione iniziale che il passo L hashing doppio non soffre di fenomeni di agglomerazione perché il passo è casuale inoltre... Ogni possibile coppia (h 1 (k), h 2 (k)) produce una sequenza discansione distinta: abbiamo O(m 2 ) sequenze di scansione distinte ed in questo senso è migliore sia della scansione lineare che quadratica Hashing Doppio Il valore di h 2 (k) deve essere primo con la dimensione m della tabella per ogni chiave da cercare Infatti se MCD(h 2 (k),m) = d > 1 per qualche k, allora la ricerca di tale chiave andrebbe ad esaminare solo una porzione (1/d) della tabella Se m è una potenza di 2, basta definire h 2 in maniera tale che restituisca sempre un numero dispari Altro modo è scegliere m primo e porre h 1 (k) = k mod m, h 2 (k) = 1 + (k mod m0) dove m0 è appena più piccolo di m (ad esempio m0 = m 1 oppure m0 = m 2) 24

25 Two level hash table Spazio dei nomi Il nome di un simbolo non muta durante la compilazione Benchè un scope può essere aperto o chiuso il simbolo deve persistere in memoria I nomi possono essere di dimenzioni svariate (da 1 a molti caratteri) Una lista ordinata dei nomi può essere mantenuta Ciò fa preferire uno spazio dei nomi logico P R O V A S 1 S 2 X 25

26 Implementazione della tabella dei simboli Per ogni nome sono memorizzati Nome: un riferimento allo spazio dei nomi logico Tipo: informazioni associate con il simbolo Hash: collegamento doppio con i simboli che forniscono lo stesso hash code Var: riferimento alle altre dichiarazioni dello stesso nome Level: collegamento a simboli dello stesso livello Depth: memorizza la profondita del nesting di un simbolo Void openscope() { depth = depth +1; scopedisplay(depth) = null } Void closescope() { foreach (symb in scopedisplay(depth)) do { prevsym = symb.var delete(symb) if (prevsym!= null) add(prevsym) } depth = depth +1; } Symnol retrievesymbol(name) { sym = hashtable.get(name) while (sym!= null) { if (sym.name == name) return sym sym = sym.hash } return null } 26

27 Void entersymbol () { oldsym = retrivesymbol(name) if (oldsym!= null) && oldsym.depth == depth) errore ( duplicate symbol) newsym = createnewsymbol(name,tyoe) newsym.level = scopedisplay(depth) newsym.depth = depth scopedisplay(depth) = newsym if (oldsym == null) add(newsym) else { delete(oldsym) add(newsym) } newsym.var = oldsym } Esempio fare copia HASHTABLE f function(float, float) v L h f Void function v L h z float v L h x float v L h x int v L h 27

28 Ancora. Strutturre e record: nomi dei campi Overloanding di funzioni e operatori Dichiarazioni implicite Contenuto della tabella dei simboli Ci sono una varietà di generi tipici di identificatori Le variabili scalari, array e strutture (record), le procedure e le funzioni, Alcuni tipi di informazioni memorizzate per identificatori l nome o il valore Il tipo di dati Le Dimensioni e iinformazioni di dimensionalità (per gli array) scoping Tipi di risultati, i parametri (parametri formali), i prototipi Le informazioni salvate dipendono dal genere di oggetto, per tale motivo si ha la necessita che le entri della tabella dei simboli abbiano un formato flessibile 28

29 Tipo di dato nella tabella dei simboli Ad esempio l entry per un array definito come nel seguito richiede una descrizione che include il tipo degli elementi Array A [ ] of mytype ; Mytype is a record username: char string ; address: char string ; acctdetails: array ( 1: 5) of integer usage: pointer to array ( 1:12) of reals Descrittori delle strutture Il descrittore type deve essere un puntatore ad un TypeDescriptor Il TypeDescriptor è una struttura dati che consente di modellare i diversi tipi presenti nei linguaggi Esempi di descrittori per alcuni tipi di dato 29

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1 Dizionario Insieme dinamico che offre solo le seguenti operazioni: inserimento di un elemento dato cancellazione di un elemento dato ricerca di un elemento dato (verifica dell appartenenza di un elemento

Dettagli

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet  francesc Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Tabelle hash Una tabella hash (in inglese hash

Dettagli

ROLE OF SYMBOL TABLE STRUCTURE OF A COMPILER

ROLE OF SYMBOL TABLE STRUCTURE OF A COMPILER SYMBOL TABLE SYMBOL TABLES The job of the symbol table is to store all the names of the program and information about each name In block structured languages, roughly speaking, the symbol table collects

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

Hash Tables. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Hash Tables. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione Hash Tables Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/2010 I. Castelli Hash Tables, A.A. 2009/2010 1/42 Hash Tables Indirizzamento

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

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Massimo Benerecetti Tabelle Hash: gestione delle collisioni Massimo Benerecetti Tabelle Hash: gestione delle collisioni # Lezione n. Parole chiave: Corso di Laurea: Informatica Insegnamento: Algoritmi e Strutture Dati I Email Docente: bene@na.infn.it A.A. 2009-2010

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

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

Fasi di un Compilatore

Fasi di un Compilatore Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore

Dettagli

Università degli Studi G.d Annunzio Chieti Pescara Corso di Laurea in Economia Informatica

Università degli Studi G.d Annunzio Chieti Pescara Corso di Laurea in Economia Informatica Dott. Massimo Franceschet Prof.ssa Maria Chiara Meo Introduzione alle tabelle hash di Enrico Zimuel (enrico@zimuel.it) revisione del 22/3/2003 Sommario L idea delle tabelle hash Tabelle ad indirizzamento

Dettagli

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016

Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Tong Liu April 7, 2016 Liste trabocco (Separate Chaining) Esercizio 1 [Libro 7.5] Un dizionario è realizzato con liste di trabocco.

Dettagli

05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino

05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino Tabelle di Hash Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino ADT Dizionario In molte applicazioni è necessario un ADT Dizionario che supporti le seguenti operazioni:

Dettagli

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35 LIBRERIA WEB Alberi binari 3. Alberi binari e tecniche di hashing per la gestione delle chiavi Gli indici di un file possono essere trattati in modo efficiente con tecniche che si basano sull uso di alberi

Dettagli

Strutture di accesso ai dati: B + -tree

Strutture di accesso ai dati: B + -tree Strutture di accesso ai dati: B + -tree A L B E R T O B E L U S S I S E C O N D A P A R T E A N N O A C C A D E M I C O 2 0 0 9-2 0 0 Osservazione Quando l indice aumenta di dimensioni, non può risiedere

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

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

Allocazione Dinamica della Memoria

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

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

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

Tabelle hash. Damiano Macedonio Università Ca' Foscari di Venezia. mace@unive.it

Tabelle hash. Damiano Macedonio Università Ca' Foscari di Venezia. mace@unive.it Tabelle hash Damiano Macedonio Università Ca' Foscari di Venezia mace@unive.it Original work Copyright Alberto Montresor, University of Trento (http://www.dit.unitn.it/~montreso/asd/index.shtml) Modifications

Dettagli

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.

PASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth. PASCAL standard Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth. Nb: primi linguaggi furono: Fortran, Algol, Ada, Cobol (cfr testo)

Dettagli

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.

Analizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,

Dettagli

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto

Dettagli

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica Array in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: array DIS - Dipartimento di informatica e sistemistica 1 / 25 Cosa vedremo

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

Esempio: rappresentare gli insiemi

Esempio: rappresentare gli insiemi Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci

Dettagli

Definizione di metodi in Java

Definizione di metodi in Java Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un

Dettagli

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti

Lezione 6. Visibilità degli identificatori e tempo di vita degli oggetti Lezione 6 Visibilità degli identificatori e tempo di vita degli oggetti Programmazione I Paolo Valente - 2009/2010 Ripasso dichiarazioni oggetti Finora abbiamo scritto le dichiarazioni di variabili e costanti

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

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?

Dettagli

Macchine astratte, linguaggi, interpretazione, compilazione

Macchine astratte, linguaggi, interpretazione, compilazione Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta

Dettagli

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Il linguaggio C. Notate che...

Il linguaggio C. Notate che... Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione

Dettagli

Architettura degli elaboratori Docente:

Architettura degli elaboratori Docente: Politecnico di Milano Il File System Architettura degli elaboratori Docente: Ouejdane Mejri mejri@elet.polimi.it Sommario File Attributi Operazioni Struttura Organizzazione Directory Protezione Il File

Dettagli

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte) ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente

Dettagli

Tempo di vita e scope delle variabili

Tempo di vita e scope delle variabili Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):

Dettagli

Analizzatori Lessicali con JLex. Giuseppe Morelli

Analizzatori Lessicali con JLex. Giuseppe Morelli Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica

Dettagli

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali

Esiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte

Dettagli

Tipo di dato Dizionario

Tipo di dato Dizionario Tabelle Hash lezione 8 Tipo di dato Dizionario Il tipo di dato Dizionario permette di gestire collezioni di elementi a cui sono associate chiavi prese da un dominio totalmente ordinato. I dati ammessi

Dettagli

UD 3.2b: Programmazione in Pascal (1)

UD 3.2b: Programmazione in Pascal (1) UD 3.2b: Programmazione in Pascal (1) Il Linguaggio di Programmazione Pascal Esistono molti linguaggi di programmazione. Per motivi didattici utilizzeremo una versione ridotta di un linguaggio di programmazione

Dettagli

Caratteristiche di un linguaggio ad alto livello

Caratteristiche di un linguaggio ad alto livello Caratteristiche di un linguaggio ad alto livello Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono

Dettagli

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C... Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...

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

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

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

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

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

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori

Puntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per

Dettagli

Ordinamenti per confronto: albero di decisione

Ordinamenti per confronto: albero di decisione Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto

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

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] I Dizionari I dizionari sono un caso particolare di insieme in cui sono possibili le seguenti operazioni: verificare l appartenenza

Dettagli

Gestione di files Motivazioni

Gestione di files Motivazioni Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)

Dettagli

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22 Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)

Dettagli

Lezione 8. Visibilità degli identifcatori e tempo di vita degli oggetti

Lezione 8. Visibilità degli identifcatori e tempo di vita degli oggetti Lezione 8 Visibilità degli identifcatori e tempo di vita degli oggetti Programmazione I Paolo Valente - 2014/2015 Ripasso dichiarazioni oggetti Finora abbiamo scritto le dichiarazioni di variabili e costanti

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

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

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

Dettagli

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina

Dettagli

Esercizi di Algoritmi e Strutture Dati

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

Dettagli

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

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

Come ragiona il computer. Problemi e algoritmi

Come ragiona il computer. Problemi e algoritmi Come ragiona il computer Problemi e algoritmi Il problema Abbiamo un problema quando ci poniamo un obiettivo da raggiungere e per raggiungerlo dobbiamo mettere a punto una strategia Per risolvere il problema

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

Analisi ammortizzata (Tarjan in 1985)

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

Dettagli

CORSO ACCESS PARTE IV

CORSO ACCESS PARTE IV Creazione di un database / gestione tabelle Per creare un nuovo database Menu File Selezionare Nuovo Scegliere Database vuoto nella scheda Generale e confermare con Ok Impostare il nome e il percorso nella

Dettagli

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

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

Dettagli

Informatica 3 secondo recupero 13 Settembre 2002

Informatica 3 secondo recupero 13 Settembre 2002 Informatica 3 secondo recupero 13 Settembre 2002 Nome (stampatello) Cognome (stampatello) Matr Recupero: Prima prova in itinere Seconda prova in itinere spazio per il docente Punteggi recupero prima prova

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

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale Giuseppe Loseto Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale Struttura DBMS Gestore delle interrogazioni Decide le strategie di accesso ai dati per rispondere alle interrogazioni Gestore

Dettagli

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

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

Dettagli

Gestione della memoria

Gestione della memoria Gestione della memoria centrale Gestione della memoria Concetti generali. Swapping. Allocazione contigua di memoria. Paginazione. Segmentazione. Segmentazione con paginazione. Esempio: Pentium Intel Background

Dettagli

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica

Specifica: la sintassi. Specifica: la semantica. Specifica: la semantica Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti

Dettagli

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

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

Dettagli

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore

I puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p

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

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

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

Dettagli

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

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1

Parte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1 Parte 2 Ricorsione - AA. 2012/13 [M.C.Escher Drawing hands, 1948] 2.1 Funzioni ricorsive Una funzione si dice ricorsiva se richiama se stessa, direttamente o indirettamente La ricorsione si dice diretta

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio

Dettagli

Algoritmi e strutture dati

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

Dettagli

Cercare il percorso minimo Ant Colony Optimization

Cercare il percorso minimo Ant Colony Optimization Cercare il percorso minimo Ant Colony Optimization Author: Luca Albergante 1 Dipartimento di Matematica, Università degli Studi di Milano 4 Aprile 2011 L. Albergante (Univ. of Milan) PSO 4 Aprile 2011

Dettagli

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE

SOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE SOMMARIO IL PROBLEMA DELLA RICERCA Algoritmi di ricerca: Ricerca lineare; Ricerca binaria (su elenchi già ordinati). Dato un array e un oggetto, stabilire se l oggetto è contenuto in un elemento dell array,

Dettagli

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste 4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1

Dettagli

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 18 - Vettori 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 Corso di

Dettagli

Metodi di una Collection

Metodi di una Collection Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare

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

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

Dettagli

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione DAGLI ALGORITMI AI LINGUAGGI Linguaggi di Programmazione E` una notazione con cui e` possibile descrivere gli algoritmi. Programma: e` la rappresentazione di un algoritmo in un particolare linguaggio di

Dettagli

Programmazione C Massimo Callisto De Donato

Programmazione C Massimo Callisto De Donato Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato. Il File System Il file system È quella parte del Sistema Operativo che fornisce i meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate in memoria di massa. Realizza i concetti

Dettagli

Costruzione del File Diretto

Costruzione del File Diretto Costruzione del File Diretto, Roma Sommario 1 Indicizzazione compressa dei documenti (file diretto). Term-partitioning indexing: File Invertito Map 1 In: Map 2 In: ... Map M In:

Dettagli

Allocazione dinamica della memoria

Allocazione dinamica della memoria Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare

Dettagli

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06

ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06 1 ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA # Objective Caml version 3.06 Il cancelletto è il prompt di Caml. # 3*8;; - : int = 24 LETTURA: viene

Dettagli

Grammatiche Parse trees Lezione del 17/10/2012

Grammatiche Parse trees Lezione del 17/10/2012 Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,

Dettagli

Corso di Fondamenti di Informatica. La ricorsione

Corso di Fondamenti di Informatica. La ricorsione Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini

Dettagli

File System ext2. Struttura del filesystem ext2.

File System ext2. Struttura del filesystem ext2. Struttura di base File System ext2 Lo spazio fisico di un disco viene usualmente diviso in partizioni; ogni partizione può contenere un filesystem. Nel filesystem ext2 il blocco (block) definisce la minima

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del

Dettagli

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011

Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali

Dettagli

Indirizzamento Aperto

Indirizzamento Aperto Indirizzamento Aperto Sommario Metodo di indirizzamento aperto Scansione lineare Scansione quadratica Hashing doppio Metodo di indirizzamento aperto L idea è di memorizzare tutti gli elementi nella tabella

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-La memoria 1 Prerequisiti Concetto di memoria Dati e istruzioni Bit e byte 2 1 Introduzione In questa Unità studiamo più in dettaglio la memoria del computer e le sue funzioni.

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C INFORMATICA 1 Lezione 3 (Introduzione al Linguaggio C, Introduzione ai Tipi di dato, Cenni alla codifica binaria) Introduzione al Linguaggio C 1 Passi fondamentali del C Definito nel 1972 (AT&T Bell Labs)

Dettagli