ROLE OF SYMBOL TABLE STRUCTURE OF A COMPILER

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "ROLE OF SYMBOL TABLE STRUCTURE OF A COMPILER"

Transcript

1 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 information from declarations and uses that information whenever a name is used later in the program this information could be part of the syntax tree, but is put into a table for efficient access to names If there are different occurrences of the same name, the symbol table assists in name resolution Either the parser or the lexical analyzer can do the job of inserting names into the symbol table (as long as scope information is given to the lexer) Information can be added throughout compilation 1

2 ROLE OF SYMBOL TABLE Essential data structure for compiler Used for storing information about identifiers appearing in a source program Lexical Analyzer and Parser fill up symbol table Code generator and optimizer make use of symbol table Entities stored in a symbol table Variables, procedures, functions, defined constants, labels, structures, file identifications, compiler generated temporaries STRUCTURE OF A COMPILER Scanner Parser SYMBOL TABLE Semantic Analyzer Optimizer Code Generator 2

3 INFORMATION IN SYMBOL TABLE Name: May be stored directly in the table or the entry may point to another character string, possibly in an associated string table Type: type of identifier Whether variable / function / procedure name For variables, identify whether integer / real / array Location: offset in the program where the identifier is defined Scope: identifies the region of the program in which the current symbol definition is valid Other attributes: Array limits, record fields / parameters / return values of functions USAGE OF SYMBOL TABLE INFORMATION Semantic Analysis: check correct semantic usage of language constructs May need checking types of identifiers Code generation: All program variables and temporaries need to be allocated some memory locations Symbol table provides information regarding memory size required for identifiers by their types Error Detection: Leave variables undefined Optimization: To reduce the total number of variables used in a program we need to reuse the temporaries generated by the compiler 3

4 SYMBOL TABLE Primary data structure inside a compiler. Stores information about the symbols in the input program including: Type (or class) Size (if not implied by type) Scope Scope represented explicitly or implicitly (based on table structure). Classes can also be represented by structure one difference = information about classes must persist after have left scope. Used in all phases of the compiler. 7 SYMBOL TABLE IMPLEMENTATION Variety of choices, including arrays, lists, trees, heaps, hash tables, Different structures may be used for local tables versus tables representing scope. 8 4

5 SYMBOL TABLE DESIGN Format of symbol table entries Linear Lists / arrays / trees. Access mechanism Linear search / hashing / binary search.. Location of storage Primary Memory (RAM) / Secondary Memory (large symbol table) Scope issues Simple symbol table with nested scope Scoped symbol table with nested scopes 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 5

6 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 6

7 SIMPLE SYMBOL TABLE: OPERATIONS Enter a new symbol into the table Lookup for a symbol Modify information about a symbol stored earlier SYMBOL TABLE OBJECT Symbol table functions are called during parsing: Insert(x) A new symbol is defined. Delete(x) The lifetime of a symbol ends. Lookup(x) A symbol is used. 14 7

8 SIMPLE SYMBOL TABLE FORMATS Linear Table Ordered List Tree Hash table LINEAR TABLE int x, y; float z;.. procedure abc.. L1:.. 8

9 LINEAR TABLE Name Type Location x y z Abc L1 int int float procedure label Offset of x Offset of y Offset of y Offset of abc Offset of L1 Insert, Lookup and modify operations take O (n) time, n being the number of identifiers Insertion can be made in O (1) be remembering the pointer to the next free position ORDERED LIST Variation of linear table List may be sorted and a binary search may be used for access in O (log n) Insertion needs to be done at proper place to preserve the sorted nature Self-organizing list: Dynamically re-arrange list based on recency of reference 9

10 TREE SYMBOL TABLE Each entry is used represented as a node in a tree Based on string comparison of names, entries lesser than a reference node are kept in the left subtree and entries greater than a reference node are kept in the right subtree Average lookup time is O (log n) AVL trees may be used TREE SYMBOL TABLE EXAMPLE x abc y L 1 z 10

