L'obiettivo del primo modulo è apprendere e analizzare dal punto di vista di correttezza ed efficienza algoritmi classici nella formazione di un informatico, assumendo dal corso di Algoritmi e Strutture Dati le nozioni base relative a complessità e strutture dati elementari. L'obiettivo del secondo modulo è imparare ad applicare nozioni fondamentali dalla teoria della probabilità nell’analisi di algoritmi randomizzati e imparare a valutare i benefici della randomizzazione nella progettazione di algoritmi.
Apprendere algoritmi e schemi algoritmici classici, saper analizzare correttezza ed efficienza di un algoritmo
Tradizionale.
Primo modulo: Complessità di algoritmi e di problemi. Principio di induzione, correttezza e complessità di algoritmi ricorsivi. Correttezza di algoritmi iterativi con invariante di ciclo. Grafi: algoritmi di Dijkstra, Prim e Kruskal, algoritmi per ordinamento topologico e componenti fortemente connesse. Programmazione dinamica. Teoria della NP-completezza: classe NP, riduzione polinomiale, classe NP-C, P=NP.
Secondo modulo: Algoritmi randomizzati di tipo Las Vegas e Montecarlo: algoritmi di ordinamento, taglio minimo, albero di un gioco, tolleranza a guasti bizantini, test di primalità e programmazione lineare. Cenni a teoria dei giochi e a problemi di occupazione.
Note a cura del docente.
Ricevimento: Su appuntamento.
Ricevimento: Appointment through email
ELENA ZUCCA (Presidente)
PAOLA MAGILLO
ALESSANDRO VERRI (Presidente Supplente)
Prova scritta e orale.
La prova scritta verifica la capacità dello studente di mettere in pratica le nozioni viste a lezione. La prova orale verifica la comprensione dei concetti e la capacità di illustrarli in modo appropriato.