ALGORITMI
Anno accademico 2024/2025 - Docente: GIUSEPPE MANGIONIRisultati di apprendimento attesi
Scopo del corso è fornire allo studente le nozioni necessarie per progettare, valutare e implementare algoritmi efficienti, utilizzando le più avanzate tecniche di programmazione e le strutture dati adeguate.
Tali nozioni includono le tecniche di programmazione ricorsiva e Divide-et-impera, le principali strutture dati avanzate e l'analisi di complessità. Verranno, inoltre, forniti i concetti necessari a valutare quali tecniche e quali strutture dati scegliere per affrontare al meglio i diversi tipi di problemi computazionali.
Conoscenza e comprensione
- comprendere gli elementi per descrivere i tempi di esecuzione di un algoritmo;
- apprendere le tecniche di programmazione divide-et-impera, ricorsivi, dinamica e greedy;
- conoscere le principali tecniche di ordinamento;
- conoscere le strutture dati di base ed avanzate;
- apprendere i principali algoritmi per grafi.
Capacità di applicare conoscenza e comprensione
- saper valutare la complessità degli algortimi;
- capacità di individuare gli algoritmi e le strutture dati migliore per risolvere un dato problema computazionale.
Autonomia di giudizio (Ability of making judgements)
- sapere valutare l'adeguatezza di un dato algoritmo e/o di una struttura dati per la soluzione di un problema.
Abilità comunicative (Communication skills)
- acquisire la conoscenza degli algortitmi e delle strutture dati e del vocabolario tecnico ad essi associato
Capacità di apprendimento (Learning skills)
- capacità di apprendere le principali tecniche algoritmiche, necessarie per intraprendere studi successivi e/o attività professionali con un alto grado di autonomia.
Modalità di svolgimento dell'insegnamento
Il metodo di insegnamento principale è la didattica frontale associata alla discussione delle conoscenze acquisite.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
- concetto di algoritmo, definizione e caratteristiche di un linguaggio di programmazione, rudimenti di complessità computazionale, strutture dati di base.
- conoscenza di almeno un linguaggio di programmazione imperativo (esempio: C, C++, C#, Java, Python, Go, ...)
- elementi di matematica discreta e di analisi matematica
Frequenza lezioni
Contenuti del corso
- Fondamenti. Introduzione agli algoritmi ed alla loro descrizione. Tempi di esecuzione. Tecniche algoritmiche.
- Ordinamento e statistiche d'ordine. Heapsort. Quicksort, Ordinamento in tempo lineare.
- Strutture dati. Strutture dati elementari. Hashing. Alberi binari di ricerca e rosso-neri.
- Tecniche avanzate di progettazione e di analisi. Programmazione dinamica e greedy.
- Strutture dati avanzate. Arricchire le strutture dati. B-alberi.
- Algoritmi per grafi. Algoritmi elementari. Alberi di connessione minima. Cammini minimi. Massimo flusso.
Testi di riferimento
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | Fondamenti. Per incominciare | [T1] Capitolo 1 e 2 |
2 | Descrivere i tempi di esecuzione | [T1] Capitolo 3 |
3 | Divide-et-impera | [T1] Capitolo 4 |
4 | Heapsort | [T1] Capitolo 6 |
5 | Quicksort | [T1] Capitolo 7 |
6 | Ordinamento in tempo lineare | [T1] Capitolo 8 |
7 | Mediane e statistiche d’ordine | [T1] Capitolo 9 |
8 | Strutture dati elementari | [T1] Capitolo 10 |
9 | Hashing | [T1] Capitolo 11 |
10 | Alberi binari di ricerca | [T1] Capitolo 12 |
11 | Alberi rosso-neri | [T1] Capitolo 13 |
12 | Programmazione dinamica | [T1] Capitolo 14 |
13 | Algoritmi avidi | [T1] Capitolo 15 |
14 | Arricchire le strutture dati | [T1] Capitolo 17 |
15 | B-alberi | [T1] Capitolo 18 |
16 | Algoritmi elementari per grafi | [T1] Capitolo 20 |
17 | Alberi di connessione minimi | [T1] Capitolo 21 |
18 | Cammini minimi | [T1] Capitolo 22 e 23 |
19 | Flusso massimo | [T1] Capitolo 24 |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
Esempi di domande e/o esercizi frequenti
- Illustrare i concetti base della complessità computazionale
- Descrivere gli alberi rosso-neri
- Illustrare degli esempi di programmazione dinamica
- Cosa sono gli algoritmi greedy
- B-alberi e loro applicazione