ROLE OF SYMBOL TABLE STRUCTURE OF A COMPILER
|
|
- Giuditta Cecilia Lupi
- 8 anni fa
- Visualizzazioni
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 - Modulo 1 Algoritmi sequenziali e basati su
DettagliAllocazione 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
DettagliTabelle 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
DettagliIndirizzamento 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
DettagliTABELLA 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
DettagliIntroduzione 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
DettagliFunzioni 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
DettagliSistema 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
DettagliConcetto 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
DettagliGestione 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,
DettagliUniversità 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
DettagliEsempio: 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
DettagliAltri 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
Dettagli12. 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
DettagliSistemi 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
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliOggetti 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
DettagliCapitolo 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
DettagliI 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à
DettagliIl 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:
DettagliSistemi 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
DettagliUniversità 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,
DettagliProcedure 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
DettagliGESTIONE 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
DettagliINFORMATICA 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
DettagliAppunti 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
DettagliInformatica 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è
DettagliProgettazione 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
DettagliStrutture. 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
DettagliStrutturazione 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
DettagliPROGETTAZIONE 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
DettagliAnalizzatore 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,
DettagliFondamenti 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
DettagliComplessità 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
DettagliB+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
DettagliLa 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,
DettagliLe 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
DettagliProgrammazione 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)
DettagliIntroduzione 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
DettagliInizializzazione, 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
Dettaglivoid 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
Dettagli10 - 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
DettagliFasi 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
DettagliArchitettura 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
DettagliDefinire 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
DettagliSistemi 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
DettagliGestione 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
DettagliAlgoritmi 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
Dettagli12 - 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,
DettagliIl 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
DettagliDispensa 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
DettagliDispensa 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
DettagliUniversità 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)
DettagliAlgebra 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
DettagliTipi 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
DettagliSiti 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
Dettagli10.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
DettagliBasi 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
Dettaglipuntatori 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
DettagliInformatica. 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
Dettaglila 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
DettagliSOMMARIO 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
DettagliLaboratorio 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
DettagliIntroduzione 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
DettagliFONDAMENTI 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
DettagliPROBLEMA 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
DettagliScheduling 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
Dettagli3 - 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
DettagliIntroduzione 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
DettagliCapitolo 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
DettagliLINGUAGGI 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
DettagliCorso 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
DettagliOrganizzazione 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
DettagliInformatica 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
DettagliNote 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
DettagliGli 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
DettagliLe 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
Dettagli4 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
DettagliStored 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
Dettaglistrutturare 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) ;
DettagliCapitolo 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
DettagliProblema 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
DettagliDatabase. 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
Dettaglicostruttori 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,
DettagliBasi 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,
DettagliAlberi 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
DettagliCorso 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
DettagliSistemi 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
DettagliCome 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
DettagliLe 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.
DettagliCodifiche 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) Esercizio 1 L'agenzia viaggi GV - Grandi Viaggi vi commissiona l'implementazione della funzione AssegnaVolo. Tale funzione riceve due liste
DettagliSiamo 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
DettagliFondamenti 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
DettagliSistemi 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
DettagliProgrammazione 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
DettagliCorso 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
DettagliCalcolatori 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
DettagliRealizzazione 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
DettagliCorso 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