Titolo insegnamento in inglese: Algorithm and Data Structures Laboratory
Lingua: italiano
Insegnamento: Laboratorio di Algoritmi e Strutture Dati
Anno di corso: II
CFU: 6
Semestre: 2
Docenti:
- Canale 1: Fabio Mogavero
- Canale 2: Anna Corazza
Insegnamenti propedeutici previsti
Programmazione, Laboratorio di Programmazione
Obiettivi Formativi
Obiettivo del corso è familiarizzare lo studente con la progettazione e l'implementazione di algoritmi e strutture dati. In particolare si vuole dare allo studente la capacità di produrre codice chiaro, modulare, generale ed efficiente attraverso i seguenti passi: analisi del problema, individuazione di una soluzione generale ed efficiente, stesura del codice, documentazione delle scelte effettuate e del codice prodotto.
Contenuti
Dopo un richiamo alle principali strutture dati di base, si procederà allo studio delle rappresentazioni e implementazioni di tipi di dati astratti quali Liste, Pile, Alberi e una panoramica sui Contenitori. Verrà di seguito affrontate la progettazione di librerie di base per Alberi Binari di Ricerca e Code a Priorità, che siano indipendenti dal tipo dei dati in essi contenuti (strutture dati generiche). Verranno illustrate le loro possibili implementazioni, anche in relazione alle Librerie Standard. Successivamente, si tratterà sistematicamente la rappresentazione e implementazione dei grafi e delle tecniche di visita associate. Verranno, inoltre, introdotti e implementati alcuni algoritmi che operano su grafi pesati, come ad esempio l'algoritmo di Dijkstra, quello di Bellman-Ford e tecniche di visita euristica, in particolare l’algoritmo A*. In questo contesto, l'obiettivo generale è quello di progettare e implementare algoritmi e, più in generale, librerie che operino in maniera il più indpendente possibile dalla struttura dati concreta impiegata.
Modalità didattiche
Lezioni frontali. Esercitazioni in laboratorio.
Modalità di esame
L'esame si articola in prova scritta e orale.
La prova si basa su sviluppo progetti.