Il corso si propone di introdurre lo studente alla progettazione e all'analisi degli algoritmi. Mediante la presentazione delle principali strutture dati e degli algoritmi ad essi relative lo studente maturerà la comprensione del funzionamento degli algoritmi e delle principali tecniche ad essi collegate.
Il corso introduce le principali strategie di progettazione di algoritmi e gli strumenti per valutarne la correttezza e le prestazioni. L'obiettivo è lo sviluppo della capacità di formalizzare e risolvere problemi per via algoritmica, e della capacità di analisi e valutazione delle soluzioni.
Il corso introduce le principali strategie di progettazione di algoritmi:
Complessivamente, l'obiettivo è quello di realizzare una buona conoscenza dei principali algoritmi facenti parte di ogni famiglia, avente come risultato la capacità di impostare la soluzione a problemi computazionali per via algoritmica e analizzarne la correttezza e la complessità per via analitica o empirica.
E' richiesta una buona conoscenza di almeno un linguaggio di programmazione, preferibilmente della famiglia C/C++/Java.
Conoscenze preliminari di calcolo combinatorico, algebra e informatica teorica sono utili per una migliore comprensione del materiale del corso.
Lezioni frontali ed esercitazioni.
Modelli per la valutazione degli algoritmi. Strumenti analitici. Strategie per la soluzione di problemi: “Forza Bruta”, “Dividi e Conquista”, “Diminuisci e Conquista”, “Trasforma e Conquista”, “Compromesso spazio ‐ tempo”, “Strategia golosa”. Studio e analisi di algoritmi e strutture dati: ordinamento e ricerca, strutture sequenziali, alberi e heap, tabelle hash, analisi di stringhe e testi. Progettazione e programmazione object-oriented in Java.
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein ‐ Introduzione agli algoritmi e strutture dati ‐ 3a Edizione ‐ McGraw ‐ Hill; A. Levitin ‐ Introduction to The Design and Analysis of Algorithms ‐ 2nd edition ‐ Addison ‐ Wesley; S. Skiena ‐ The Algorithm Design Manual ‐ 2nd edition – Springer; R. Sedgewick ‐ Algorithms in C++ ‐ 3rd edition ‐ Vol 1 ‐ 5 ‐ Addison Wesley
Ricevimento: Ogni ora seguente alle ore di lezione oppure su appuntamento.
ARMANDO TACCHELLA (Presidente)
GIUSEPPE CICALA
ENRICO GIUNCHIGLIA
MARCO MARATEA
MASSIMO NARIZZANO
Settembre 2018
PROGETTAZIONE E ANALISI DI ALGORITMI
Progetti durante il corso (2 progetti, massimo 3 punti ciascuno), Prova pratica a calcolatore (massimo 12 punti) ed esame orale (massimo 12 punti)
Capacità di impostare la soluzione a problemi computazionali per via algoritmica e, analizzarne la correttezza e la complessità per via analitica.