11 HASH TABLE SYMBOL TABLE Used in cases where access time is to be minimized Most common method implementing Symbol Table in compilers Hash function used to map identifier names to hash table locations, organized as an array To store a symbol table into the table, hash function is applied which results in the unique location in the table Symbol along with associated information stored Accessed using the hash function [O (1) time] Problem of hash tables Imperfect hash function Collision Collision resolution (Chaining ) HASH FUNCTION PROPERTIES Should depend on name of symbol Easy and quick to compute Should be uniform in mapping names to different parts of the table Computed value must always be within table range 11

12 SCOPED SYMBOL TABLE Global Scope Global Variables File-wide scope Modules in more than one file (static variables / functions) Local scope within a procedure Function local variables Local scope within a block SCOPING RULES Static or lexical scoping Dynamic or runtime scoping Procedure P1 is callable from P2 and P3 P1 has reference to a non-local variable x There exist two different definitions of x, one each in P2 and P3 When P1 is called from P2, x will refer to the definition in P2, while when called from P3, it will refer to the definition in P3 12

13 NESTED LEXICAL SCOPING Procedure P1.. Procedure P2.. End Procedure Procedure P3. Procedure P4. x =. End Procedure End Procedure End Procedure SCOPE RESOLUTION RULE If a name is defined in more than one scope, the innermost definition closest to the reference is to be used to interpret the reference to that name When a scope is exited, all variables declared in that scope are deleted from the symbol table 13

14 SCOPE SYMBOL TABLE IMPLEMENTATION One table per scope One table for all scopes Operations on symbol tables Insert: Insert a new symbol in current scope Delete Modify Create: Create a new scope Lookup SYMBOL TABLE OBJECT Symbol table functions are called during parsing: Insert(x) A new symbol is defined. Delete(x) The lifetime of a symbol ends. Lookup(x) A symbol is used. EnterScope(s) A new scope is entered. ExitScope(s) A scope is left

15 IMPLEMENTING THE TABLE Need variable CS for current scope EnterScope creates a new record that is a child of the current scope. This scope has new empty local table. Set CS to this record. ExitScope set CS to parent of current scope. Update tables. Insert add a new entry to the local table of CS Lookup Search local table of CS. If not found, check the enclosing scope. Continue checking enclosing scopes until found or until run out of scopes. 29 EXAMPLE PROGRAM Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main sub2 Main sub1 c,d sub3 a,b,c, sub1 a,d, sub2, sub3 30 a 15

16 IMPLEMENTING THE TABLE We can use a stack instead!!! EnterScope creates a new record that is a child of the current scope. This scope has new empty local table. Set CS to this record PUSH ExitScope set CS to parent of current scope. Update tables POP Insert add a new entry to the local table of CS Lookup Search local table of CS. If not found, check the enclosing scope. Continue checking enclosing scopes until found or until run out of scopes. 31 EXAMPLE PROGRAM AS WE COMPILE Program main; Main a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main a,b,c 32 CS 540 Spring 2009 GMU 16

17 EXAMPLE PROGRAM Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main Main sub1 a,b,c, sub1 a,d CS 540 Spring 2009 GMU 33 EXAMPLE PROGRAM Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main Main sub1 sub2 c,d a,b,c, sub1 a,d sub2 34 CS 540 Spring 2009 GMU 17

18 EXAMPLE PROGRAM Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main Main sub1 sub3 a,b,c, sub1 a,d sub2, sub3 CS 540 Spring 2009 GMU a 35 EXAMPLE PROGRAM Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main Main sub1 a,b,c, sub1 a,d, sub2, sub3 CS 540 Spring 2009 GMU 36 18

19 EXAMPLE PROGRAM Program main; a,b,c: real; procedure sub1(a: real); d: int; procedure sub2(c: int); d: real; body of sub2 procedure sub3(a:int) body of sub3 body of sub1 body of main Main a,b,c, sub1 CS 540 Spring 2009 GMU 37 ALCUNE CONSIDERAZIONI.. Ambiente statico static scope) nei 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 Dichiarazione annidata di funzioni Direttive per la promozione ad un scope globale 19

