ALGORITMI E LABORATORIO A - L
Modulo LABORATORIO
Anno accademico 2023/2024 - Docente:
Caterina VIOLA
Risultati di apprendimento attesi
Conoscenza e comprensione (knowledge and understanding): gli studenti acquisiranno la conoscenza dei principi fondamentali dell'analisi delle prestazioni degli algoritmi e dei concetti chiave relativi alla complessità computazionale e alla correttezza algoritmica.
Applicazione della conoscenza e comprensione (applying knowledge and understanding): gli studenti saranno in grado di applicare le tecniche di analisi agli algoritmi esistenti e impareranno a progettare soluzioni algoritmiche a problemi elementari che rispettino rigorosi standard di correttezza.
Autonomia di giudizio (making judgements): gli studenti sapranno identificare le situazioni in cui un algoritmo è preferibile ad un altro e potranno valutare la complessità computazionale di un algoritmo e la sua correttezza mediante dimostrazioni formali.
Abilità comunicative (communication skills): gli studenti impareranno a comunicare in modo chiaro ed efficace i risultati dell'analisi dell'efficienza e delle dimostrazioni di correttezza degli algoritmi, mediante relazioni scritte, presentazioni informali e discussioni tecniche, avvalendosi di una terminologia appropriata che possa adeguarsi ad interlocutori più o meno esperti.
Abilità di apprendimento (learning skills): gli studenti padroneggeranno il pensiero algoritmico acquisito nel corso e lo adatteranno a nuovi algoritmi e problemi informatici che incontreranno. Saranno capaci di apprendere autonomamente e acquisire nuove competenze nell'ambito dell'analisi della complessità di un algoritmo e della sua correttezza.
Modalità di svolgimento dell'insegnamento
Lezioni frontali.
Prerequisiti richiesti
Si richiede una buona conoscenza degli elementi di matematica discreta e di analisi matematica e dei concetti presentati nei corsi di Programmazione.
Inoltre, è necessario seguire contestualmente il corso di Algoritmi.
Frequenza lezioni
Per una piena comprensione degli argomenti del corso e delle tecniche illustrate, la frequenza delle lezioni è fortemente consigliata.
Contenuti del corso
DESCRIZIONE GENERALE DEL CORSO
Il corso offre un'approfondita comprensione delle fondamentali tecniche di analisi della complessità computazionale e delle metodologie per dimostrare la correttezza degli algoritmi informatici.
ARGOMENTI DEL CORSO
Introduzione
Strumenti per l'analisi degli algoritmi. Analisi di algoritmi elementari. Introduzione alle notazioni asintotiche.
Algoritmi ricorsivi
Analisi di algoritmi mediante il metodo di sostituzione e il metodo dell'albero di ricorsione. Heapify e Mergesort. Utilizzo del metodo master per la risoluzione di equazioni di ricorrenza.
Hashing
Analisi delle tabelle hash: ricerca con successo e ricerca senza successo.
Alberi rosso-nero
Analisi dell'altezza di un albero rosso-nero. Operazioni di inserimento e cancellazione.
Programmazione dinamica
Analisi della programmazione dinamica. Dimostrazione della proprietà di sottostruttura ottima. Esempio: Longest Common Subsequence.
Elementi della strategia Greedy
Scelta della soluzione ottima. Dimostrazione della scelta greedy per il problema della selezione di attività e per il caso dell'algoritmo di Huffman. Dimostrazione della proprietà di sottostruttura ottima e di scelta greedy nei problemi dello zaino e del resto.
Algoritmi elementari per grafi
Correttezza degli algoritmi di Bellman-Ford e del Topological Sort ed esempi di esecuzione. Correttezza dell'algoritmo di Dijkstra ed esempi di esecuzione.
Testi di riferimento
Il libro di testo consigliato è:
(*) T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein. Introduction to algorithms (Fourth Edition), The MIT Press, Cambridge - Massachusetts, 2022
disponibile anche nella traduzione italiana
(1) T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein. Introduzione agli algoritmi e strutture dati 3/ed, McGraw-Hill Italia, 2010.
Programmazione del corso
| Argomenti | Riferimenti testi |
1 | Strumenti per l'analisi degli algoritmi. Notazione asintotica. | cap. 2.2 e 3 di (*) |
2 | Analisi degli algoritmi ricorsivi. | cap. 2.3, 4 (introduzione), 4.3 e 4.4 di (*) |
3 | Il metodo master per le equazioni di ricorrenza. Esempio: Heapify. Analisi di Build-a-Heap. | cap. 4.5, 6.2 e 6.3 di (*) |
4 | Analisi delle tabelle hash. | cap. 11.2 e 11.4 di (*) |
5 | Analisi dell'altezza di un'albero rosso-nero. Operazioni di inserimento e cancellazione. | cap. 13.1 di (*) |
6 | Analisi della programmazione dinamica. | cap. 14.1-14.3 e 14.5 di (*) |
7 | Elementi della strategia Greedy. | cap. 15.1 - 15.3 di (*) |
8 | Confronto tra strategia Greedy e programmazione dinamica per Knapsack and fractional knapsack. Proprietà della ricerca Depth-First. | cap. 15.2 e 20.3 di (*) |
9 | Algoritmo di Bellman-Ford e Topological Sort. | cap. 20.4 e 22.1 di (*) |
10 | Algoritmo di Dijkstra. | cap. 22.3 di (*) |
11 | Esercitazioni in aula. | |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
Modalità di verifica dell'apprendimento
La prova di esame del modulo di Algoritmi è suddivisa in due parti: una prima prova scritta (obbligatoria) e una successiva prova orale (che potrà essere facoltativa per gli studenti ammessi senza riserva). Tali prove potranno avere luogo per via telematica, qualora le condizioni lo dovessero richiedere.
Alla fine della prova scritta lo studente riceverà una delle tre seguenti valutazioni:
- NON AMMESSO alla prova orale
- AMMESSO CON RISERVA alla prova orale
- AMMESSO ala prova orale
In quest'ultimo caso allo studente verrà comunicato il voto ottenuto nella prova scritta, voto che sarà compreso tra 18 e 25.
La prova orale potrà svolgersi il giorno stesso in cui è stata svolta la prova scritta o a distanza di pochi giorni da esso. Tale prova avrà lo scopo di valutare più nel dettaglio la preparazione dello studente, la sua capacità di ragionamento relativamente agli argomenti trattati a lezione, nonché la sua proprietà di linguaggio.
La valutazione della prova orale si dovrà intendere ad integrazione del voto ottenuto nella prova scritta e non a suo incremento.
Gli studenti AMMESSI alla prova orale potranno chiedere di essere esonerati dal sostenere tale prova, accettando quindi il voto comunicato ad essi alla fine della prova scritta.
Gli studenti AMMESSI CON RISERVA non potranno usufruire della precedente possibilità e, qualora desiderassero continuare l'iter dell'esame, dovranno sostenere obbligatoriamente la prova orale per concludere l’esame del modulo di Algoritmi.
Gli studenti NON AMMESSI alla prova orale dovranno ripetere la prova scritta in un successivo appello.
Per l'attribuzione del voto finale si seguiranno di norma i seguenti criteri:
- non approvato: lo studente non ha acquisito i concetti di base e non è in grado di svolgere gli esercizi.
- 18-23: lo studente dimostra una padronanza minima dei concetti di base, le sue capacità di esposizione e di collegamento dei contenuti sono modeste, riesce a risolvere semplici esercizi.
- 24-27: lo studente dimostra una buona padronanza dei contenuti del corso, le sue capacità di esposizione e di collegamento dei contenuti sono buone, risolve gli esercizi con pochi errori.
- 28-30 e lode: lo studente ha acquisito tutti i contenuti del corso ed è in grado di esporli compiutamente e di collegarli con spirito critico; risolve gli esercizi in modo completo e senza errori.
Per partecipare all'esame è necessario avere effettuato la prenotazione sul portale SmartEdu.
Si fa presente che l'esame del modulo di Algoritmi e quello del modulo di Laboratorio di Algoritmi si svolgeranno contestualmente e verranno quindi valutati contestualmente.
Esempi di domande e/o esercizi frequenti
Gli studenti potranno trovare esempi di domande e/o esercizi frequenti all'interno del sistema di esercitazione messo a disposizione dal docente e raggiungibile all'indirizzo: https://www.dmi.unict.it/faro/coding/index.php (è necessaria la registrazione al sistema per poter accedere ai contenuti).