Grafi e Reti di Flusso

Un grafo è un’astrazione matematica usata per modellizzare relazioni fra coppie di oggetti. Un grafo G=(V,E), è definito da un insieme V(G) di n nodi, ed un insieme E(G) di m archi, ovvero coppie di nodi. I nodi rappresentano oggetti, mentre gli archi rappresentano le relazioni tra di essi. Esistono due tipologie di grafi: grafo indirettoanche detto grafo non ...

Introduzione alle Tecniche Algoritmiche

Le tecniche algoritmiche che prenderemo in esame, e delle quali mostreremo semplici applicazioni in problemi di valenza generale sono: divide et impera: risoluzione top-down di problemi con struttura ricorsiva. programmazione dinamica: risoluzione bottom-up di problemi con sottoproblemi interdipendenti. tecnica greedy: risoluzione di problemi di ottimizzazione locale.    

Union-Find

Uno Union-Find è un tipo di dato che permette di organizzare n elementi in insiemi nominali disgiunti, definito dalle seguenti operazioni: makeset: crea un insieme contenente unicamente l’elemento specificato, e il cui nome è proprio uguale a quell’elemento. union: unisce due insiemi disgiunti in un unico insieme, il cui nome sarà quello del primo insieme specificato. ...

Code con Priorità

Una coda con priorità è un tipo di dato che permette di mantenere il minimo in un insieme totalmente ordinato U di chiavi k, ed è definito dalle seguenti operazioni: insert: inserisce un elemento e di chiave k. findMin: restituisce l’elemento di chiave minima. deleteMin: rimuove il minimo. delete: rimuove un elemento e di chiave k specificata. increaseKey: incrementa ...

Tabelle Hash

Una tabella è una struttura dati indicizzata che realizza un dizionario, supportando operazioni di inserimento cancellazione e ricerca in T(n)=O(1), a costo di un elevato spreco di memoria, oppure in Tm(n)=O(1), con ottimizzazione sull’utilizzo della memoria. Il fattore di carico esprime il riempimento di un vettore m-dimensionale contenente n elementi. L’hashing è una tecnica di indicizzazione ...

Linguaggio Assembler MIPS R2000

 Il linguaggio assembler continua ad essere utilizzato per scrivere quei programmi in cui la velocità e la dimensione della memoria risultano critiche, o per sfruttare funzionalità hardware che non hanno ancora una corrispondenza nei linguaggi ad alto livello. Nonostante non godano di portabilità, nè di facile comprensibilità e soffrano di un pessimo rapporto di espansione, ...

Compilatore Assemblatore Linker e Loader

Per far eseguire al calcolatore un programma sorgente ad alto livello, deve essere applicato su questo programma il processo di compilazione che lo converta in un programma in linguaggio macchina binario e lo carichi opportunamente in memoria. Il processo di compilazione consiste in quattro fasi nelle quali intervengono nell’ordine: Compilatore Assemblatore Linker Loader

Prestazioni

L’analisi prestazionale necessita di un sistema metrico: infatti in base alla metrica utilizzata otteniamo risultati differenti. Le prestazioni di un calcolatore sono caratterizzate da parametri quantitativi, e sono determinate da fattori HW e SW. Infatti i fattori SW determinano quali istruzioni sono impiegate per una certa computazione, mentre i fattori HW determinano le modalità in ...

Sistemi IO

I sistemi I/O sono dispositivi che permettono al calcolatore di interfacciarsi con l’esterno, e sono in grado di espanderne le potenzialità. Essendo molto etereogenei necessitano una classificazione in termini di: comportamento: indica le modalità con cui il dispositivo si interfaccia con l’esterno, quindi la sua funzionalità. In base al comportamento possiamo distinguere: dispositivi di input: ...

Memoria

Il principio di località sta alla base del comportamento dei programmi in un calcolatore. Questo principio afferma che un programma, in un certo istante di tempo, accede soltanto ad una porzione relativamente piccola del suo spazio di indirizzamento. Esistono due tipi di località: località temporale: quando si fa riferimento ad un elemento, c’è la tendenza ...