20 SCOPE DELLE VARIABILI { 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ò? SCOPE DELLE VARIABILI: BLOCCHI ANNIDATI 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 { /* this is block C */ int x, y, z ; Ogni differente variabile richiede una propria entry nella symbol table. Cioè avremo più entri per x etc. 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??? */ 20

21 STATIC SCOPE VS. DYNAMIC SCOPE Static Scope (Lessicale) 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. 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? 21

22 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, è TEMPO DI VITA (LIFETIME) DI UNA VARIABILE Lifetime rappresenta il tempo durante l esecuzion del programma quando una data variabile è visibile Il lifetime di una variabile globale è l intera durata del programma. The lifetime di una variabile locale concide con l esecuzione dell unita di programma (o blocco) in cui è dichiarata. 22

23 ESEMPI DI LIFETIME E SCOPE In C, lo scope di una variabile locale è la funzione o il blocco in cui è dichiarata fino alla fine dell unità di programma. In PL/1 lo scope è tutta la relativa unità di programma In Pascal, una variabile in ambito più esterno è visibile ovunque in programma salvo quando viene ridichiarata un variabile con lo stesso nome Fortran ha common blocks e static memory che è visibile in tutti I sottoprogrammi. Scope encompasses all those routines. Variabili locali static in C hanno un lifetime globale ma sono visibili solo in certe regioni cioè lo scope può essere una funzione Variabili dinamiche: il loro lifetime va dal momento della loro creazione al momento della loro distruzione.. 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) 23

24 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 24

25 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. 25

26 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. 26

27 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). 27

28 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 28

29 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 29

30 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 30

31 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 31

32 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 32

33 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} 33

34 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 34

35 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 35

36 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 36

37 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) 37

38 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 38

39 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 } 39

40 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 40

41 ANCORA. Strutturre e record: nomi dei campi Overloanding di funzioni e operatori Dichiarazioni implicite 41

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing Informatica 3 LEZIONE 21: Ricerca su liste e tecniche di hashing Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing Informatica 3 Lezione 21 - Modulo 1 Algoritmi sequenziali e basati su

Dettagli

Allocazione dinamica della memoria - riepilogo

Allocazione dinamica della memoria - riepilogo Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica In breve Storage duration Allocazione dinamica della

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

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

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

TABELLA DEI SIMBOLI. Structure of a Compiler. Semantic Analyzer SYMBOL TABLE. Code Generator. Optimizer TABELLA DEI SIMBOLI Structure of a Compiler Scanner Parser SYMBOL TABLE Semantic Analyzer Optimizer Code Generator 1 Ruolo della tabella dei simboli La tabella dei simboli è una delle più importanti strutture

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Gestione della Memoria

