Algoritmi e Strutture Dati (6 CFU)
Informazioni Generali
Il corso introduce gli algoritmi e le strutture dati utilizzate
nella risoluzione di problemi fondamentali, presentando
principi e tecniche che ne permettono l'analisi sistematica.
L'obiettivo è fornire allo studente gli strumenti per progettare soluzioni algoritmiche corrette
ed efficienti ed individuare, in presenza di varie
alternative, la soluzione più adatta ad un problema.
Corso impartito dal 25 settembre 2018 al 19 dicembre 2018
Le lezioni si terranno martedì 14.00-17.00 e mercoledì 10.00-13.00
in aula 7, presso la sede di Latina, in via A. Doria 3
Ricevimento studenti:
per appuntamento, inviare un'email.
Programma d'esame
- Algoritmi e strutture dati: generalità ed esempi.
Introduzione alla nozione di costo (tempo e spazio di memoria).
- 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 (pile, code, alberi) e loro implementazioni. Algoritmi di visita di un albero.
- Algoritmi di ordinamento incrementali (descrizione, implementazione e analisi):
SelectionSort, InsertionSort, BubbleSort, HeapSort, MergeSort, QuickSort.
Lower bound sul costo dell'ordinamento per modello basato su confronti.
- Algoritmi di ordinamento di interi (descrizione, implementazione e analisi):
IntegerSort, BucketSort, RadixSort.
- Tipo di dato Dizionario. Alberi di ricerca binari. Alberi AVL.
- Tavole 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 e Ford,
calcolo dei cammini minimi a sorgente singola su grafi aciclici,
algoritmo di Dijkstra.
- Esercizi su tutti gli argomenti in programma.
News
- 25 settembre 2018: Inizio corso
Materiale Didattico
Libro di Testo
[T1] C. Demetrescu, I. Finocchi, G. F. Italiano: Algoritmi e strutture dati, McGraw-Hill, seconda edizione (
sito web)
Slides
Diario delle Lezioni
Settimana |
Martedì |
Mercoledì |
24-30/09/2018 |
Inizio corso.
Introduzione agli algoritmi e loro costo. Numeri di Fibonacci.
[T1] 1.1-1.4
|
Notazione asintotica O-grande, Omega-grande, Theta-grande.
Esempi.
Limitazione inferiore e superiore al costo di un algoritmo.
Teorema sull'andamento asintotico di un polinomio con dimostrazione [Slide e appunti].
Esercizi sulla notazione asintotica [Slide e appunti].
[T1] 1.5 - 1.7, 1.10, 2.1 - 2.2, 2.3.
|
1-7/10/2018 |
Metodi di analisi (caso peggiore, caso migliore, caso medio).
Ricerca sequenziale iterativa: descrizione e analisi.
Ricerca binaria iterativa: descrizione e analisi.
Soluzione di equazioni di ricorrenza: metodo dell'albero della ricorsionee
e metodo della sostituzione.
Principio di induzione matematica ed
esempio di applicazione (formula di Gauss per la somma dei primi n interi) [Slide e appunti].
[T1] 2.4 - 2.5.1, 2.5.2.
|
Strategia Divide et Impera.
Soluzione di equazioni di ricorrenza: teorema Master con dimostrazione.
Esempi di applicazione del teorema Master.
[T1] 2.5.3.
|
8-14/10/2018 |
Introduzione ai tipi di dato astratto.
Il tipo di dato Dizionario, Pila e Coda.
Tecniche di rappresentazione dei dati.
Implementazioni indicizzate e collegate di Dizionario e Pila. [Slide e appunti]
[T1] Cap.3 fino a 3.2 incluso.
|
Tipo di dato Albero.
Rappresentazioni indicizzate di alberi:
vettore dei padri; vettore posizionale.
Rappresentazioni collegate di alberi: lista di figli;
primo figlio e fratello successivo.
Visite di alberi: algoritmo di visita generica, con
dimostrazione di terminazione, costo e correttezza.
[T1] 3.3.3, "Visita in profondità" esclusa.
|
15-21/10/2018 |
Visite di alberi (descrizione, pseudocodice, analisi):
in profondità iterativa e ricorsiva, in ampiezza.
Il problema dell'ordinamento. L'approccio incrementale.
Algoritmi con approccio incrementale (descrizione, pseudocodice, analisi):
SelectionSort, InsertionSort, BubbleSort.
Esercizi.
[T1] 3.3.3 da "Visita in profondità", 4.2.
|
Algoritmi con approccio incrementale (descrizione, pseudocodice, analisi): HeapSort.
Introduzione agli algoritmi con approccio divide ed impera: MergeSort.
[T1] 4.3.
|
22-28/10/2018 |
Algoritmi con approccio divide ed impera (descrizione, pseudocodice, analisi):
MergeSort, QuickSort.
[T1] 4.4 - 4.5.
|
Dimostrazione del lower bound per ordinamento basato su confronti.
Algoritmi di ordinamento di interi (descrizione, pseudocodice, analisi):
IntegerSort, BucketSort, RadixSort.
[T1] 4.1, 4.6, 4.7.
|
29/10-04/11/2018 |
Lezione cancellata per allerta meteo.
|
Il problema della ricerca.
Alberi binari di ricerca (BST).
Introduzione agli alberi AVL.
Alberi AVL: analisi della profondità (dimostrazione).
[T1] 6.1, 6.2, fino a 6.2.1 escluso (dimostrazione su appunti e slide).
|
05-11/11/2018 |
|
Alberi AVL: rotazioni, ricerca, inserimento e cancellazione;
analisi del costo delle operazioni.
[T1] 6.2.2 e 6.2.3.
|
12-18/11/2018 |
Tabelle ad accesso diretto. Introduzione alle tabelle hash: generalità,
esempi, funzioni hash, uniformità semplice, collisioni.
[T1] 7.1, 7.2.
|
Tabelle hash: risoluzione delle collisioni
mediante liste di collisione e indirizzamento aperto;
scansione lineare e hashing doppio; costo nel caso peggiore e nel caso medio.
[T1] 7.3.
|
19-25/11/2018 |
Grafi: generalità e nozioni preliminari.
Strutture dati per la rappresentazione di grafi
(e costo delle operazioni comuni):
lista di archi; liste di adiacenza; liste di incidenza; matrice di adiacenza.
[T1] 11.1 - 11.2.
|
Grafi, algoritmi di visita: generico, in ampiezza, in profondità (iterativo e ricorsivo).
[T1] 11.3.
|
26/11 - 2/12/2018 |
La relazione di raggiungibilità, componenti connesse e fortemente connesse, calcolo
delle componenti connesse e fortemente connesse. Visita di grafi non connessi.
Minimo albero ricoprente, definizione e proprietà.
Regola del ciclo. Regola del taglio. Algoritmo generico.
[T1] 11.4 - 11.5 (escluso 11.5.2). capitolo 12, fino a 12.2 (escluso).
|
Dimostrazione di terminazione e correttezza dell'algoritmo generico
per il calcolo del minimo albero ricoprente.
Algoritmi per il calcolo del minimo albero ricoprente (descrizione e analisi di complessità):
algoritmo di Kruskal; algoritmo di Prim; algoritmo di Borůvka.
[T1] capitolo 12, esclusi 12.2.1 e 12.3.1.
|
3-9/12/2018 |
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.
[T1] capitolo 13, fino a 13.2.
|
Algoritmo di Bellman e Ford per il calcolo delle distanze (descirizione e analisi).
Ordinamento topologico: definizione e algoritmo
per il calcolo (descrizione e analisi). Algoritmo per il calcolo
delle distanze in grafi diretti aciclici (descrizione e analisi).
Algoritmo di Dijkstra (descrizioner e analisi).
[T1] capitolo 13, fino a 13.5 (escluso 13.5.1).
|
10-16/12/2018 |
Esercizi d'esame.
|
Esercitazione al calcolatore.
|
17-23/12/2018 |
Esercizi d'esame.
Fine corso.
|
-
|
Esami
Modalità d'esame
L'esame consiste in una prova scritta della durata di 2 ore, che include esercizi e domande
di teoria. Il numero complessivo dei quesiti varia tra
4 e 6, a seconda della difficoltà. Laddove il docente lo ritenga necessario,
potrà convocare gli studenti per una discussione dell'elaborato e per un'evenutale
prova orale integrativa.
È inoltre prevista una prova preliminare all'elaboratore, della durata di 2 ore,
da svolgere in data unica. La partecipazione è opzionale;
il voto ottenuto (massimo 6) sarà sommato al voto ottenuto
nella prima prova d'esame sostenuta.
È possibile beneficiare del voto della prova preliminare solo
negli appelli dell'A.A. 2018/2019.
Appelli d'esame
Saranno pubblicati a breve.
(Per registrarsi all'esame, consultare InfoStud in prossimità dell'appello d'interesse.)
-
Prova preliminare (data unica): 20/12/2018 h.10.00, laboratorio grande
-
I appello: 17/01/2019, aula 1, h. 10.00.
-
Testo
-
Risultati
-
Per la verbalizzazione, inviare un'email al docente entro il 04/02/2019, indicando l'accettazione o il rifiuto del voto.
In mancanza di comunicazioni il voto si intenderà rifiutato.
Per discutere il compito, inviare una mail al docente entro il 04/02/2019.
-
II appello: 15/02/2019, aula 1, h. 10.00.
-
Testo
-
Risultati
-
Per la verbalizzazione, inviare un'email al docente entro il 5/3/2019, indicando l'accettazione o il rifiuto del voto.
In mancanza di comunicazioni il voto si intenderà rifiutato.
Per discutere il compito, inviare una mail al docente entro il 5/3/2019.
-
I appello straordinario: 26/03/2019 h.14.00 aula 8
-
NOTA: Appello riservato a studenti part-time o fuori corso nell'A.A. 2018-2019
-
III appello: 13/06/2019, h.10.00, aula 1.
-
IV appello: 12/07/2019, h. 10.00, aula 1.
-
V appello: 12/09/2019, h.10.00, aula 1.