TABELLA DEI SIMBOLI. Structure of a Compiler. Semantic Analyzer SYMBOL TABLE. Code Generator. Optimizer
|
|
- Marina Salvatori
- 7 anni fa
- Visualizzazioni
Transcript
1 TABELLA DEI SIMBOLI Structure of a Compiler Scanner Parser SYMBOL TABLE Semantic Analyzer Optimizer Code Generator 1
2 Ruolo della tabella dei simboli La tabella dei simboli è una delle più importanti strutture dati di un compilatore Creata dal front-end per contenere le informazioni sul programma oggetto IR si riferisce agli oggetti tramite puntatori alle voci corrispondenti nella tabella di simboli Questo è fatto fin quasi alla fine della compilazione Così la tabella dei simboli è utilizzata durante l intera trasformazione Il contenuto può essere modificato nel processo di ottimizzazione Scope Una (sintatticamente definita) all interno di un programma nella quale gli identificatori (I nomi) possono essere dichiarati.. E.g. funzioni, istruzioni blocco. Gli scope possono essere innestati in alcuni linguaggi 2
3 Alcune considerazioni.. Static scope in linguaggi strutturati a blocchi Lo scope di un identificatore include il blocco di definizione e i blocchi in esso contenuti che non contengono una ulteriore dichiarazione dell identificatore Nested declaration di funzioni Direttive per la promozione ad un scope globale Block Scoping of Variables { int x, y, z ; x y z /* some code */ { int y ;. x y z. /* some more code */ { int z ; x = y + z ; */ In generale: al punto p quale dichiarazione di x è valida? Come il compilatore tiene traccia di ciò? 3
4 Block Scoping of Variables Blocchi nested Se la variabile x è utilizzata nel blocco B e dichiarata in B allora la sua dichiarazione è utilizzata. Altrimento se x è dichiarata nel blocco C esterno a B ma non in nessun altro blocco all interno di C ed esterno a B viene utilizzata la dichiarazione di x in C Ogni differente variabile richiede una propria entry nella symbol table. Cioè avremo più entri per x etc. { /* this is block C */ int x, y, z ; x y z /* some code */ { /* this is block D */ int y ;. x y z. /* some code */ { /* this is block B */ int z ; x = y + z ; /* which ones are used??? */ Scope of Variable Declaration Static Scope Lo scope è determinato dalle relazioni di nesting del programma sorgente, e.g. C, JAVA, Pascal. Dynamic scope Lo scope è determinato dalle relazioni che scaturiscono dalle chiamante a run time. E.g. Lisp. 4
5 Lexical vs. Dynamic Scoping program whichone (input, output ) ; var r : real ; procedure show ; begin write ( r : 5:3 ) end ; procedure small ; var r : real ; begin r := ; show end ; begin r := 0.25 ; show ; small ; writeln ; end Questo programma chiama show ; small? Lexical vs. Dynamic Scoping program whichone (input, output ) ; var r : real ; procedure show ; begin write ( r : 5:3 ) end ; procedure small ; var r : real ; begin r := ; show end ; begin r := 0.25 ; show ; small ; writeln ; end output?? Con static scoping, è Con dynamic scoping, è
6 Lifetime of Variable Lifetime is the time during execution of a program when a given variable first becomes visible to when it is last visible. Also called extent. The lifetime of a global variable covers the entire execution (unless it is temporarily superseded in some places). The lifetime of a local or automatic variable is usually an activation of the program unit within which it is declared. Some languages permit variables to be local to blocks also. Lifetime and Scope Examples In C, scope of automatic variable is procedure or block where it is declared to end of program unit In PL/1 scope encompasses entire relevant program unit In Pascal, a variable in outermost scope is visible everywhere in program except where another variable with same name is declared (and in the routines it contains) Fortran has common blocks, static memory that is visible in all routines where it is declared. Scope encompasses all those routines. Local static variables in C and SAVEd variables in Fortran have global lifetime but are only visible in certain regions, so scope may be a file or a procedure Dynamic variables have a lifetime that extends from their point of allocation to the point(s) of their destruction. 6
7 Interfaccia della tabella dei simboli openscope() closescope() entersymbol(nome, tipo) retrievesymbol(nome) declaredlocally(nome) void builtsymboltable () {processnode(astroot)} void processnode(node) { switch (kind(node) { case block: {symtab.openscope(); break;} case def: {symtab.entersymbol(node.name, node.type); break;} case ref: {symb = symtab.retrivesymbol(node.name) if (symb == null) errore; break:} } foreach (c : node.getcildren() ) processnode(c) If (kind(node) == block) symtab.cosescope(); } 7
8 Contenuto della tabella dei simboli La tabella dei simboli memorizza informazioni su: Identificatori Etichette Valori numerici (costanti) Stringhe di caratteri Variabili generate temporaneamente dal compilatore Le tabelle di simboli possono essere possono separate (una per ogni scope o una singola Linguaggi struttuturati a blocchi e scope Regole comuni I nomi accessibili ad un certo punto di un programma sono quelli definiti nel current scope e tutti quelli definiti negli open scope Se un nome è dichiarato in più di un scope è valido quello nello scope più interno (innermost scope) Le nuove dichiarazioni possono essere fatte solo nel current scope. Regole singolari È possibile accedere a defiizioni in outrmost global scope (extern in C, public static field in Java) 8
9 Una o più tabelle dei sinboli Una tabella per ogni scope Gli scope sono aperti e chiusi con una strategia LIFO Svantaggi: può essere necessario ricercare in più tabelle un nome Un unica tabella Insieme al nome viene inserito nella tabella il nome dello scope o il livello di profondità dello scope Può essere utilizzato uno stack per ogni nome comune, la ricerca di un nome si limita alla ricerca nel top della specifica pila Tecniche delle implementazioni Lista semplice non ordinara: compatta ma lenta in pratica O(n) complessita delle ricerca O (1) complessita dell inserimento Lista semplice ordinata: semplice, buona se le tabelle sono note in anticipo O(log n) complessita delle ricerca binaria O(n) complessita dell inserimento Binary search tree: approccio meno semplice O(log n) complessita media delle ricerca O(n) worst case Ol(og n) complessita dell inserimento Albero binario bilanciato Con un albero bilanciato otteniamo i tempi previsti Su un ingresso arbitrario l'albero non è necessariamente bilanciato Che cosa succede se le variabili sono in ordine alfabetico Utilizzare un algoritmo di bilanciamento approssimativa Complica l'attuazione Spazio overhead è direttamente proporzionale al numero di elementi nella tabella O 9
10 Implementazione della tabella dei simboli Implementazioni semplici basare su array sono troppo semplici nei casi reali L approccio più comune usa un hashing aperto (open hashing) La funzione Hash è basata su identificativo Un numero di funzioni sono conosciute Gli entry della tabella dei simboli usualmente puntano ad altre strutture per salvare stringhe di caratteri (nome della variabile, const char ) Consente la stessa dimensione per ogni entry Hash table O(1) complessita media delle ricerca O(1) complessita media dell inserimento Caso peggiore molto improbabile Tale approccio è adottato nella maggior parte dei compilatori O(n + m) spazio dove n è il numero di simboli e m è il numero di voci della tabella di hash 10
11 TABELLE HASH Le tabelle hash sono strutture di dati che consentono la ricerca, l inserzione e in certi casi la cancellazione di n chiavi in tempomedio costante, e tempo pessimo Θ(n). Poiché tutte le chiavi sono sequenze binarie, esse possono essere interpretate come numer interi. Dimensionare la tabella in base al numero di elementi attesi ed utilizzare una speciale funzione (funzione hash) per indicizzare la tabella Una funzione hash h ha come dominio l insieme C di tutte le possibili chiavi, e come codominio l insieme {0,..., m-1} per un dato intero m. Essa trasforma quindi ogni possibile chiave K di C in un indirizzo hash h(k) tra 0 e m-1, inteso come posizione per K in un array A[0..m-1]. Idealmente la chiave K sarà memorizzata in A[h(K)]. Una funzione hash è quindi una funzione che data una chiave k C restituisce la posizione della tabella in cui l elemento con chiave k viene memorizzato h : C [0, 1,...m 1] N.B: la dimensione m della tabella può non coincidere con la C, anzi in generale m < C 11
12 L idea èquella di definire una funzione d accesso che permettadi ottenere la posizione di un elemento in data la sua chiave Con l hashing, un elemento con chiave k viene memorizzato nella cella h(k) Pro riduciamo lo spazio necessario per memorizzare la tabella Contro: perdiamo la corrispondenza tra chiavi e posizioni in tabella le tabelle hash possono soffrire del fenomeno delle collisioni Le chiavi possibili sono in genere moltissime e non note a priori (per esempio i codici di login in un sistema, o le variabili che un utente inserirà in un programma, o i cognomi dei clienti di una ditta), quindi si ha C >> m. Dunque è estremamente complesso definitre una funzione hash che grarantisca una corrispondenza biunivoca fra chiave e indirizzo hash. Cioè e difficile avere la garanzia che K1 K2 h(k1) h(k2) Nasce quindi un problema di collisioni: (K1 K2 si può avere h(k1) = h(k2)) per solo una delle chiavi (tipicamente la prima che si è presentata, diciamo K1) potrà essere allocata in A[h(K1)], e le altre saranno poste altrove. 12
13 Collisioni Due chiavi k1 e k2 collidono quando corrispondono alla stessa posizione della tabella, ossia quando h(k1) = h(k2) Soluzione ideale: eliminare del tutto le collisioni scegliendoun opportuna (= perfetta) funzione hash. Una funzione hash si dice perfetta se è iniettiva, cioè se per ogni k1, k2 C K1 K2 h(k1) h(k2) Deve essere U <=m Se U > m, evitare del tutto le collisioni èimpossibile (Ad es.supponente di dover inserire un nuovo elemento in una tabella piena) Problemi da affrontare Dobbiamo quindi affrontare tre problemi: 1. scegliere la dimensione m; 2. Scegliere la funzione h; 3. Risolvere le collisioni. 13
14 Scelta di m e definizione del fattore di carico In ogni istante si indica con n il numero di chiave presenti nella tabella: dunque n varia durante l applicazione mentre la dimensione m del vettore A è fissata all inizio. Si definisce il fattore di carico α = n/m e si sceglie m in modo che presumibilmente α non superi 0.9: se ciò dovesse accadere si raddoppia la dimensione di A e si riallocano tutte le chiavi nel nuovo vettore. In genere m si sceglie come potenza di due o come numero primo Funzione hash Tra tanti metodi ne indichiamo due, usati rispettivamente per m potenza di 2 o per m primo. In entrambi i casi, se si ammette che tutte le sequenze di bit delle chiavi siano equiprobabili, per ogni chiave K l indirizzo hash h(k) ha valore tra 0 e m-1 con pari probabilità 1/m. In questo caso la funzione hash si dice semplicemente uniforme. 1. Poniamo che sia m=2 s, quindi le posizioni di A sono ndirizzate con s bit. La sequenza binaria che rappresenta la chiave K è divisa in parti di s bit ciascuna, e tra esse sicalcola lo XOR bit a bit per ottenere una sequenza di s bit che rappresenta h(k). Si noti che tutti i bit della chiave contribuiscono a formare h(k). 2. Poniamo che m sia un numero primo. Per ogni chiave K si pone h(k)=k mod m (cioè h(k) è il resto della divisione tra K e m). 14
15 Funzione hash Una buona funzione hash deve: 1. essere facile da calcolare (costo costante) 2. soddisfare il requisito di uniformità semplice: ogni chiave deve avere la stessa probabilità di vedersi assegnata una qualsiasi posizione ammissibile, indipendentemente da altri valori hash già assegnati Sia P(k) la probabilità che sia estratta una chiave k tale che h(k) = j, allora k:h(k)=j P(k) = (1/m) per j = 0,...,m 1 Una buona funzione hash Il requisito di uniformità semplice è difficile da verificare perchè raramente è nota la funzione di distribuzione di probabilità con cui vengono estratte le chiave (la funzione Pr) Nella pratica però è possibile usare delle euristiche per realizzare delle funzioni hash con buone prestazioni: Metodo della divisione Metodo della moltiplicazione 15
16 Metodo della divisione Consiste nell associare alla chiave k il valore hash h(k) = k mod m Semplice e veloce, ma occorre evitare certi valori di m; m non dovrebbe essere una potenza di 2 Se m = 2p, h(k) rappresenta solo i p bit meno significativi di k. Questo limita la casualità di h, in quanto è funzione di una porzione (di dimensione logaritmica) della chiave Bisogna rendere la funzione h dipendente da tutti i bit della chiave; una buona scelta per m è un numero primo non troppo vicino ad una potenza di due Metodo della moltiplicazione Consiste nell associare alla chiave k il valore hash h(k) = m (ka ka) ka ka è la parte frazionaria di ka Ha il vantaggio che il valore di m non è critico; di solito si sceglie m = 2p Per quanto riguarda il valore di A, in letteratura viene suggerito un valore prossimo a (5 1)/2 16
17 Risoluzione delle collisioni Una possibile alternativa: utilizzare una buona funzione hash (per minimizzare le collisioni) e prevedere nel contempo deimetodi di risoluzione delle collisioni Metodi classici di risoluzione delle collisioni: Liste di collisione: gli elementi collidenti sono contenuti in liste esterne alla tabella; T[i ] punta alla lista di elementitali che h(k) = i Indirizzamento aperto: tutti gli elementi sono contenuti nella tabella; se una cella èoccupata, se ne cerca un altra libera Risoluzione delle collisioni per concatenazione (chaining) Gli elementi collidenti vengono inseriti nella stessa posizione della tabella in una lista concatenata 17
18 Costo della ricerca: analisi nel caso peggiore Data una tabella A con m posizioni ed n elementi, quanto tempo richiede la ricerca di un elemento data la sua chiave? Caso peggiore: tutte le chiavi vengono inserite nella stessa posizione della tabella creando un unica lista di collisione di lunghezza n In questo caso il tempo di ricerca è(n) (ossia il costo della ricerca nella lista di collisione) + il tempo di calcolo di h Costo della ricerca: analisi del caso medio Si definisce fattore di carico il rapporto tra il numero n degli elementi memorizzati e la dimensione m della tabella = n/m Nell ipotesi di uniformità semplice della funzione hash è il numero medio di elementi memorizzati in ogni lista concatenata < 1 molte posizioni disponibili rispetto agli elementi memorizzati = 1 numero di elementi memorizzati èuguale alla dimensione della tabella > 1 situazione attesa: molti elementi memorizzati rispetto alla dimensione della tabella 18
19 Analisi nel caso medio Il comportamento nel caso medio dipende da come la funzione hash distribuisce le chiavi sulle m posizioni della tabella Ipotesi: uniformità semplice della funzione di hash h(k) è calcolata in O(1) così che il costo della ricerca di un elemento con chiave k dipenda esclusivamente dalla lunghezza della lista A[h(k)] Indirizzamento Aperto La rappresentazione non fa uso di puntatori Le collisioni vengono gestite memorizzando elementi collidenti in altre posizione della tabella Invece di seguire le liste di collisione, calcoliamo la sequenza di posizioni da esaminare Il fattore di carico non può mai superare 1 Si usa meno memoria rispetto allar appresentazione con liste di collisione perchè non ci sono puntatori 19
20 Indirizzamento Aperto Prevede che si usi solo lo spazio della tabella, senza uso di zone di trabocco, allocando gli elementi che determinano collisioni in posizioni diverse da quella che loro competerebbe Supponiamo di voler inserire un elemento con chiave k e la sua posizione naturale h(k) sia già occupata Cerchiamo la cella vuota (se c è) scandendo le celle secondo una sequenza di indici; ad esempio: c(k, 0) c(k, 1)... c(k,m) c(k, 0) = h(k) c(k, 1) = h(k) c(k,m) = h(k) + m Indirizzamento Aperto Per inserire una nuova chiave si esamina una successione di posizioni della tabella, si esegue una scansione, finchè non si trova una posizione vuota in cui inserire la chiave La sequenza di posizioni esaminate dipende dalla chiave che deve essere inserita Estendiamo la funzione hash in modo che possa tener conto anche del numero di posizioni già esaminate h : C {0, 1,...,m 1} {0, 1,...,m 1} 20
21 Operazione di Inserimento Hash-Insert(T, k) { i = 0 do { j = h(k, i ) if (A[j] = null A[j] = deleted} {A[j] = k; return j} else i = i + 1 }while (i!= m) error overflow sulla tabella hash Operazione di Ricerca Hash-Search(T, k){ i = 0 do { j = h(k, i ) if (A[j ] = k) return j I = i + 1 } while (A[j ]!= null && i!= m) return null 21
22 Tecniche di scansione: Scansione Lineare Sia h : C {0, 1,...,m 1} una funzione hash ordinaria Il metodo di scansione lineare usa la funzione hash (estesa) definita come h(k, i ) =( h (k) + i)mod m h(k, 0) = h (k) mod m h(k, 1) = (h (k) + 1) mod m, h(k, 2) = (h (k) + 2) mod m La scansione lineare presenta un fenomeno conosciuto come agglomerazione primaria Le posizioni occupate della tabella si accumulano per lunghi tratti, aumentando cos`ı il tempo medio di ricerca Tecniche di scansione: Scansione Lineare Inoltre... La prima posizione esaminata determina l intera sequenza di scansione; quindi abbiamo solo m sequenze di scansione distinte Il numero ottimo è m! ed è dato dall ipotesi di unformità della funzione hash: ognuna delle m! permutazioni di (h,...,m 1) è equiprobabile Siamo molto lontani dal numero ottimo 22
23 Tecniche di scansione: Scansione Quadratica Sia h : C U {0, 1,...,m 1} una funzione hash ordinaria Il metodo di scansione quadratica usa la funzione hash (estesa) definita come h(k, i ) = (h (k) + c1*i + c2*i 2 )mod m dove, c1 e c2 sono delle costanti ausiliarie (con c2!= 0) Un esempio: h(k, i ) = ( (h (k) + c1*i + c2*i 2 )mod m dove, c1 = c2 = 1 h(k, 0) = h (k), h(k, 1) = h (k) = h0(k) + 2, h(k, 2) = h (k) = h0(k) + 6, h(k, 3) = h (k) = h0(k) + 12, h(k, 4) = h (k) = h0(k) + 20 Cosa succede se m = 20? Viene scandita solo una porzione (in realtà 1/4) della tabella Elimina il problema dell agglomerazione primaria, ma viene usata l intera tabella; solo per alcune combinazioni di c1, c2 ed m; se m = 2 p una buona scelta è c1 = c2 = 1/2, perchè ivalori h(k, i) per i [0,m 1] sono tutti distinti 2. h(k1, 0) = h(k2, 0) implica h(k1, i) = h(k2, i) questo porta ad una forma di addensamento (più lieve rispetto a quella primaria) detta agglomerazione secondaria di nuovo, la prima posizione determina l intera sequenza di scansione ed abbiamo solo m sequenze di scansione distinte 23
24 Hashing Doppio L hashing doppio usa una funzione hash (estesa) della forma h(k, i ) = (h 1 (k) + ih 2 (k))mod m dove h 1, h 2 sono delle funzioni hash (ordinarie) ausiliarie La prima posizione esaminata è A[h 1 (k)] mod m; ogni posizione esaminata successivamente è distanziata dalla precedente di una quantità h 2 (k) mod m La sequenza di scansione dipende da k in due modi: a seconda della chiave, possono variare sia la posizione iniziale che il passo L hashing doppio non soffre di fenomeni di agglomerazione perché il passo è casuale inoltre... Ogni possibile coppia (h 1 (k), h 2 (k)) produce una sequenza discansione distinta: abbiamo O(m 2 ) sequenze di scansione distinte ed in questo senso è migliore sia della scansione lineare che quadratica Hashing Doppio Il valore di h 2 (k) deve essere primo con la dimensione m della tabella per ogni chiave da cercare Infatti se MCD(h 2 (k),m) = d > 1 per qualche k, allora la ricerca di tale chiave andrebbe ad esaminare solo una porzione (1/d) della tabella Se m è una potenza di 2, basta definire h 2 in maniera tale che restituisca sempre un numero dispari Altro modo è scegliere m primo e porre h 1 (k) = k mod m, h 2 (k) = 1 + (k mod m0) dove m0 è appena più piccolo di m (ad esempio m0 = m 1 oppure m0 = m 2) 24
25 Two level hash table Spazio dei nomi Il nome di un simbolo non muta durante la compilazione Benchè un scope può essere aperto o chiuso il simbolo deve persistere in memoria I nomi possono essere di dimenzioni svariate (da 1 a molti caratteri) Una lista ordinata dei nomi può essere mantenuta Ciò fa preferire uno spazio dei nomi logico P R O V A S 1 S 2 X 25
26 Implementazione della tabella dei simboli Per ogni nome sono memorizzati Nome: un riferimento allo spazio dei nomi logico Tipo: informazioni associate con il simbolo Hash: collegamento doppio con i simboli che forniscono lo stesso hash code Var: riferimento alle altre dichiarazioni dello stesso nome Level: collegamento a simboli dello stesso livello Depth: memorizza la profondita del nesting di un simbolo Void openscope() { depth = depth +1; scopedisplay(depth) = null } Void closescope() { foreach (symb in scopedisplay(depth)) do { prevsym = symb.var delete(symb) if (prevsym!= null) add(prevsym) } depth = depth +1; } Symnol retrievesymbol(name) { sym = hashtable.get(name) while (sym!= null) { if (sym.name == name) return sym sym = sym.hash } return null } 26
27 Void entersymbol () { oldsym = retrivesymbol(name) if (oldsym!= null) && oldsym.depth == depth) errore ( duplicate symbol) newsym = createnewsymbol(name,tyoe) newsym.level = scopedisplay(depth) newsym.depth = depth scopedisplay(depth) = newsym if (oldsym == null) add(newsym) else { delete(oldsym) add(newsym) } newsym.var = oldsym } Esempio fare copia HASHTABLE f function(float, float) v L h f Void function v L h z float v L h x float v L h x int v L h 27
28 Ancora. Strutturre e record: nomi dei campi Overloanding di funzioni e operatori Dichiarazioni implicite Contenuto della tabella dei simboli Ci sono una varietà di generi tipici di identificatori Le variabili scalari, array e strutture (record), le procedure e le funzioni, Alcuni tipi di informazioni memorizzate per identificatori l nome o il valore Il tipo di dati Le Dimensioni e iinformazioni di dimensionalità (per gli array) scoping Tipi di risultati, i parametri (parametri formali), i prototipi Le informazioni salvate dipendono dal genere di oggetto, per tale motivo si ha la necessita che le entri della tabella dei simboli abbiano un formato flessibile 28
29 Tipo di dato nella tabella dei simboli Ad esempio l entry per un array definito come nel seguito richiede una descrizione che include il tipo degli elementi Array A [ ] of mytype ; Mytype is a record username: char string ; address: char string ; acctdetails: array ( 1: 5) of integer usage: pointer to array ( 1:12) of reals Descrittori delle strutture Il descrittore type deve essere un puntatore ad un TypeDescriptor Il TypeDescriptor è una struttura dati che consente di modellare i diversi tipi presenti nei linguaggi Esempi di descrittori per alcuni tipi di dato 29
Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1
Dizionario Insieme dinamico che offre solo le seguenti operazioni: inserimento di un elemento dato cancellazione di un elemento dato ricerca di un elemento dato (verifica dell appartenenza di un elemento
DettagliAlgoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc
Algoritmi e Strutture di Dati I 1 Algoritmi e Strutture di Dati I Massimo Franceschet http://www.sci.unich.it/ francesc Algoritmi e Strutture di Dati I 2 Tabelle hash Una tabella hash (in inglese hash
DettagliROLE OF SYMBOL TABLE STRUCTURE OF A COMPILER
SYMBOL TABLE SYMBOL TABLES The job of the symbol table is to store all the names of the program and information about each name In block structured languages, roughly speaking, the symbol table collects
DettagliEsercizi Capitolo 7 - Hash
Esercizi Capitolo 7 - Hash Alberto Montresor 19 Agosto, 2014 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile saltare alle rispettive
DettagliHash Tables. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione
Hash Tables Ilaria Castelli castelli@dii.unisi.it Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione A.A. 2009/2010 I. Castelli Hash Tables, A.A. 2009/2010 1/42 Hash Tables Indirizzamento
DettagliSommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash
Funzioni Hash Sommario Tabelle ad indirizzamento diretto e hash Funzioni Hash Requisiti Metodo della divisione Metodo della moltiplicazione Funzione Hash Universale La ricerca Talvolta si richiede che
DettagliMassimo Benerecetti Tabelle Hash: gestione delle collisioni
Massimo Benerecetti Tabelle Hash: gestione delle collisioni # Lezione n. Parole chiave: Corso di Laurea: Informatica Insegnamento: Algoritmi e Strutture Dati I Email Docente: bene@na.infn.it A.A. 2009-2010
DettagliINDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso
INDICI PER FILE Strutture ausiliarie di accesso 2 Accesso secondario Diamo per scontato che esista già un file con una certa organizzazione primaria con dati non ordinati, ordinati o organizzati secondo
DettagliStrutture dati e loro organizzazione. Gabriella Trucco
Strutture dati e loro organizzazione Gabriella Trucco Introduzione I linguaggi di programmazione di alto livello consentono di far riferimento a posizioni nella memoria principale tramite nomi descrittivi
DettagliFasi di un Compilatore
Dipartimento di Matematica e Informatica Università di Camerino Un implementazione compilativa di un linguaggio di programmazione viene realizzata tramite un programma che prende il nome di compilatore
DettagliUniversità degli Studi G.d Annunzio Chieti Pescara Corso di Laurea in Economia Informatica
Dott. Massimo Franceschet Prof.ssa Maria Chiara Meo Introduzione alle tabelle hash di Enrico Zimuel (enrico@zimuel.it) revisione del 22/3/2003 Sommario L idea delle tabelle hash Tabelle ad indirizzamento
DettagliEsercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016
Esercitazione 5 Algorithmi e Strutture Dati (Informatica) A.A 2015/2016 Tong Liu April 7, 2016 Liste trabocco (Separate Chaining) Esercizio 1 [Libro 7.5] Un dizionario è realizzato con liste di trabocco.
Dettagli05EIP. Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino
Tabelle di Hash Fulvio Corno, Matteo Sonza Reorda Dip. Automatica e Informatica Politecnico di Torino ADT Dizionario In molte applicazioni è necessario un ADT Dizionario che supporti le seguenti operazioni:
DettagliORDINE DI INSERIMENTO DELLE CHIAVI <35 >35
LIBRERIA WEB Alberi binari 3. Alberi binari e tecniche di hashing per la gestione delle chiavi Gli indici di un file possono essere trattati in modo efficiente con tecniche che si basano sull uso di alberi
DettagliStrutture di accesso ai dati: B + -tree
Strutture di accesso ai dati: B + -tree A L B E R T O B E L U S S I S E C O N D A P A R T E A N N O A C C A D E M I C O 2 0 0 9-2 0 0 Osservazione Quando l indice aumenta di dimensioni, non può risiedere
DettagliFILE E INDICI Architettura DBMS
FILE E INDICI Architettura DBMS Giorgio Giacinto 2010 Database 2 Dati su dispositivi di memorizzazione esterni! Dischi! si può leggere qualunque pagina a costo medio fisso! Nastri! si possono leggere le
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliAllocazione Dinamica della Memoria
Allocazione Dinamica della Memoria Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Allocazione Dinamica della Memoria 1 / 10 Scelta delle variabili Quando
DettagliPrimi passi col linguaggio C
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta
DettagliProva di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:
Prova di Laboratorio del 12.1.2005 [durata 90 min.] Corso A-B di Programmazione (A.A. 2004/05) 1. Leggere da tastiera un insieme di numeri interi ed inserirli in un vettore A 2. Calcolare tramite una funzione
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
DettagliPASCAL standard. Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth.
PASCAL standard Il linguaggio PASCAL nasce come evoluzione del linguaggio ALGOL60 (ALGOrithmic Language) nel 1968 ad opera di N. Wirth. Nb: primi linguaggi furono: Fortran, Algol, Ada, Cobol (cfr testo)
DettagliAnalizzatore lessicale o scanner. Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser.
Analizzatore lessicale o scanner Dispensa del corso di Linguaggi e Traduttori A.A. 2005-2006 Lo scanner rappresenta un'interfaccia fra il programma sorgente e l'analizzatore sintattico o parser. Lo scanner,
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliArray in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica
Array in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2006/2007 Fortran 90: array DIS - Dipartimento di informatica e sistemistica 1 / 25 Cosa vedremo
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliEsempio: rappresentare gli insiemi
Esempio: rappresentare gli insiemi Problema: rappresentare gli insiemi Vedremo che la scelta della rappresentazione per implementarli non è così ovvia come era stato per i numeri razionali In realtà ci
DettagliDefinizione di metodi in Java
Definizione di metodi in Java Un metodo in Java definisce un operazione ad alto livello (sottoprogramma) che consente di manipolare dati e oggetti. Durante la computazione effettuata da un programma, un
DettagliLezione 6. Visibilità degli identificatori e tempo di vita degli oggetti
Lezione 6 Visibilità degli identificatori e tempo di vita degli oggetti Programmazione I Paolo Valente - 2009/2010 Ripasso dichiarazioni oggetti Finora abbiamo scritto le dichiarazioni di variabili e costanti
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliVBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.
Excel VBA VBA Visual Basic for Application VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole. 2 Prima di iniziare. Che cos è una variabile?
DettagliMacchine astratte, linguaggi, interpretazione, compilazione
Macchine astratte, linguaggi, interpretazione, compilazione 1 Macchine astratte una collezione di strutture dati ed algoritmi in grado di memorizzare ed eseguire programmi componenti della macchina astratta
DettagliProgramma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore
Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliArchitettura degli elaboratori Docente:
Politecnico di Milano Il File System Architettura degli elaboratori Docente: Ouejdane Mejri mejri@elet.polimi.it Sommario File Attributi Operazioni Struttura Organizzazione Directory Protezione Il File
DettagliADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)
ADT: Abstract Data Type I tipi di dati astratti (I parte) Gianpiero Cabodi e Paolo Camurati Dip. Automatica e Informatica Politecnico di Torino Scopo Livello di astrazione sui dati tale da mascherare completamente
DettagliTempo di vita e scope delle variabili
Tempo di vita e scope delle variabili Richiami sulla struttura di un programma C Un programma C deve essere contenuto in uno o più file (salvo diversa specifica, per ora si assume tutto in un unico file):
DettagliAnalizzatori Lessicali con JLex. Giuseppe Morelli
Analizzatori Lessicali con JLex Giuseppe Morelli Terminologia Tre concetti sono necessari per comprendere la fase di analisi lessicale: TOKEN: rappresenta un oggetto in grado di rappresentare una specifica
DettagliEsiste però anche un ambiente globale: quello dove tutte le funzioni sono definite. Qui si possono anche definire variabili, dette variabili globali
AMBIENTE LOCALE E GLOBALE In C, ogni funzione ha il suo ambiente locale che comprende i parametri e le variabili definite localmente alla funzione Esiste però anche un ambiente globale: quello dove tutte
DettagliTipo di dato Dizionario
Tabelle Hash lezione 8 Tipo di dato Dizionario Il tipo di dato Dizionario permette di gestire collezioni di elementi a cui sono associate chiavi prese da un dominio totalmente ordinato. I dati ammessi
DettagliUD 3.2b: Programmazione in Pascal (1)
UD 3.2b: Programmazione in Pascal (1) Il Linguaggio di Programmazione Pascal Esistono molti linguaggi di programmazione. Per motivi didattici utilizzeremo una versione ridotta di un linguaggio di programmazione
DettagliCaratteristiche di un linguaggio ad alto livello
Caratteristiche di un linguaggio ad alto livello Un linguaggio ad alto livello deve offrire degli strumenti per: rappresentare le informazioni di interesse dell algoritmo definire le istruzioni che costituiscono
DettagliSommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...
Sommario PREFAZIONE...XI Aggiornamenti e novità... xi Lo scopo di questo libro... xii Diagramma delle dipendenze... xii La metodologia di insegnamento... xiii Panoramica sul libro... xvi Ringraziamenti...
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi
DettagliNell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi:
Pag 24 3) Il problema della ricerca Nell informatica esistono alcuni problemi particolarmente rilevanti, poiché essi: si incontrano in una grande varietà di situazioni reali; appaiono come sottoproblemi
DettagliProgrammazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Classi e Oggetti: Metafora Parte a versione 2.2 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
DettagliProgrammazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo
Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy
DettagliPuntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori
Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per
DettagliOrdinamenti per confronto: albero di decisione
Ordinamenti per confronto: albero di decisione Albero di decisione = rappresentazione grafica di tutte le possibili sequenze di confronti eseguite da un algoritmo assegnato di ordinamento per confronto
DettagliCaratteri e stringhe
Caratteri e stringhe Caratteri Dato che un computer può memorizzare esclusivamente sequenze di bit, per memorizzare un carattere (e quindi testi) è necessario stabilire una convenzione che associa a un
DettagliAlgoritmi e Strutture Dati
schifano@fe.infn.it Laurea di Informatica - Università di Ferrara 2011-2012 [1] I Dizionari I dizionari sono un caso particolare di insieme in cui sono possibili le seguenti operazioni: verificare l appartenenza
DettagliGestione di files Motivazioni
Gestione di files Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera) il programma in esecuzione scrive (sequenzialmente)
DettagliLezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22
Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)
DettagliLezione 8. Visibilità degli identifcatori e tempo di vita degli oggetti
Lezione 8 Visibilità degli identifcatori e tempo di vita degli oggetti Programmazione I Paolo Valente - 2014/2015 Ripasso dichiarazioni oggetti Finora abbiamo scritto le dichiarazioni di variabili e costanti
DettagliL Allocazione Dinamica della Memoria
L Allocazione Dinamica della Memoria Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario Questo documento
DettagliProgrammazione I - corso B a.a prof. Viviana Bono
Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 15 Algoritmi su array: selection sort, insertion sort, fusione
DettagliInformatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura
Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina
DettagliEsercizi di Algoritmi e Strutture Dati
Esercizi di Algoritmi e Strutture Dati Moreno Marzolla marzolla@cs.unibo.it Ultimo aggiornamento: 10 novembre 2010 1 La bandiera nazionale (problema 4.7 del libro di testo). Il problema della bandiera
DettagliIntroduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software
Introduzione alla programmazione Algoritmi e diagrammi di flusso F. Corno, A. Lioy, M. Rebaudengo Sviluppo del software problema idea (soluzione) algoritmo (soluzione formale) programma (traduzione dell
DettagliRappresentazione binaria delle variabili (int e char)
Rappresentazione binaria delle variabili (int e char) int e char son i due tipi utilizzati dal linguaggio C per la rappresentazione di valori interi; ai valori delle variabili del primo tipo sono assegnati
DettagliCome ragiona il computer. Problemi e algoritmi
Come ragiona il computer Problemi e algoritmi Il problema Abbiamo un problema quando ci poniamo un obiettivo da raggiungere e per raggiungerlo dobbiamo mettere a punto una strategia Per risolvere il problema
DettagliProgrammazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:
Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli
DettagliAnalisi ammortizzata (Tarjan in 1985)
In questa lezione Analisi della complessità di una sequenza di operazioni di estrazione e inserimento in una tabella memorizzata su un array, usando l analisi ammortizzata. Analisi ammortizzata (Tarjan
DettagliCORSO ACCESS PARTE IV
Creazione di un database / gestione tabelle Per creare un nuovo database Menu File Selezionare Nuovo Scegliere Database vuoto nella scheda Generale e confermare con Ok Impostare il nome e il percorso nella
DettagliUD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE. Dispense, cap
UD 3.5a: Searching (parte 1) ALGORITMO DI RICERCA SEQUENZIALE Dispense, cap. 5.1-5.2 Ricerca di un'informazione in una tabella Determinare se una parola X è presente in un dizionario (cioè in una lista
DettagliInformatica 3 secondo recupero 13 Settembre 2002
Informatica 3 secondo recupero 13 Settembre 2002 Nome (stampatello) Cognome (stampatello) Matr Recupero: Prima prova in itinere Seconda prova in itinere spazio per il docente Punteggi recupero prima prova
DettagliStrutture fisiche di accesso
Strutture fisiche di accesso Esercitazioni - Basi di dati (complementi) Autore: Dr. Simone Grega Esercizio 1 Siano date le seguenti informazioni: B=4096 bytes la dimensione di un blocco H=12 bytes la dimensione
DettagliBasi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale
Giuseppe Loseto Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale Struttura DBMS Gestore delle interrogazioni Decide le strategie di accesso ai dati per rispondere alle interrogazioni Gestore
DettagliIl TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3
Il TDA Dictionary Definizione informale Il TDA Dictionary (dizionario) modella una collezione di voci su cui è possibile effettuare delle ricerche Una voce è una coppia (chiave, elemento) Le principali
DettagliGestione della memoria
Gestione della memoria centrale Gestione della memoria Concetti generali. Swapping. Allocazione contigua di memoria. Paginazione. Segmentazione. Segmentazione con paginazione. Esempio: Pentium Intel Background
DettagliSpecifica: la sintassi. Specifica: la semantica. Specifica: la semantica
Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi Che cos è un tipo di dato? Tutti i linguaggi di programmazione tipati forniscono tipi ed operatori predefiniti
DettagliLinguaggio C. Problemi di Ricerca e Ordinamento: Algoritmi e Complessità.
Linguaggio C Problemi di Ricerca e Ordinamento: Algoritmi e Complessità. 1 Complessità degli Algoritmi Si definisce Complessità di un Algoritmo C(A) la funzione dei parametri rilevanti per A che determina
DettagliI puntatori. Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore
I puntatori Un puntatore è una variabile che contiene l indirizzo di un altra variabile. puntatore...... L operatore & fornisce l indirizzo di un oggetto: p = &c; assegna a p l indirizzo di c, i.e., p
DettagliMacchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD
Macchine RAM API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD 2 Macchina RAM 3 Esercizio Si consideri il linguaggio definito da: L = wcw R w a, b } 1. Codificare un programma RAM per il riconoscimento
DettagliFondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento
Fondamenti di Informatica Algoritmi di Ricerca e di Ordinamento 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare se un elemento fa parte della sequenza oppure l elemento
DettagliSomma di numeri binari
Fondamenti di Informatica: Codifica Binaria dell Informazione 1 Somma di numeri binari 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Esempio: 10011011 + 00101011 = 11000110 in base e una base Fondamenti di
DettagliParte 2. Ricorsione. [M.C.Escher Drawing hands, 1948] - AA. 2012/13 2.1
Parte 2 Ricorsione - AA. 2012/13 [M.C.Escher Drawing hands, 1948] 2.1 Funzioni ricorsive Una funzione si dice ricorsiva se richiama se stessa, direttamente o indirettamente La ricorsione si dice diretta
DettagliLinguaggi di Programmazione
Linguaggi di Programmazione 1 Linguaggio naturale e linguaggio macchina La comunicazione uomo-macchina avviene attraverso formalismi che assumono la forma di un linguaggio. Caratteristiche del Linguaggio
DettagliAlgoritmi e strutture dati
Algoritmi e strutture dati Roberto Cordone A. A. 2015-16 Capitolo 4 Implementazioni delle partizioni Nota: queste dispense sono un rapido riassunto delle lezioni svolte nel dicembre 2015 e gennaio 2016.
DettagliCercare il percorso minimo Ant Colony Optimization
Cercare il percorso minimo Ant Colony Optimization Author: Luca Albergante 1 Dipartimento di Matematica, Università degli Studi di Milano 4 Aprile 2011 L. Albergante (Univ. of Milan) PSO 4 Aprile 2011
DettagliSOMMARIO IL PROBLEMA DELLA RICERCA. Algoritmi di ricerca: Algoritmi di ordinamento: RICERCA LINEARE
SOMMARIO IL PROBLEMA DELLA RICERCA Algoritmi di ricerca: Ricerca lineare; Ricerca binaria (su elenchi già ordinati). Dato un array e un oggetto, stabilire se l oggetto è contenuto in un elemento dell array,
Dettagli4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
Dettagli18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
DettagliMetodi di una Collection
Java Collections Introduzione Una java collection (a volte chiamata anche container) è un oggetto che raggruppa più elementi dello stesso tipo in una singola unità. Tipicamente è utilizzata per raggruppare
DettagliUtilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:
1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente
Dettagli7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
DettagliDAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione
DAGLI ALGORITMI AI LINGUAGGI Linguaggi di Programmazione E` una notazione con cui e` possibile descrivere gli algoritmi. Programma: e` la rappresentazione di un algoritmo in un particolare linguaggio di
DettagliProgrammazione C Massimo Callisto De Donato
Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE
DettagliIl file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.
Il File System Il file system È quella parte del Sistema Operativo che fornisce i meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate in memoria di massa. Realizza i concetti
DettagliCostruzione del File Diretto
Costruzione del File Diretto, Roma Sommario 1 Indicizzazione compressa dei documenti (file diretto). Term-partitioning indexing: File Invertito Map 1 In: Map 2 In: ... Map M In:
DettagliAllocazione dinamica della memoria
Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Tipi di memoria dati Nella macchina astratta C esistono tre tipi di memoria per allocare
DettagliML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA. Objective Caml version 3.06
1 ML è un linguaggio interattivo La modalità interattiva di OCaml Ciclo: LETTURA, VALUTAZIONE, STAMPA # Objective Caml version 3.06 Il cancelletto è il prompt di Caml. # 3*8;; - : int = 24 LETTURA: viene
DettagliGrammatiche Parse trees Lezione del 17/10/2012
Fondamenti di Programmazione A.A. 2012-2013 Grammatiche Parse trees Lezione del 17/10/2012 AUTILI MARCO http://www.di.univaq.it/marco.autili/ Riassunto lezione precedente Sintassi vs Semantica Stringhe,
DettagliCorso di Fondamenti di Informatica. La ricorsione
Corso di Fondamenti di Informatica La ricorsione La ricorsione Si dice che un oggetto (una struttura dati, una funzione matematica, un concetto ) è ricorsivo se è possibile darne una definizione in termini
DettagliFile System ext2. Struttura del filesystem ext2.
Struttura di base File System ext2 Lo spazio fisico di un disco viene usualmente diviso in partizioni; ogni partizione può contenere un filesystem. Nel filesystem ext2 il blocco (block) definisce la minima
DettagliLe basi del linguaggio Java
Corso di Laurea Ingegneria Civile Fondamenti di Informatica Dispensa 10 Le basi del linguaggio Java Aprile 2010 Le basi del linguaggio Java 1 Prerequisiti Nozioni generali sulla sintassi e semantica del
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
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
DettagliCorso di Informatica
Corso di Informatica Modulo T2 3-La memoria 1 Prerequisiti Concetto di memoria Dati e istruzioni Bit e byte 2 1 Introduzione In questa Unità studiamo più in dettaglio la memoria del computer e le sue funzioni.
DettagliIntroduzione al Linguaggio C
INFORMATICA 1 Lezione 3 (Introduzione al Linguaggio C, Introduzione ai Tipi di dato, Cenni alla codifica binaria) Introduzione al Linguaggio C 1 Passi fondamentali del C Definito nel 1972 (AT&T Bell Labs)
Dettagli