Gestione della Memoria Gestione della Memoria Idealmente la memoria dovrebbe essere grande veloce non volatile Gerarchia di memorie Disco: capiente, lento, non volatile ed economico Memoria principale: volatile, mediamente grande,

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante Esercizio 0 Scambio lettere Scrivere la funzione void scambiolettere(char *dest, char *lettere, int p_o_d) che modifichi la stringa destinazione (dest), sostituendone i caratteri pari o dispari (a seconda

Dettagli

Altri metodi di indicizzazione

Altri metodi di indicizzazione Organizzazione a indici su più livelli Altri metodi di indicizzazione Al crescere della dimensione del file l organizzazione sequenziale a indice diventa inefficiente: in lettura a causa del crescere del

Dettagli

12. Implementazione di un File System. 12.1.1 Struttura a livelli. 12.2.1 Allocazione contigua

12. Implementazione di un File System. 12.1.1 Struttura a livelli. 12.2.1 Allocazione contigua 12. Implementazione di un File System 1 Struttura del file system Metodi di allocazione Gestione dello spazio libero Implementazione delle directory Prestazioni ed efficienza 2 Utente 12.1.1 Struttura

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1 IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Il tipo di dato astratto Pila

Il tipo di dato astratto Pila Il tipo di dato astratto Pila Il tipo di dato Pila Una pila è una sequenza di elementi (tutti dello stesso tipo) in cui l inserimento e l eliminazione di elementi avvengono secondo la regola seguente:

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,

Dettagli

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM Procedure memorizzate SQL-2003/PSM Procedure memorizzate nel database Programmazione general-purpose Leggere sezione 8.2 di Garcia-Molina et al. Lucidi derivati da quelli di Jeffrey D. Ullman 1 Una estensione

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio 1-La memoria dinamica La scrittura di un programma (indipendentemente dal linguaggio adottato) deve sempre tener conto

Dettagli

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati Informatica 3 Informatica 3 LEZIONE 10: Introduzione agli algoritmi e alle strutture dati Modulo 1: Perchè studiare algoritmi e strutture dati Modulo 2: Definizioni di base Lezione 10 - Modulo 1 Perchè

Dettagli

Progettazione Fisica FILE

Progettazione Fisica FILE Progettazione Fisica Organizzazione dei files Organizzazione indici FILE Insieme di record lunghezza fissa (R) lunghezza variabile Record Header BH RH record1 RH record2 RH record2 RH record3 Block Header

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Strutturazione logica dei dati: i file

Strutturazione logica dei dati: i file Strutturazione logica dei dati: i file Informazioni più complesse possono essere composte a partire da informazioni elementari Esempio di una banca: supponiamo di voler mantenere all'interno di un computer

Dettagli

PROGETTAZIONE FISICA

PROGETTAZIONE FISICA PROGETTAZIONE FISICA Memorizzazione su disco, organizzazione di file e tecniche hash 2 Introduzione La collezione di dati che costituisce una BDD deve essere fisicamente organizzata su qualche supporto

Dettagli

Analizzatore lessicale o scanner

Analizzatore lessicale o scanner Analizzatore lessicale o scanner Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner, attraverso un esame carattere per carattere dell'ingresso,

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

Complessità Computazionale

Complessità Computazionale Complessità Computazionale Analisi Algoritmi e pseudocodice Cosa significa analizzare un algoritmo Modello di calcolo Analisi del caso peggiore e del caso medio Esempio di algoritmo in pseudocodice INSERTION

Dettagli

B+Trees. Introduzione

B+Trees. Introduzione B+Trees Introduzione B+Trees Il B+Trees e la variante maggiormente utilizzata dei BTrees BTrees e B+trees fanno parte della famiglia degli alberi di ricerca. Nel B+Trees i dati sono memorizzati solo nelle

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

Dettagli

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

Dettagli

Programmazione dinamica

Programmazione dinamica Capitolo 6 Programmazione dinamica 6.4 Il problema della distanza di edit tra due stringhe x e y chiede di calcolare il minimo numero di operazioni su singoli caratteri (inserimento, cancellazione e sostituzione)

Dettagli

Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini

Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini Introduzione agli Algoritmi Genetici Prof. Beatrice Lazzerini Dipartimento di Ingegneria della Informazione Via Diotisalvi, 2 56122 PISA ALGORITMI GENETICI (GA) Sono usati per risolvere problemi di ricerca

Dettagli

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

Dettagli

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo 41 Sviluppo di programmi Per la costruzione di un programma

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

Sistemi Operativi. 5 Gestione della memoria

Sistemi Operativi. 5 Gestione della memoria Gestione della memoria Compiti del gestore della memoria: Tenere traccia di quali parti della memoria sono libere e quali occupate. Allocare memoria ai processi che ne hanno bisogno. Deallocare la memoria

Dettagli

Gestione della memoria centrale

Gestione della memoria centrale Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Il memory manager. Gestione della memoria centrale

Il memory manager. Gestione della memoria centrale Il memory manager Gestione della memoria centrale La memoria La memoria RAM è un vettore molto grande di WORD cioè celle elementari a 16bit, 32bit, 64bit (2Byte, 4Byte, 8Byte) o altre misure a seconda

Dettagli

Dispensa di database Access

Dispensa di database Access Dispensa di database Access Indice: Database come tabelle; fogli di lavoro e tabelle...2 Database con più tabelle; relazioni tra tabelle...2 Motore di database, complessità di un database; concetto di

Dettagli

Dispensa 3. 1.1 YACC: generalità

Dispensa 3. 1.1 YACC: generalità Dispensa 3 1.1 YACC: generalità Il tool Yacc (acronimo per Yet Another Compiler Compiler) è uno strumento software che a partire da una specifica grammaticale context free di un linguaggio scritta in un

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Tipi classici di memoria. Obiettivo. Principi di localita. Gerarchia di memoria. Fornire illimitata memoria veloce. Static RAM. Problemi: Dynamic RAM

Tipi classici di memoria. Obiettivo. Principi di localita. Gerarchia di memoria. Fornire illimitata memoria veloce. Static RAM. Problemi: Dynamic RAM Obiettivo Tipi classici di memoria Fornire illimitata memoria veloce Problemi: costo tecnologia Soluzioni: utilizzare diversi tipi di memoria... Static RAM access times are 2-25ns at cost of $100 to $250

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. ESERCIZIARIO Risposte ai quesiti: 10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. 10.2. Un numero intero in Java è compreso nell'intervallo ( 2 31 ) e (2 31

Dettagli

Basi di Dati Complementi Esercizi. Esercizi su strutture fisiche di accesso. Soluzione Esercizio 1. Esercizio 1. Soluzione Esercizio 2.

Basi di Dati Complementi Esercizi. Esercizi su strutture fisiche di accesso. Soluzione Esercizio 1. Esercizio 1. Soluzione Esercizio 2. Basi di Dati Complementi Esercizi Esercizi su strutture fisiche di accesso Esercizio Soluzione Esercizio Siano date le seguenti informaizni: B=4096 bytes la dimensione di un blocco = bytes la dimensione

Dettagli

puntatori Lab. Calc. AA 2007/08 1

puntatori Lab. Calc. AA 2007/08 1 puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene

Dettagli

Informatica. Rappresentazione dei numeri Numerazione binaria

Informatica. Rappresentazione dei numeri Numerazione binaria Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati Docente: Camillo Fiorentini 18 dicembre 2007 Esercizio 1: rappresentazione di una tabella di occorrenze L obiettivo è quello di rappresentare in modo efficiente

Dettagli

Introduzione al linguaggio C Gli array

Introduzione al linguaggio C Gli array Introduzione al linguaggio C Gli array Vettori nome del vettore (tutti gli elementi hanno lo stesso nome, c) Vettore (Array) Gruppo di posizioni (o locazioni di memoria) consecutive Hanno lo stesso nome

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di

Dettagli

Introduzione alla teoria dei database relazionali. Come progettare un database

Introduzione alla teoria dei database relazionali. Come progettare un database Introduzione alla teoria dei database relazionali Come progettare un database La struttura delle relazioni Dopo la prima fase di individuazione concettuale delle entità e degli attributi è necessario passare

Dettagli

Capitolo 11 -- Silberschatz

Capitolo 11 -- Silberschatz Implementazione del File System Capitolo 11 -- Silberschatz Implementazione del File System File system: Definizione dell aspetto del sistema agli occhi dell utente Algoritmi e strutture dati che permettono

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Organizzazione degli archivi

Organizzazione degli archivi COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i

Dettagli

Informatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees

Informatica 3. LEZIONE 23: Indicizzazione. Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees Informatica 3 LEZIONE 23: Indicizzazione Modulo 1: Indicizzazione lineare, ISAM e ad albero Modulo 2: 2-3 trees, B-trees e B + -trees Informatica 3 Lezione 23 - Modulo 1 Indicizzazione lineare, ISAM e

Dettagli

Note su quicksort per ASD 2010-11 (DRAFT)

Note su quicksort per ASD 2010-11 (DRAFT) Note su quicksort per ASD 010-11 (DRAFT) Nicola Rebagliati 7 dicembre 010 1 Quicksort L algoritmo di quicksort è uno degli algoritmi più veloci in pratica per il riordinamento basato su confronti. L idea

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Le operazioni di allocazione e deallocazione sono a carico del sistema. Allocazione della memoria In C++ è possibile creare (allocare) variabili in maniera statica o dinamica. Nell allocazione statica una variabile esiste ed è utilizzabile dal momento della sua dichiarazione

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma Stored Procedures Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma Progetto di Applicazioni Software Stored Procedure e User Defined

Dettagli

strutturare dati e codice

strutturare dati e codice Puntatori e passaggio parametri strutturare dati e codice Tipo di dati int * Pi ; Op. dereferenziazione j = *Pi ; Op. indirizzo Pi = &i ; By value int f(int i) ; a = f(b) ; By address int f(int * Pi) ;

Dettagli

Capitolo 13. Interrogare una base di dati

Capitolo 13. Interrogare una base di dati Capitolo 13 Interrogare una base di dati Il database fisico La ridondanza è una cosa molto, molto, molto brutta Non si devono mai replicare informazioni scrivendole in più posti diversi nel database Per

Dettagli

Problema del naming. Modello di Naming

Problema del naming. Modello di Naming Sistemi Distribuiti Problema del naming 1 Modello di Naming Conoscenza reciproca delle entità / servizi In una relazione cliente/servitore il cliente deve avere un riferimento al servitore Problema della

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

costruttori e distruttori

costruttori e distruttori costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,

Dettagli

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL Basi di dati Il Linguaggio SQL Data Definition Language (DDL) Data Definition Language: insieme di istruzioni utilizzate per modificare la struttura della base di dati Ne fanno parte le istruzioni di inserimento,

Dettagli

Alberi binari di ricerca

Alberi binari di ricerca Alberi binari di ricerca Definizione Visita dell albero inorder Ricerca Ricerca minimo, massimo e successore. Inserimento ed eliminazione di un nodo Problema del bilanciamento dell albero Albero binario

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Come modificare la propria Home Page e gli elementi correlati

Come modificare la propria Home Page e gli elementi correlati Come modificare la propria Home Page e gli elementi correlati Versione del documento: 3.0 Ultimo aggiornamento: 2006-09-15 Riferimento: webmaster (webmaster.economia@unimi.it) La modifica delle informazioni

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Codifiche a lunghezza variabile

Codifiche a lunghezza variabile Sistemi Multimediali Codifiche a lunghezza variabile Marco Gribaudo marcog@di.unito.it, gribaudo@elet.polimi.it Assegnazione del codice Come visto in precedenza, per poter memorizzare o trasmettere un

Dettagli

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti) (Esercizi Tratti da Temi d esame degli ordinamenti precedenti) Esercizio 1 L'agenzia viaggi GV - Grandi Viaggi vi commissiona l'implementazione della funzione AssegnaVolo. Tale funzione riceve due liste

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30' Prima di cominciare: si scarichi dal sito http://esamix.labx il file StartKit5.zip contenente i file necessari (solution di VS2008 e progetto compresi). Avvertenze per la consegna: apporre all inizio di

Dettagli

Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE. D. Talia - UNICAL. Sistemi Operativi 6.1

Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE. D. Talia - UNICAL. Sistemi Operativi 6.1 GESTIONE DELLA MEMORIA CENTRALE 6.1 Gestione della Memoria Background Spazio di indirizzi Swapping Allocazione Contigua Paginazione 6.2 Background Per essere eseguito un programma deve trovarsi (almeno

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Corso di Calcolo Numerico

Corso di Calcolo Numerico Corso di Calcolo Numerico Dott.ssa M.C. De Bonis Università degli Studi della Basilicata, Potenza Facoltà di Ingegneria Corso di Laurea in Ingegneria Meccanica Sistemi di Numerazione Sistema decimale La

Dettagli