Nuova ricerca

Giacomo CABRI

Professore Ordinario presso: Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica

Insegnamento: Distributed computing

INFORMATICA (D.M. 270/04) (Offerta formativa 2018)

Obiettivi formativi

Acquisizione di tecniche algoritmiche per la risoluzione di problemi in ambito distribuito e approssimata di problemi di ottimizzazione NP-hard.
Capacità di sfruttare tecnologie per lo sviluppo di sistemi distribuiti.

Prerequisiti

Conoscenze di algoritmi di base e strutture dati insegnati ad un corso di base di algoritmi di laurea triennale. Esperienze di programmazione di almeno un linguaggio di programmazione. Matematica del corso di Analisi I.
Conoscenze di sistemi operativi e reti di calcolatori

Programma del corso

- Elementi di teoria della NP-completezza: Problemi NP-completi, NP-hard, esempi selezionati di riduzioni e algoritmi di approssimazione in ottimizzazione combinatoria.

- Introduzione alla computazione distribuita e al modello di calcolo multi processore/agente.

- Algoritmi fondamentali nella computazione distribuita per i seguenti problemi: elezione del leader, boradcast, costruzione di minimum spanning tree, problema del consenso. Studio di soluzioni anche in presentza di errori.

- Strutture dati distribuite: tabelle hash, block chain.

- Programmazione socket.

- File system distribuiti.

- Tecnologie ad oggetti per lo sviluppo di applicazioni distribuite; problematiche; esempio: Java RMI

Metodi didattici

Lezioni frontali, esercitazioni in aula e in laboratorio.

Testi di riferimento

Materiale fornito dal docente: appunti di lezioni di altre università italiane e stranienre disponibli on-line e note e appunti scritti dal docente.

Verifica dell'apprendimento

Un esame esame orale il cui obiettivo è verificare la conoscenza dei concetti e degli algoritmi visti in classe. Un progetto in cui vengono applicati i concetti.

Risultati attesi

* Conoscenza e comprensione
Alla fine del corso, lo studente avrà sviluppato conoscenze e tecnologie per sviluppare applicazioni distribuite. Lo studente avrà conoscenza di un nucleo importante di problemi, soluzioni e strutture dati nell'ambito distribuito. Inoltre, lo studente avra' 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, sviluppare e testare applicazioni software distribuite, scegliendo le piattaforme e le tecnologie più appropriate.
Inoltre, sapra'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.