ALGORITMI E STRUTTURE DATI - MOD.1

Anno accademico
2019/2020 Programmi anni precedenti
Titolo corso in inglese
ALGORITHMS AND DATA STRUCTURES - PART 1
Codice insegnamento
CT0371 (AF:274905 AR:166178)
Modalità
In presenza
Crediti formativi universitari
6 su 12 di ALGORITMI E STRUTTURE DATI
Livello laurea
Laurea
Settore scientifico disciplinare
INF/01
Periodo
Annuale
Anno corso
2
Sede
VENEZIA
Spazio Moodle
Link allo spazio del corso
L'insegnamento è uno dei corsi fondamentali del corso di studio e fornisce un'introduzione agli algoritmi, ovvero alla formalizzazione dei problemi, all'individuazione di soluzioni computazionali, e all'analisi di tali soluzioni, dal punto di vista della correttezza e dell'efficienza nell'uso di risorse. Inoltre presenta varie strutture dati fondamentali e tecniche di base per la progettazione e l'analisi degli algoritmi.
Conoscenza e comprensione:
- conoscenza e comprensione dei principali algoritmi e strutture dati;
- comprensione e valutazione della complessità dei problemi informatici e capacità di selezionare metodi adeguati per la modellazione e risoluzione del problema.

Capacità di applicare conoscenza e comprensione:
- capacità logico-deduttive e di problem solving;
- capacità di formalizzare e implementare soluzioni per problemi reali e identificazione di pattern di soluzione appropriati;

Capacità di giudizio
- Sapere formulare ed argomentare soluzioni, sviluppando anche un approccio critico alla valutazione di soluzioni alternative.
Familiarita' con i concetti di base della matematica discreta e dell'analisi matematica.
Algoritmi, modelli di calcolo e metodologie di analisi: Introduzione informale agli algoritmi. Modelli di calcolo. Notazione asintotica. Ricorrenze.

Tecniche fondamentali per il progetto di algoritmi: Tecnica divide et impera. Programmazione dinamica. Algoritmi golosi (o greedy).

Algoritmi su grafi: Rappresentazione di grafi. Visite in ampiezza e in profondita. Alberi di copertura minimi (Kruskal e Prim). Cammini minimi (Dijkstra, Bellman-Ford, Floyd-Warshall).

Problemi NP-completi: Classi di complessita P e NP. Riducibilita polinomiale e NP-completezza. Esempi di problemi NP-completi.
T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein.
Introduction to algorithms (3rd Edition), MIT Press, 2009.
(Traduzione italiana a cura di Livio Colussi edita da McGraw-Hill, Milano, 2010.)

C. Demetrescu, I. Finocchi, G. F. Italiano.
Algoritmi e strutture dati (seconda edizione), McGraw-Hill, 2008.
La verifica dell'apprendimento avviene attraverso una prova scritta e una prova orale. La prova scritta ha durata di 3 ore ed è divisa in due parti. La prima parte consiste di 3 quesiti da svolgere in 30 minuti. Tali quesiti richiedono una risposta rapida su argomenti affrontati a lezione e mirano a verificare l'acquisizione dei concetti di base del corso. La seconda parte consiste di 4 esercizi, alcuni dei quali hanno lo scopo di accertare le abilità acquisite nel risolvere problemi computazionali tramite la progettazione di algoritmi efficienti, mentre altri mirano a verificare l'acquisizione delle conoscenze previste dal programma del corso. La prova scritta può essere sostituita dal superamento di due prove intermedie, ciascuna delle quali ha una durata di 2 ore e consiste di 3 esercizi, aventi le stesse tipologie degli esercizi della seconda parte della prova scritta. Durante la prova scritta non è ammesso l'uso di libri, appunti, supporti elettronici.

Durante la prova orale lo studente deve dimostrare di conoscere gli argomenti svolti durante il corso e di saperli esporre in modo formale.

Durante l'anno sono svolte 4 esercitazioni in laboratorio che consistono di esercizi in linguaggio C. Lo scopo è di implementare strutture di dati, tecniche di progettazione e algoritmi visti a lezione e fare esercizio sul calcolo della complessità. Lo svolgimento di tali esercitazioni permette di ottenere un bonus.
Verrano utilizzate lavagna e (all'occorrenza) slide.
Italiano
scritto e orale
Programma definitivo.
Data ultima modifica programma: 15/07/2019