ADVANCED COMPUTER SCIENCE - MOD. 2
- Anno accademico
- 2025/2026 Programmi anni precedenti
- Titolo corso in inglese
- ADVANCED COMPUTER SCIENCE - MOD. 2
- Codice insegnamento
- CM0604 (AF:577049 AR:323780)
- Lingua di insegnamento
- Inglese
- Modalità
- In presenza
- Crediti formativi universitari
- 6 su 12 di ADVANCED COMPUTER SCIENCE
- Livello laurea
- Laurea magistrale (DM270)
- Settore scientifico disciplinare
- ING-INF/05
- Periodo
- II Semestre
- Anno corso
- 1
- Sede
- VENEZIA
- Spazio Moodle
- Link allo spazio del corso
Inquadramento dell'insegnamento nel percorso del corso di studio
Risultati di apprendimento attesi
Il laureato/la laureata magistrale:
- conosce le metodologie di progettazione e sviluppo di sistemi informatici relativi a Data Engineering;
- conosce le tecniche per la valutazione delle prestazioni, della scalabilità, e dell'affidabilità di software e algoritmi per analizzare dati massivi;
- sviluppa le proprie competenze nell'ambito della programmazione acquisendo padronanza delle tecniche di calcolo e la conoscenza di algoritmi, allo stato dell'arte;
- conosce ambienti di programmazione e algoritmi per l’analisi di dati massivi;
Capacità di applicare conoscenza e comprensione
Il laureato/la laureata magistrale:
- è in grado di progettare e sviluppare sistemi per la memorizzazione, gestione e analisi di dati su larga scala;
- è in grado di progettare e valutare sistemi altamente scalabili;
- è in grado di usare tecniche di programmazione avanzata negli ambiti del calcolo ad alte prestazioni e algoritmi per l'analisi di elevate moli di dati;
- è in grado di verificare i requisiti funzionali e non funzionali (prestazioni) di un algoritmo;
- è in grado di accedere alla letteratura scientifica per individuare potenziali soluzioni a problemi con metodi innovativi allo stato dell'arte.
Capacità di giudizio:
Al termine del corso lo studente sarà in grado di utilizzare le conoscenze acquisite per:
- Identificare l'algoritmo e la struttura dati più adatta a risolvere una determinata problematica nell'ambito dei massive data.
- Analizzare in modo rigoroso le performance di algoritmi randomizzati (runtime, approssimazione, probabilità di successo).
- Leggere e comprendere in modo indipendente articoli di ricerca nel settore.
- Implementare algoritmi esistenti e progettarne di nuovi.
Prerequisiti
- Teoria della probabilità (argomenti trattati in CT0675)
- Algoritmi e strutture dati (argomenti trattati in CT0667)
- Programmazione, preferibilmente in C/C++ (argomenti trattati in CT0665 e CT0664)
- Matematica discreta (argomenti trattati in CT0434)
Contenuti
- Introduzione. Basi di teoria dell'informazione (Worst-case Entropy, statistical entropy, compressione dati)
- strutture compresse per insiemi e stringhe (sorted integers, Elias-Fano, zero-order compressed bitvectors, wavelet trees)
- Compressed suffix array
- FM-index
(2) algoritmi e strutture dati lossy
2.1 Ripasso di teoria delle probabilità
- definizioni di base, concentration bounds
- Hashing
2.2 Filtri
- Bloom filters, counting Bloom filters
- Quotient filters
2.3 Similarity-preserving sketching
- Rabin hashing, Shingling
- MinHash (Jaccard distance), permutazioni Min-wise.
- locality-sensitive hashing
- nearest neighbor search
2.4 Pattern matching su streams
- Pattern matching & streaming, algoritmo di Karp-Rabin
- Algoritmo di Porat-Porat
- Estensioni ad approximate pattern matching (Hamming distance)
2.5 Sketching su streams
- Stima delle frequenze su uno stream: sampling, count-min sketch, Misra-Gries sketch
- Stima degli elementi distinti (momento di frequenza zero): Flajolet-Martin sketch
- Stima del numero di eventi (primo momento di frequenza): Morris sketch
- Stima del secondo momento di frequenza: Tug-of-war sketch
- Applicazioni: dimensionality reduction, sketches for relational algebra
Testi di riferimento
- Articoli originali di ricerca forniti durante il corso
Modalità di verifica dell'apprendimento
1. Progetto individuale. Il punteggio massimo ottenibile con il progetto è 15. Lo studente dovrà individuare un problema interessante nell'ambito dell'elaborazione di dati massivi (idealmente utilizzando dati reali) e risolverlo implementando le tecniche discusse a lezione o descritte in articoli di ricerca originali. Il progetto va consegnato nella forma di una relazione pdf. Gli argomenti devono essere in linea con il focus del corso: strutture dati compresse, filtri o algoritmi di sketching/streaming. È possibile utilizzare qualsiasi linguaggio di programmazione, sebbene siano raccomandati C/C++, Rust (e simili) per ragioni di efficienza.
2. Prova orale individuale. La prova va sostenuta obbligatoriamente dopo la consegna del progetto individuale. Il punteggio massimo ottenibile con la prova orale è 20. Obiettivo della prova orale è verificare la conoscenza degli strumenti teorici illustrati durante il corso e discutere la soluzione del progetto individuale.
Modalità di esame
Graduazione dei voti
- accuratezza della soluzione, uso di risorse computazionali, qualità della relazione (range 80%),
- originalità della soluzione (range 20%).
Prova orale (massimo 20 punti, sufficienza: 12/20):
- conoscenze (enunciati e dimostrazioni dei risultati teorici) e capacità di applicare le conoscenze nella soluzione di esercizi (range 40%),
- dettaglio e completezza delle risposte (range 40%),
- capacità di comunicazione, compreso l'uso di terminologia specifica relativa ad algoritmi e strutture di dati per dati massivi (range 20%).
Entrambe le parti devono risultare sufficienti. La valutazione finale è data dalla somma delle valutazioni del progetto e della prova orale. La lode verrà assegnata agli studenti che abbiano ottenuto una somma di almeno 34 punti nelle due prove.