25 | 31-01-2020
Esercitazione. |
24 | 27-01-2020
Introduzione alle Cryptocurrencies: cenni alle funzioni hash crittografiche e il loro ruolo nei sistemi di criptovalute. Cenni alle reti peer-to-peer. Il sistema Bitcoin e la sua Blockchain. (Il codice sorgente di Bitcoin è liberamente scaricabile qui: https://github.com/bitcoin/bitcoin). Esercizi. |
23 | 24-01-2020
[Guest lecture by Sara Rizzo] Cascate informative: un esperimento di herding, modello generale e analisi del processo sequenziale. Processi di diffusione nelle reti: modello di un processo di diffusione, caratterizzazione cascate complete e cluster. Esercizi. |
22 | 20-01-2020
Cenni al World Wide Web e al funzionamento di un motore di ricerca: Crawling, Indexing e il problema del Ranking. Il PageRank e sua formulazione come Random Walk. Introduzione alle catene di Markov e al loro utilizzo nell'analisi di algoritmi probabilistici. Esempio: analisi di un semplice algoritmo probabilistico per 2-SAT. ([2]: Cap 7.1). Esercizi. |
21 | 17-01-2020
Metodi Monte Carlo per la stima di parametri. Campionamento casuale (sampling) e conteggio, cenni alla classe #P. Esempio: Un FPRAS (Fully Polynomial-time Randomized Approximation Scheme) per il problema del conteggio delle assegnazioni che soddisfano una formula in DNF. ([2]: Cap. 11.1, 11.2). Esercizi. |
20 | 13-01-2020
Esercitazione. |
19 | 20-12-2019
Il Metodo Probabilistico: il conteggio di base e il metodo del valore atteso. Cenni alla tecnica di derandomizzazione tramite medie condizionate ([2]: Cap. 6.1 - 6.4). Esercizi. |
18 | 16-12-2019
Permutation Routing sugli ipercubi: lower bound per la procedura BitFix e analisi dell'algoritmo probabilistico ([2]: Cap. 4.6). Esercizi. |
17 | 09-12-2019
Stime del discostamento di una variabile aleatoria dal suo valore atteso. La disuguaglianza di Markov. La varianza di una variabile aleatoria e la disuguaglianza di Chebyshev. Somme di variabili aleatorie indipendenti e le disuguaglianze di Chernoff ([2]: Cap. 3.1, 3.2, 3.3, 4.1, 4.2). Esercizi. |
16 | 06-12-2019
Test di primalità probabilistici polinomiali. Il test di Fermat. Richiami di teoria elementare dei numeri: radici non-banali dell'unità. Il test di Miller-Rabin. Il codice scritto in aula (primes.py) corretto e commentato. ([1]: Cap. 1.3. Per approfondire si veda [4]: Cap. 13.8). Esercizi. |
15 | 02-12-2019
Esercitazione. |
14 | 29-11-2019
Valore atteso di una variabile aleatoria e linearità. Esempio: Analisi del numero atteso di confronti dell'algoritmo Random Quick Sort. Il problema Contention Resolution ([2]: Cap. 2.5 e [3]: Cap. 13.1). Esercizi |
13 | 25-11-2019
Introduzione agli algoritmi probabilistici. Esempio: un algoritmo probabilistico per verificare il prodotto di matrici. Variabili aleatorie e valore atteso: la distribuzione geometrica. ([2]: Cap. 1.3, 2.4. Per un ripasso di probabilità dicreta si vedano, per esempio, i primi due capitoli in [2]). Esercizi. |
12 | 22-11-2019
I problemi computazionalmente difficili come risorsa: I fondamenti della crittografia a chiave pubblica, il protocollo di Diffie-Hellman per la generazione di una chiave condivisa e il sistema di cifratura RSA. Cenni a One-time pad, cifrari a blocchi, AES. ([1]: Cap. 1.2 e 1.4). Esercizi. |
11 | 18-11-2019
Euristiche di ricerca locale. Esempio: Ricerca locale per Min Vertex Cover. Cenni a Simulated annealing. Ricerca locale con fattore di approssimazione garantito. Esempio: Un algoritmo approssimante per Max-Cut ([1]: Cap. 9.3, e [3]: Cap. 12.4). Esercizi. |
10 | 15-11-2019
Esercitazione. |
9 | 11-11-2019
Affrontare i problemi computazionalmente difficili: 2. Algoritmi Approssimanti. Esempio: un algoritmo 2-approssimante per il problema k-clustering. Approssimazioni arbitrariamente buone. Esempio: un FPTAS (Fully Polynomial-Time Approximation Scheme) per il problema Knapsack ([1]: Cap. 9.2, [3]: Cap. 11.8). Esercizi. |
8 | 08-11-2019
Affrontare i problemi computazionalmente difficili: 1. Ricerca esaustiva intelligente. Le tecniche: Backtracking e Branch-and-bound. Esempi: Un algoritmo per SAT e un algoritmo per TSP ([1]: Cap. 9.1). Esercizi. (Se vi dovesse venire in mente un'idea promettente per risolvere istanze di SAT, considerate la possibilità di partecipare alla prossima edizione di questo evento) |
7 | 04-11-2019
Il running time dell'algoritmo di Ford e Fulkerson. La variante con capacity scaling per rendere l'algoritmo polinomiale. ([3]: Cap. 7.3). Esercizi. |
6 | 28-10-2019
L'algoritmo di Ford e Fulkerson per Max-Flow: correttezza, running time e ottimalità. ([1]: Cap. 7.2. Si veda anche [3]: Cap. 7.1 e 7.2). Esercizi. |
5 | 25-10-2019
Esercitazione. (Il codice scritto in aula per l'Esercizio 5: travasi.py) |
4 | 21-10-2019
La tecnica della Riduzione. Esempi: Un algoritmo lineare per 2-SAT ottenuto tramite riduzione al problema di scomporre un grafo diretto in componenti fortemente connesse e DAG delle componenti. Richiami su grafi diretti, DAGs e topological sorting. Introduzione al problema Max Flow ([1]: Esercizio 3.28 e inizio Cap. 7.2). Esercizi. |
3 | 14-10-2019
La tecnica della Programmazione Dinamica. Esempi: Un algoritmo per Chain matrix multiplication e un algoritmo per Independent set su alberi. ([1]: Cap. 6.5, 6.7). Esercizi. |
2 | 11-10-2019
La tecnica Divide et Impera. Esempio: l'algoritmo di Karatsuba per moltiplicare due interi. Cenni all'algoritmo di Strassen per la moltiplicazione di matrici. Richiami sulle relazioni di ricorrenza e sul Teorema Master. ([1]: Cap. 1.1, 2.1, 2.2, 2.5). Esercizi. |
1 | 07-10-2019
Introduzione al corso, descrizione del programma di massima. La tecnica Greedy. Esempio: Un algoritmo greedy per decidere la soddisfacibilità delle formule di Horn ([1]: Cap. 5.3. Per un ripasso sulla tecnica greedy si veda, per esempio, il Capitolo 4 su [3]). Esercizi. |