DATI E ALGORITMI (A) 2025-2026 - INQ1097771
Schema della sezione
-
-
Aperto: mercoledì, 19 novembre 2025, 09:00
-
Ended: giovedì, 20 novembre 2025, 11:00
-
Ended: mercoledì, 10 dicembre 2025, 19:15
-
-
Aperto: venerdì, 14 novembre 2025, 00:00Data limite: lunedì, 12 gennaio 2026, 12:00
-
Lezione 1: 30/09/25
- Introduzione al corso
- Concetti fondamentali: problema computazionale, algoritmo, modello di calcolo
Lezione 2: 01/10/25
- Concetti fondamentali: pseudocodice
- Esempio (trasposta).
- Concetti fondamentali: taglia dell'istanza, struttura dati.
- Analisi di algoritmi: complessità e correttezza.
-
Definizione della funzione complessità e analisi asintotica.
Lezione 3: 02/10/25
-
Ordini di grandezza O-grande, Omega-grande, Theta-grande, o-piccolo.
-
Proprietà degli ordini di grandezza.
-
Strumenti matematici (parte bassa e alta, sommatorie notevoli).
-
Analisi di complessità: procedimento per provare limiti superiori e inferiori alla complessità.
-
Esempi (PrefixAverages quadratico e lineare).
Lezione 4: 07/10/25
-
Esercizio simile a R-4.29 del testo.Complessità polinomiale vs complessità esponenziale: esempio: RSA.
-
Caveat relativi all'analisi asintotica al caso pessimo.
- Induzione: tecnica generale; esempio (serie di Gauss).
Lezione 5: 08/10/25- Induzione: esempio di induzione fallace (F( n)=0 per ogni n).
- Analisi di correttezza: approccio generale.
- Invarianti: definizione; utilizzo di un invariante per provare la correttezza di un ciclo; esempi (arrayMax e arrayFind).
- Algoritmi ricorsivi: definizione; esempi (MergeSort, linearSum, reveseArray)
Lezione 6: 09/10/25
- Albero della Ricorsione: definizione; esempi (MergeSort, linearSum, reveseArray)
- Gestione della memoria nell'esecuzione di un algoritmo ricorsivo: stack e heap
- Analisi di complessità di un algoritmo ricorsivo tramite l'Albero della Ricorsione ed esempi (linearSum e reverseArray).
- Calcolo di potenze: algoritmo power e sua applicazione al calcolo dell'n-esimo numero di Fibonacci (powerFib).
- Analisi di correttezza di un algoritmo ricorsivo tramite induzione ed esempi (linearSum).
Lezione 7: 14/10/25
- Esercizi dalle Slide 48-49, 77, 79 sulle nozioni di base
Lezione 8: 15/10/25
- Esercizi dalle Slide 78 (secondo esercizio), 101 (secondo esercizio), 103 sulle nozioni di base
Lezione 9: 16/10/25
- Invariante per l'esercizio sulla maggioranza (Slide 103 sulle nozioni di base)
Materiale:
- Slide sulle nozioni di base (v. 13/10/25 )
- Albero della ricorsione di MergeSort
- Slide di Esercizi sulle Nozioni di Base (v. 15/10/25)
- Slide sull'algoritmo lineare per la maggioranza (v.16/10/25)
- Dispensa: Specifica di Algoritmi in Pseudocodice
- Esercizi svolti sulle nozioni di base (v. 17/10/25)
- Libro di testo [GTG14]: Paragrafi 1.8.2, 2.1.2, e Capitoli 4 e 5
- Esercizi consigliati del libro di testo: R-4.2; R-4.7; R-4.10; R-4.12; R-4.14; R-4.16; R-4.21; R-4.31; R-5.6; C-4.35; C-4.43; C-4.45; C-4.46; C-5.10; C-5.18; C-5.20
-
Lezione 9: 16/10/25
- Java: programma stand-alone; modularity; information hiding; Abstract Data Type (ADT); interfacce e classi; ereditarietà: programmazione generica.
- ADT elementari: Lista (index-based e position-based); Pila; Coda.
- Java Collection Framework e API di Java (package java.util)
Materiale:
- Slide su Ripasso Java (v. 16/10/25)
- Esempi di codice Java (cartella zippata) (v. 15/10/25)
- Libro di testo [GTG14]: Capitoli 1, 2 e 7. Per gli iteratori, fare referimento ai Paragrafi 7.4 e 7.5 del testo.
-
Lezione 9: 16/10/25
- Alberi: applicazioni; definizioni; terminologia.
Lezione 10: 21/10/25
- Alberi: applicazioni; definizioni; terminologia.
- Dimostrazione Proposizione 8.3 del testo (esercizio R-8.2)
- Interfacce: Iterator, Iterable e Tree
- Calcolo della profondità di un nodo (algoritmi ricorsivo e iterativo);
- Calcolo dell'altezza di un nodo e di un albero;
- Proposizione 8.4 del testo.
Lezione 11: 22/10/25
-
Visite in preorder e postorder (pseudocodici, analisi ed esempi).
- Algoritmi AllDepths e DiskSum.
- Alberi binari: definizione; interfaccia.
- Alberi binari propri: definizione; relazioni tra foglie, nodi interni, nodi e altezza.
Lezione 12: 23/10/25
- Alberi binari propri: dimostrazione delle relazioni tra foglie, nodi interni, nodi e altezza; visita inorder.
- Parse Tree di un'espressione.
- Rappresentazione infissa e postfissa (polacca inversa) di una espressione e uso della rappresentazione postfissa.
- Algoritmi infix e postfix per la generazione di una espressione a partire dal suo Parse Tree, in rappresentazione rispettivamente infissa e postfissa.
Lezione 13: 28/10/25
- Esercizi: calcolo altezza tramite max profondità di una foglia e algoritmo LCA (Slide 60 sugli Alberi Generali); algoritmo allLiveAncestors (Slide 61 sugli Alberi Generali); relazione tra foglie e nodi interni quando ogni nodo interno ha >= 2 figli e algoritmo preorderNext (Slide 44 sugli Alberi Binari).
Lezione 14: 29/10/25- Esercizi: algoritmi heightSum, All3Balanced, e maxOnHeight (Slide 37-43, 45 e 46 sugli Alberi Binari);
- Cenni sulla implementazione in Java di Alberi Generali e Binari.
Materiale:
- Slide sugli Alberi Generali (v. 23/10/25)
- Slide sugli Alberi Binari (v. 30/10/25)
- Slide di Esercizi sugli Alberi (v. 30/10/25)
- Implementazione Java di Alberi Binari (cartella zippata) (v. 29/10/25)
- Esercizi svolti sugli Alberi (v. 08/11/25)
- Libro di testo [GTG14]: Ch. 8 (Par. 8.1, 8.2, 8.3.1, 8.4.1, 8.4.3-8.4.5).
- Esercizi consigliati dal libro di testo: R-8.3; R-8.4: R-8.6; R-8.19; C-8.24; C-8.25; C-8.27; C-8.39; C-8.41; C-8.50; C-8.52.
-
Lezione 14: 29/10/25
- Definizione di Priority Queue; Interfacce Entry(K,V) e PriorityQueue(K,V); applicazioni reali.
Lezione 15: 04/11/25
- Implementazione di una Priority Queue tramite liste (ordinate e non).
- Heap: definizione; proprietà; realizzazione tramite array (level numbering).
- Esercizi: relazione tra array ordinato e heap; esercizio R-9.15 del testo.
Lezione 16: 05/11/25- Implementazione di min e insert tramite heap su array (pseudocodice e analisi).
- Implementazione di removeMin tramite heap su array (pseudocodice e analisi).
- Construzione di uno Heap a partire da un array P di n entry: approccio top-down (pseudocodice e analisi)
Lezione 17: 06/11/25- Construzione di uno Heap a partire da un array P di n entry: approccio bottom-up (pseudocodice e analisi).
- pqSort: SelectionSort, InsertionSort, HeapSort come casi particolari.
- Implementazione in-place di HeapSort
Lezione 18: 11/11/24- Esercizi: esercizio dalla Slide 58, algoritmi Top(S,tau) (dalle Slide 7,8, e 74), removeEntry(P,ell) (dalla Slide 59), Print (T,i,k) (dalla Slide 68 - esercizio C-9.34 di [GTG14]).
Lezione 19: 12/11/25- Implementazione delle Priority Queue in Java: classe PriorityQueue<E>
Materiale:
- Slide sulle Priority Queue (v. 06/11/25)
- Slide di Esercizi sulle Priority Queue (v. 11/11/25)
- Esercizi svolti sulle Priority Queue (v. 21/11/25)
- Libro di testo [GTG14]: Ch. 9 (Par. 9.1-9.4).
- Esercizi consigliati dal libro di testo: R-9.1; R-9.9: R-9.10; R-9.12; R-9.13; R-9.15; R-9.16; R-9.17; R-9.18; R-9.19; R-9.23; C-9.30; C-9.32; C-9.34; C-9.36; C-9.37; C-9.38; C-9.39.
-
Lezione 19: 12/11/25
- Definizione di Mappa; applicazioni; interfaccia Map.
- Implementazione di una Mappa tramite lista position-based o array di taglia |U|, con la complessità dei metodi get, put e remove.
- Tabelle Hash: ingredienti principali; nozione di uniform hashing; scelta dell'hash code; scelta della compression function; risoluzione collisioni tramite separate chaining; cenni su open addressing.
Lezione 20: 13/11/25- Tabelle Hash: implementazione dei metodi get(k), put(k,x) e remove(k); definizione di load factor; complessità dei metodi get(k), put(k,x) e remove(k) al caso pessimo e a caso medio in funzione del load factor; analisi del costo medio di ricerca di una chiave non presente in una tabella hash; rehashing con analisi ammortizzata.
- Alberi Binari di Ricerca (ABR): definizione; proprietà della vista in-order; metodo TreeSearch(k,v) e sua complessità; implementazione del metodo get(k) e sua analisi.
Lezione 21: 18/11/25- Alberi Binari di Ricerca (ABR): implementazione dei metodi della mappa put(k,x) e remove(k), e loro analisi.
- Esercizi: versione iterativa di TreeSearch.
- Multi-Way Search Tree: definizione ed esempi; Proposizione 11.2 (ed esercizio C-11.46) del testo; metodo MWTreeSearch(k,v).
Lezione 22: 19/11/25- Multi-Way Search Tree: metodo get(k); analisi di MWTreeSearch(k,v) e get(k) in funzione dell'altezza h e del massimo numero di figli di un nodo dmax.
- (2,4)-Tree: definzione, altezza (Proposizione 11.3 del testo) e complessità del metodo get(k).
- Implementazione del metodo put(k,x) (con Split) e sua complessità.
- Esempi di esecuzione di put(k,x) su un (2,4)-Tree.
- Metodo remove(k): idea.
Lezione 23: 20/11/25
- Metodo remove(k): pseudocodice; descrizione di Delete; esempi; analisi della complessità.
- Red-Black Tree: definizione; relazione con il (2,4)-Tree; altezza e complessità dei metodi get, put e remove (senza dimostrazione).
- Multimappa: definizione; motivazione; specifica dei metodi get(k), put(k,v), remove(k,v); implementazione tramite Mappa e Lista position-based.
Lezione 24: 25/11/25
- Multimappa: esempio di applicazione dei metodi; complessità dei metodi.
- Esercizi: algoritmo 24Height (Slide 83 - Parte 2); algoritmo CountLE con variabili size (Slide 73 - Parte 1) e con/senza metodo T.size (primi due esercizi di Slide 81 - Parte 1); algoritmo MinPositive (secondo esercizio di Slide 80 - Parte 1).
Lezione 25: 26/11/25
- Esercizi: algoritmo MinMatStraniero (Slide 82 - Parte 1); algoritmo MostFrequentWord (Slide 5 - Parte 1, e Slide 87 - Parte 2); algoritmo 24TreeMergeEq (primo esercizio di Slide 88 - Parte 2); cenni sulla generalizzazione di 24TreeMergeEq al caso di alberi con altezze differenti (secondo esercizio di Slide 88 - Parte 2).
Materiale:- Slide sulle Mappe (Parte 1) (v. 25/11/25)
- Slide sulle Mappe (Parte 2) (v. 25/11/25)
- Slide di Esercizi sulle Mappe (v. 27/11/25)
- Esercizi svolti sulle Mappe (v. 09/12/25)
- Libro di testo [GTG14]: Ch. 10 (Par. 1, 2 (tranne open addressing), 5.3), Ch 11 (Par. 11.1, 11.4).
- Esercizi consigliati dal libro di testo: R-10.4; R-10.5; C-10.42, R-11.1; R-11.2; R-11.5; R-11.13; R-11.15; R-11.17; R-11.18a; R-11.20a; R-11.20d; C-11.31; C-11.44; C-11.46.
-
Lezione 26: 27/11/25
- Definizione di grafo; terminologia; esempi applicativi
- Concetti fondamentali: cammino, ciclo, grafo connesso, subgraph, spanning subgraph, albero (rooted, free e loro equivalenza), spanning tree/forest.
- Proprietà dei grafi: Proposizioni 14.8, 14.10, 14.11 ed esercizio C-14.34 del testo.
- Rappresentazione di grafi: strutture di base L_E e L_V; liste di adiacenza; matrice di adiacenza.
Lezione 27: 02/12/25
- Visite (traversal): nozione di visita.
- Algoritmo BFS: pseudocodice; esempio; proprietà; analisi di complessità; estensione della visita a tutto il grafo.
Lezione 28: 03/12/25
- Applicazioni della BFS: connettività, spanning tree, cammini minimi, ciclicità.
- Algoritmo DFS: pseudocodice; esempio; proprietà; analisi di complessità.
Lezione 29: 04/12/25- Algoritmo DFS: proprietà; analisi di complessità.
- Esercizi: algoritmo ReachablePairs (Slide 82 - Parte 1); MaxSeparation (Slide 24 e 90 - Parte 1); IsBipartite (Slide 90, secondo esercizio - Parte 1).
Lezione 30: 09/12/25- Esercizi: algoritmo IsBipartite (Slide 90, secondo esercizio - Parte 1); esercizio dalla Slide 87 - Parte 1.
- Cammini minimi pesati: definizioni di grafo pesato, lunghezza di un cammino, e cammino minimo; proprietà dei cammini minimi;
- Problema dei Single-Source Shortest Paths (SSSP).
- Algoritmo di Dijkstra: strategia ad alto livello e pseudocodice; esempio.
Lezione 31: 10/12/25- Algoritmo di Dijkstra: analisi di correttezza; analisi di complessità implementando Q con Heap, Lista (e con Fibonacci Heap ma senza prova).
- Grafi Diretti: terminologia (grado uscente/entrante, cammino/ciclo diretto, vertici raggiungibili da un vertice v, versione non diretta di un grafo diretto, nozione di grafo fortemente/debolmente connesso); proprietà relative alla somma dei gradi uscenti/entranti; rappresentazione tramite liste di adiacenza.
- BFS e DFS di grafi diretti: esempi
Lezione 32: 11/12/25- BFS e DFS di grafi diretti: complessità e proprietà.
- Esercizio: identificazione dei BACK EDGE nella DFS diretta (Slide 67 - Parte 2).
- Grafi diretti aciclici (DAG=Directed Acyclic Graph): definizione e ordinamento topologico.
- Algoritmo TopologicalSort(G): esempio; analisi di di complessità.
- Esercizio: identificazione di un ciclo in un grafo diretto (Primo esercizio di Slide 75 - Parte 2)
Lezione 33: 16/12/25- Esercizi: modifica di ShortestPaths per grafi non connessi (Slide 42 - Parte 2); trasformazione di un grafo non diretto in un DAG (terzo esercizio Slide 92 - Parte 2); scheduling di task tramite TopologicalSort (Slide 93 - Parte 2).
Materiale:
- Slide sui Grafi - Parte 1 (v. 09/12/25)
- Slide sui Grafi - Parte 2 (v. 16/12/25)
- Slide di Esercizi sui Grafi - Parte 1 (v. 09/12/25)
- Slide di Esercizi sui Grafi - Parte 2 (v. 16/12/25)
- Esercizi svolti sui Grafi (v. 22/12/25)
- Libro di testo [GTG14]: Ch. 14 (Par. 1, 2, 3, 5, 6)
- Esercizi consigliati dal libro di testo: R-14.1; R-14.2; R-14.14; C-14.34; C-14.37; C-14.40; C-14.46; C-14.47; C-14.49; C-14.52; C-14.53; C-14.56; C-14.5
-
Lezione 33: 16/12/25
- Introduzione al problema dell'ordinamento. Definizione di algoritmo basato su confronti. Design Pattern Divide and Conquer.
- MergeSort: MergeSort (pseudocodice); Merge (pseudocodice); complessità di Merge; complessità di MergeSort.
- QuickSort: strategia generale; QuickSortInPlace (pseudocodice).
Lezione 34: 17/12/25- QuickSort: Partition (pseudocodice, correttezza, complessità); complessità di QuickSortInPlace tramite Albero della Ricorsione.
- Randomized QuickSort: differenze rispetto a QuickSortInPlace.
- Complessità probabilistica di Randomized QuickSort (alta probabilità e media).
- InsertionSort: algoritmo in place; definizione di inversione; analisi in funzione della taglia dell'input e del numero di inversioni.
Lezione 35: 18/12/25- Lower bound sulla complessità di un qualsiasi algoritmo di ordinamento basato su confronti (senza prova).
- BucketSort: pseudocodice e analisi di complessità.
- Nozione di ordinamento stabile.
- RadixSort: algoritmo; analisi di complessità e di correttezza.
- Caso di studio: ordinamento dei cittadini italiani per codice fiscale.
Lezione 36: 23/12/25
- Dimostrazione del lower bound sulla complessità di un qualsiasi algoritmo di ordinamento basato su confronti
- Esercizi: ordinamento di n chiavi in [0,n^2-1] (Slide 86 e C-13.39 di [GTG14]); algoritmo CountIntersection per l' intersezione di 2 sequenze ordinate (primo esercizio di Slide 21); ordinamento di una sequenza di n bit (primo esercizio di Slide 43); calcolo del numero di inversioni tramite MergeSort (secondo esercizio di Slide 21)
Materiale:
- Slide sull'Ordinamento (v. 05/01/26)
- Slide di Esercizi sull'Ordinamento (v. 23/12/25)
- Esercizi svolti sull'Ordinamento (v. 30/12/25)
- Libro di testo [GTG14]: Par. 9.4.1 e Ch. 13 (Par. 1, 2, 3, 4)
- Esercizi consigliati dal libro di testo: R-13.1; R-13.2; R-13.3; R-13.6; R-13.8; R-13.9; C-13.29; C-13.32; C-13.33; C-13.34; C-13.35; C-13.36; C-13.37; C-13.38; C-13.39; C-13.40; C-13.42; C-13.45; C-13.46; C-13.48.
-
Lezione 37: 08/01/26
- Domande (D) ed esercizi (E) dagli esempi di esami scritti (S): S6 D1; S2 D2; S3 D3; S1 D4; S1 E1; S5 E1; S4 E2.
- Selezione di domande dai Quiz sulle nozioni di base e sugli alberi
Materiale:
- Slide della Lezione dell'08/01/26 (v. 13/01/26)