|
Giacomo CABRI
Professore Ordinario Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica
|
Insegnamento: Algoritmi distribuiti
Informatica (Offerta formativa 2024)
Obiettivi formativi
L'insegnamento si propone di fornire le basi teoriche e pratiche per lo studio e la progettazione e l'implementazione di algoritmi distribuiti e qualche fondamento teorico sulla teoria della complessità.
Al termine dell'insegnamento lo studente sarà in grado di:
- studiare e progettare algoritmi distribuiti
- sfruttare tecnologie per lo sviluppo di sistemi distribuiti
Inoltre, avrà acquisito conoscenza sull'esistenza di problemi NP-hard e alcune tecniche utilizzabili per approcciarli.
Prerequisiti
Per affrontare il corso, agli studenti sono richieste le seguenti conoscenze pregresse:
- Algoritmi di base e strutture dati fondamentali, come quelli presentati in un insegnamento di base di algoritmi di laurea triennale.
- Esperienze di programmazione di almeno un linguaggio di programmazione.
- Matematica dell'insegnamento di Analisi I.
- Conoscenze di sistemi operativi e reti di calcolatori.
Programma del corso
L'insegnamento si svolge nel primo semestre del secondo anno, per un totale di 63 ore (9 CFU) di didattica frontale, suddivise tra lezioni teoriche e di laboratorio.
L'insegnamento è diviso in due moduli, uno da 6 CFU e uno da 3 CFU, tenuti da due docenti diversi.
Modulo da 6 CFU (42 ore)
- Introduzione al corso, alla computazione distribuita e al modello di calcolo multi processore/agente (6 ore).
- Algoritmi fondamentali nella computazione distribuita per i seguenti problemi: elezione del leader, boradcast, costruzione di minimum spanning tree, routing (12 ore).
- Problema del consenso e studio di soluzioni anche in presenza di errori: link e node failures, bizantine failures (8 ore).
- Strutture dati distribuite: tabelle hash, block-chain (8 ore).
- Elementi di teoria della complessità: Problemi NP-completi, NP-hard, esempi selezionati di riduzioni e algoritmi di approssimazione in ottimizzazione combinatoria per i problemi del commesso viaggiatore e del vertex cover (8 ore).
Modulo da 3 CFU (21 ore):
- Programmazione socket (4 ore).
- File system distribuiti (4 ore).
- Tecnologie ad oggetti per lo sviluppo di applicazioni distribuite; problematiche; esempio: Java RMI (13 ore)
La distribuzione delle ore tra gli argomenti trattati è da considerarsi indicativa e può subire delle variazioni dipendentemente dalla partecipazione degli studenti e dei loro riscontri.
Metodi didattici
Le lezioni frontali (6 CFU) e le esercitazioni in laboratorio (3 CFU), sono erogati entrambi in presenza tramite l'ausilio di lucidi e/o lavagna.
La frequenza non è obbligatoria. Gli studenti lavoratori o non frequentanti avranno la possibilità di accedere al materiale fornito dai docenti sulla pagina moodle del corso.
L'insegnamento è in italiano ma il materiale è in inglese.
Tutte le informazioni relative all'insegnamento saranno disponibili sulla pagina moodle dell'insegnamento. Gli studenti potranno trovare le informazioni tecniche e organizzative dell'insegnamento, nonché il materiale didattico, tra cui: lucidi delle lezioni, altro materiale reso disponibile per le esercitazioni e indicazioni dei testi adottati.
Testi di riferimento
Per entrambi i moduli:
- i docenti forniranno del materiale, tra cui: appunti di lezioni di altre università italiane e straniere disponibili on-line e note e appunti scritti dal docente.
Per il modulo da 6 CFU, selezione di capitoli dai seguenti testi:
- T.H. Cormen, C.E. Leoserson, R.L. Rivest, C. Stein,
Introduction to Algorithms ,
Mc-Graw Hill, II o III Edizione
- Nicola Santoro
Design and Analysis of Distributed Algorithms
WILEY 2007
Verifica dell'apprendimento
L'esame si compone di due parti, una per ogni modulo del corso:
- Per il modulo da 6 CFU: un esame esame orale di circa 30 minuti il cui obiettivo è verificare sia la conoscenza dei concetti e degli algoritmi visti a lezione che la capacità di analizzare e progettare algoritmi distribuiti; il voto di questa prova contribuisce per 2/3 al voto complessivo;
- Per il modulo da 3 CFU: presentazione di un progetto in cui viene richiesto lo sviluppo di una applicazione software distribuita per verificare la capacità di applicare i concetti; il voto di questa prova contribuisce per 1/3 al voto complessivo.
Le due parti possono essere sostenute in appelli diversi, in un ordine qualsiasi. Il voto finale sarà calcolato solo dopo il superamento di entrambe le parti e sarà calcolato come la media pesata dei voti delle due parti.
Le prove si svolgeranno in presenza.
In tutte le prove il voto varia da 18/30 (conoscenza basilare degli argomenti e capacità parziale di applicare la conoscenza) a 30/30 e lode (conoscenza piena degli argomenti e capacità ottima di applicare la conoscenza), graduazione dei voti intermedi in base al raggiungimento dei risultati di apprendimento attesi, compresi quelli trasversali dimostrati durante la prova d’esame.
Risultati attesi
* Conoscenza e comprensione
Alla fine dell'insegnamento, lo studente avrà acquisito conoscenze e tecnologie per sviluppare algoritmi e applicazioni distribuite. Lo studente avrà conoscenza di un nucleo importante di problemi, soluzioni e strutture dati nell'ambito distribuito. Inoltre, lo studente avrà comprensione di alcune tecniche algoritmiche standard per la risoluzione (esatta o approssimata) di problemi computazionalmente difficili.
* Capacità di applicare conoscenza e comprensione
Lo studente sarà in grado di progettare e sviluppare applicazioni software distribuite, scegliendo le piattaforme e le tecnologie più appropriate.
Inoltre, saprà riconoscere problemi computazionalmente difficili quando questi emergeranno nelle applicazioni concrete.
* Autonomia di giudizio
Lo studente sarà in grado di scegliere in maniera autonoma o contribuire, all'interno di un team, alla scelta delle migliori soluzioni per problemi affrontati nel corso.
* Abilità comunicative
Lo studente avrà acquisito conoscenze e competenze tali da permettergli di discutere, proporre e condividere in modo efficace problemi, idee e soluzioni in campi applicativi nei quali scaturiscono le problematiche oggetto di studio.
* Capacità di apprendimento
Lo studente sarà in grado di affrontare lo studio di problemi nuovi (noti o non noti), della stessa natura di quelli affrontati nel corso, che si troverà eventualmente ad affrontare nella sua carriera lavorativa.