Algoritmi e Strutture Dati (6 CFU)
Informazioni Generali
Il corso introduce gli algoritmi e le strutture dati fondamentali
per la risoluzione di problemi di base e i
principi e le tecniche che permettono l'analisi sistematica
degli algoritmi.
L'obiettivo è fornire gli strumenti per progettare soluzioni algoritmiche corrette
ed efficienti ed individuare, in presenza di varie
alternative, la soluzione più adatta ad un problema.
Orario
Corso impartito nel periodo 22 settembre - 19 dicembre 2025.
Le lezioni si terranno
lunedì 10.00-14.00
e giovedì 15.00-18.00 in aula 4,
presso la sede di Latina in via A. Doria 3.
Google Classroom
Per la comunicazione docente-studenti sarà utilizzata la
piattaforma
Google Classroom
(codice registrazione: xfsle5gr).
Ricevimento studenti
Informazioni disponibili
qui.
Programma d'esame
- Algoritmi e strutture dati: generalità ed esempi.
Introduzione alla nozione di costo (tempo e spazio).
- Notazioni asintotiche per le funzioni di costo e metodi di analisi (caso peggiore, medio, migliore).
- Metodi di analisi di algoritmi ricorsivi:
albero della ricorsione, iterazione, sostituzione, Master Theorem.
- Tipi di dato astratto: dizionario, pila, coda, albero, e rispettive implementazioni. Algoritmi di visita di un albero.
- Algoritmi di ordinamento incrementali (descrizione, implementazione e analisi):
SelectionSort, InsertionSort, BubbleSort.
- Algoritmi di ordinamento ricorsivi (descrizione, implementazione e analisi):MergeSort, QuickSort.
- Lower bound sul costo dell'ordinamento per modello basato su confronti.
- Alberi di ricerca binari (BST). Alberi AVL.
- Tabelle di Hash.
- Grafi e loro rappresentazione. Algoritmi di visita (descrizione, implementazione e costo).
- Tecnica algoritmica golosa (greedy). Minimo albero ricoprente e rispettivo calcolo basato
su algoritmo greedy. Algoritmi di Kruskal, di Prim e di Boruvka.
- Cammini minimi su grafi e relativi algoritmi (descrizione, implementazione e analisi):
calcolo delle distanze, algoritmo di Bellman-Ford,
calcolo dei cammini minimi a sorgente singola su grafi aciclici,
algoritmo di Dijkstra.
- Esercizi su tutti gli argomenti in programma.
Materiale Didattico
Libro di Testo
[T1] C. Demetrescu, I. Finocchi, G. F. Italiano: Algoritmi e strutture dati, McGraw-Hill, Terza Edizione. 2025.
Slides
Pubblicate durante il corso.
Riferimenti bibligrafici:
- Slide, appunti.
- [T1]: Cap 1.
- [T1]: Cap 2, fino a 2.5 incluso.
- [T1]: Cap 3.
- [T1]: Cap 4, fino a 4.5 incluso.
- [T1]: Cap 6, fino a 6.2 incluso.
- [T1]: Cap 7, intero.
- [T1]: Cap 11, fino a 11.5.1 incluso.
- [T1]: Cap 12, fino a 12.4 incluso, esclusi 12.2.1 e 12.3.1.
- [T1]: Cap 13, fino a 13.5.1 escluso.
News
- 16 settembre 2025: Il corso inizierà il 29 settembre.
Esercitazioni
Durante il corso saranno assegnati, tramite Classroom, degli esercizi di
programmazione finalizzati alla comprensione degli argomenti trattati e
propedeutici alla realizzazione del progetto finale.
Gli esercizi non saranno oggetto di valutazione ma ne
è fortemente incoraggiato lo svolgimento.
| Settimana |
Lunedì |
Giovedì |
| 22-28/09/2025 |
Lezione cancellata.
|
Lezione cancellata.
|
| 29/09-05/10/2025 |
Introduzione al corso.
Introduzione agli algoritmi e loro costo. Numeri di Fibonacci.
[Slide e appunti]. [T1] Cap 1.
Video
|
Modello a costi uniformi.
Notazione asintotica O-grande, Omega-grande, Theta-grande.
Esempi.
Teorema sull'andamento asintotico di un polinomio.
Esercizi sulla notazione asintotica.
Limitazione inferiore e superiore al costo di un algoritmo.
Metodi di analisi (caso peggiore, caso migliore, caso medio).
[Slide e appunti]. [T1] 2.1 - 2.4.
Video
|
| 6-12/10/2025 |
Soluzione di equazioni di ricorrenza: metodi dell'albero della
ricorsione, dell'iterazione, della sostituzione.
Principio di induzione matematica ed esempio di applicazione (formula di Gauss per la somma di interi).
Esempi di applicazione dei tre metodi. Algoritmo di ricerca binaria ricorsivo.
[Slide e appunti].
[T1] 2.4 - 2.5.3 (escluso).
Video
|
Cenni all'approccio divide et impera.
Soluzione di equazioni di ricorrenza: teorema Master (senza dimostrazione).
Esempi di applicazione del teorema Master.
Algoritmi di ricerca binaria iterativo e ricorsivo.
Introduzione ai tipi di dato astratti.
Il tipo di dato astratto Dizionario.
Tecniche di rappresentazione dei dati: indicizzata e collegata.
Implementazione con rappresentazione indicizzata e collegata di Dizionario.
[Slide e appunti].
[T1] 3 - 3.1 (incluso).
Video
|
| 13-19/10/2025 |
I tipi di dato astratti Pila e Coda.
Implementazione con rappresentazione indicizzata e collegata di
Pila e Coda.
Realizzazione in C del Dizionario con rappresentazione mediante SCL
(Codice).
[Slide e appunti]. [T1] 3.2.
Video della lezione
- Realizzazione in C del tipo Pila con rappresentazione indicizzata:
Video,
Codice
- Realizzazione in C del tipo Coda con rappresentazione collegata:
Video,
Codice
|
Il tipo di dato astratto Albero.
Rappresentazioni indicizzate di alberi: vettore dei padri; vettore posizionale.
Rappresentazioni collegate di alberi: puntatori ai figli, lista dei figli, primo figlio-fratello successivo.
[Slide e appunti].
[T1] 3, fino a 3.3.3 (escluso).
Video
|
| 20-26/10/2025 |
Visite di alberi (descrizione, pseudocodice, analisi): generica,
in profondità iterativa e ricorsiva, in ampiezza.
[Slide e appunti].
[T1] 3.3.3.
Video
|
Il problema dell'ordinamento. L'approccio incrementale.
Algoritmi con approccio incrementale (descrizione, pseudocodice, analisi):
SelectionSort, InsertionSort, BubbleSort.
Conteggio del numero dei nodi di un albero (soluzione ricorsiva).
Implementazione in C delle strutture dati per la modellazione del tipo Albero con rappresentazione collegata
(Codice).
[Slide e appunti].
[T1] 4.2.
Video
|
| 27/10-02/11/2025 |
Algoritmi con approccio incrementale (descrizione, pseudocodice, analisi):
HeapSort.
[Slide e appunti]
[T1] 4.3.
Video
|
Algoritmi con approccio divide et impera (descrizione, pseudocodice, analisi):
MergeSort, QuickSort (senza dimostrazione complessità caso medio).
Dimostrazione del lower bound per ordinamento basato su confronti.
[Slide e appunti]
[T1] 4.4, 4.5, 4.1.
Video
|
| 3-9/11/2025 |
Il problema della ricerca.
Alberi binari di ricerca (BST): ricerca, inserimento, cancellazione.
Alberi AVL: definizione, analisi della profondità (con dimostrazione).
[Slide e appunti]
[T1] Cap. 6, fino a 6.2.2 (escluso)
Video
|
Alberi AVL: rotazioni, inserimento e cancellazione; costo delle operazioni.
Esercizi su alberi AVL.
[Slide e appunti]
[T1] 6.1-6.2.
Video
|
| 10-16/11/2025 |
Esercizi d'esame su implementazione di funzioni ricorsive e alberi AVL.
[Appunti].
Video
|
Esercizi d'esame su implementazione di funzioni ricorsive, alberi AVL, equazioni di ricorrenza e algoritmi di
ricerca.
[Appunti].
Video non disponibile per malfunzionamento della rete.
|
| 17-23/11/2025 |
Prova Intermedia.
|
Correzione esercizi della prova intermedia.
Hash tables: introduzione, generalità,
esempi, uniformità semplice.
Risoluzione delle collisioni mediante liste di collisione.
[Slide e appunti]
[T1] Cap. 7, fino a 7.3.1 incluso.
Video della lezione
Video aggiuntivi su esercizi di programmazione in C:
|
| 24-30/11/2025 |
Hash tables: risoluzione delle collisioni mediante indirizzamento aperto;
scansione lineare e hashing doppio.
Costo della scansione nel caso medio per i metodi di scansione lineare e hashing doppio.
Esercizi sulle hash tables.
[Slide e appunti]
[T1] 7.3.2
Video
|
Grafi: generalità e nozioni preliminari.
Strutture dati per la rappresentazione di grafi
(e costo delle operazioni comuni):
liste di adiacenza, matrice di adiacenza.
Algoritmo per la visita generica.
[Slide e appunti]
[T1] Cap. 11, fino a 11.3.1 escluso.
Video
|
| 1-7/12/2025 |
Algoritmi per la visita di grafi e analisi del costo:
in ampiezza, in profondità (iterativo e ricorsivo).
La relazione di raggiungibilità.
Componenti connesse di un grafo non orientato e loro calcolo.
Visita di grafi non connessi.
Componenti fortemente connesse di un grafo orientato e loro calcolo.
Visita di grafi non fortemente connessi.
[Slide e appunti]
[T1] Da 11.3.1 a 11.5.1 incluso.
Video
|
Minimo albero ricoprente, definizione e proprietà.
Regola del ciclo. Regola del taglio.
Algoritmo generico per la costruzione del minimo albero ricoprente
(descrizione).
Algoritmi per il calcolo del minimo albero ricoprente
(descrizione e costo): algoritmi di Kruskal, Prim, Borůvka.
[Slide e appunti]
[T1] Cap. 12, esclusi 12.2.1 e 12.3.1.
Video
|
8-14/12/2025 |
Festa.
|
(Lezione Online).
Cammini minimi: definizione e proprietà.
Distanza tra nodi.
Algoritmo per il calcolo dei cammini minimi a partire dalle
distanze tra i nodi (descrizione e analisi).
Albero dei cammini minimi. Tecnica del rilassamento.
Algoritmo di Bellman-Ford per il calcolo delle distanze (descrizione e analisi).
Esempio di applicazione dell'algoritmo.
[Slide e appunti]
[T1] 13 - 13.3 (incluso).
|
| 15-21/12/2025 |
Ordinamento topologico: definizione e algoritmo
per il calcolo (descrizione e analisi). Algoritmo di Bellman-Ford
per il calcolo
delle distanze in grafi diretti aciclici (descrizione e analisi).
Algoritmo di Dijkstra (descrizione e analisi).
[Slide e appunti]
[T1] 13.3 - 13.5.1 (escluso)
Video
|
Esercizi d'esame. Fine corso.
[Appunti]
Video
|
Esami
Modalità d'esame
L'esame prevede per tutti (indipendentemente dall'anno di iscrizione):
-
Un progetto da realizzare in C (30% del voto finale).
-
Una prova scritta della durata di 2 ore che include 4 quesiti
tra esercizi e domande di teoria (70% del voto finale).
Le date degli appelli sono indicate in fondo alla pagina (appena disponibili).
Progetto
Istruzioni
per la consegna del progetto.
Le date per la discussione del progetto sono indicate insieme agli appelli
d'esame.
Prova intermedia
È prevista una prova scritta intermedia (facoltativa)
che consiste in due esercizi da svolgere in un'ora.
Il voto ottenuto nella prova intermedia è valido per
l'intero anno accademico (fino all'appello straordinario di ottobre
2025). In caso di superamento della prova intermedia (voto maggiore o
uguale a 18) si può decidere, in ogni appello, di svolgere
solo gli ultimi due esercizi della prova scritta (in un'ora di tempo);
in tal caso, il voto finale della prova scritta è ottenuto
come media del voto ottenuto nelle due prove.
Appelli d'esame
Comunicati appena disponibili.
- Prova intermedia:
-
17/11/2025, ore 10.00, aula 4.
-
Testo
-
Risultati
-
Il voto ottenuto potrà essere
usato durante l'intero anno accademico
(fino a ottobre 2026) in
sostituzione dei primi due esercizi d'esame (il voto finale sarà ottenuto come media).
-
Per visionare l'elaborato, inviare un'email al docente entro il 24/12/2025.
-
I appello: 21/01/2026, ore 10.30, aula da definire.
-
Discussione progetti:
04/02/2026, a partire dalle ore 9.00, da remoto (link meet: meet.google.com/apz-qafs-uoe)
(necessario prenotarsi tramite form per il ricevimento, v. istruzioni per ricevimento).
Programma
delle presentazioni.
-
Testo
-
Risultati
-
Discussione elaborati: inviare un'email al docente entro il 30 gennaio 2026.
-
II appello: 20/02/2026, ore 10.30, aula 2.
-
Discussione progetti:
03/03/2026, a partire dalle ore 9.30, da remoto (v. istruzioni per ricevimento, necessario registrarsi tramite form per il ricevimento).
Programma
delle presentazioni.
-
Testo
-
Risultati
-
Discussione elaborato: inviare un'email al docente entro il 2/3/2026
-
Per accettare il voto (solo se si sono superati lo scritto e la prova di progetto) compilare
questo form (necessario autenticarsi con utenza istituzionale @studenti.uniroma1.it).
Scadenza per accettazione: 5 marzo 2026.
-
I appello straordinario: 31/03/2026, ore 10.30, aula da definire.
-
Riservata alle categorie di studenti indicate nell'art.40, comma 6 del Manifesto Generale degli Studi.
-
Discussione progetti:
09/04/2026, a partire dalle ore 9.30, da remoto (v. istruzioni per ricevimento, necessario registrarsi tramite form per il ricevimento).
Programma
delle presentazioni.
-
III appello: 09/06/2026, ore 10.30, aula da definire.
-
Discussione progetti:
23/06/2026, a partire dalle ore 9.30, da remoto (v. istruzioni per ricevimento, necessario registrarsi tramite form per il ricevimento).
Programma
delle presentazioni.
-
IV appello: 07/07/2026, ore 10.30, aula da definire.
-
Discussione progetti:
21/07/2026, a partire dalle ore 9.30, da remoto (v. istruzioni per ricevimento, necessario registrarsi tramite form per il ricevimento).
Programma
delle presentazioni.
-
V appello: 15/09/2026, ore 10.30, aula da definire.
-
Discussione progetti:
29/09/2026, ore 9.30, da remoto (v. istruzioni per ricevimento, necessario registrarsi tramite form per il ricevimento).
Programma
delle presentazioni.
-
II appello straordinario: 13/10/2026, ore 10.30, aula da definire.
- Riservato alle categorie di studenti indicate nell'art.40, comma 6 del Manifesto Generale degli Studi e agli studenti fuori corso, iscritti per l'A.A. 2025/2026 al terzo anno della laurea e al secondo anno della laurea magistrale.
-
Discussione progetti:
27/10/2026, ore 9.30, da remoto (v. istruzioni per ricevimento, necessario registrarsi tramite form per il ricevimento).
Programma
delle presentazioni.