“Fino a poco tempo fa, i matematici teorici consideravano un problema risolto se esisteva un metodo conosciuto, o algoritmo, per risolverlo; il procedimento di esecuzione dell'algoritmo era di importanza secondaria. Tuttavia, c'è una grande differenza tra il sapere che è possibile fare qualcosa e il farlo. Questo atteggiamento di indifferenza sta cambiando rapidamente, grazie ai progressi della tecnologia del computer. Adesso, è importantissimo trovare metodi di soluzione che siano pratici per il calcolo. La teoria della complessità studia i vari algoritmi e la loro relativa effficienza computazionale. Si tratta di una teoria giovane e in pieno sviluppo, che sta motivando nuove direzioni nella matematica e nello stesso tempo trova applicazioni concrete quali quello fondamentale della sicurezza e identificazione dei dati.”
– E. Bombieri, Medaglia Fields, in La matematica nella società di oggi, Bollettino UMI, Aprile 2001
Introduzione al modello di calcolo, all'analisi e alla complessità degli algoritmi. Algoritmi ricorsivi e relazioni di ricorrenza: divide et impera e programmazione dinamica. Strutture di dati combinatorie con applicazioni: algoritmi per array, liste, alberi, pile, code, code di priorità, dizionari, grafi. Problemi P, NP, NP-completi e approssimazione.
Definire formalmente le nozioni di algoritmo e di modello di calcolo caratterizzandone gli aspetti rilevanti. Organizzare e strutturare i dati da elaborare nel modo più opportuno al fine di agevolarne l'uso da parte degli algoritmi. Progettare algoritmi corretti (che risolvono cioè sempre e solo il problema a cui si è interessati) ed efficienti (cioè che lo risolvono il più velocemente possibile o usano il minor spazio di memoria possibile), attraverso l'esame di paradigmi diversi e problemi provenienti dal mondo reale. Studiare le limitazioni inerenti dei problemi da risolvere, in particolare di quelli la cui soluzione richiede l'esame di tutte le possibilità.
Capitolo 0 (versione elettronica), Capitolo 1 (tranne par.1.3), Capitolo 2 (tranne par.2.2), Capitolo 3 (tranne par. 3.5), Capitolo 4 (più cuckoo hashing), Capitolo 5 (par.5.1, 5.2, 5.3), Capitolo 6 (par. 6.1, 6.3, 6.4, 6.5, 6.8), Capitolo 7 (tranne par. 7.3.2), Capitolo 8 (tranne par. 8.7). Guardare errata-corrige, integrazioni ed esempi utilizzando ALVIE sul sito Web.
Data | Argomento | Riferimenti e note |
---|---|---|
01.03.2017 | Presentazione del corso. | - |
03.03.2017 | Didattica sospesa per assemblea degli studenti. | - |
06.03.2017 | Complessità di un algoritmo e di un problema nel modello di calcolo RAM (random access machine): esempio del segmento di somma massima. | [CGGR, cap.0] |
08.03.2017 | Laboratorio. Breve ripasso del linguaggio C, con esercizi | lab1 |
10.03.2017 | Problema dell'ordinamento: selection sort, insertion sort, limite inferiore per il problema dell'ordinamento mediante confronti. | [CGGR, par.1.2, teorema 2.4] |
13.03.2017 | Problema dell'ordinamento: quick sort, albero di ricorsione, algoritmi randomizzati (quick sort) e analisi con variabili indicatrici. | [CGGR, par.5.1], [CLRS,par. 7.3] |
15.03.2017 | Laboratorio. Insertion sort e quicksort. | lab2 |
17.03.2017 | Problema dell'ordinamento: mergesort. Divide et impera, relazioni di ricorrenza e teorema principale: quick sort; ricerca binaria (con limite inferiore per confronti). | [CGGR, par.3.1-3.4] |
20.03.2017 | Divide et impera: moltiplicazione veloce tra matrici; coppia di punti più vicini. | [CGGR, par.3.6, 3.7] |
22.03.2017 | Laboratorio. Qsort con interi e stringhe. | lab3 |
24.03.2017 | Divide et impera su alberi: problemi decomponibili. Visita di alberi. Ricerca binaria e albero binario di ricerca corrispondente. Heap binario implicito. Heapsort. | [CGGR par. 2.4, 3.6, 3.7] |
27.03.2017 | Discussione del codice per lo heapsort. Alberi binari di ricerca. | [CGGR, 2.4, 4.4.1] |
29.03.2017 | Laboratorio. Alberi binari. | lab4 |
31.03.2017 | Lezione impossibilitata a tenersi per sciopero del personale | - |
03.04.2017 | Alberi binari di ricerca: ricerca, inserimento, cancellazione. Il problema del dizionario: realizzazione mediante array, liste e alberi binari di ricerca. | [CGGR, 4.1, 4.2, 4.4.1] |
05.04.2017 | Laboratorio. Alberi binari di ricerca. | lab5 |
07.04.2017 | Alberi binari di ricerca AVL: ricerca, inserimento, cancellazione. | [CGGR, par. 4.4.2] |
10.04.2017 | Hashing e tabelle hash. Liste trabocco, indirizzamento aperto. Hash universale. | [CGGR, par. 4.3] CLRS 11.3.3 |
12.04.2017 | Laboratorio. Tabelle Hash. | lab6 |
19.04.2017 | Laboratorio. Strumenti per il debugging. | lab7 |
21.04.2017 | Cuckoo hashing. | Note in inglese Analisi in inglese |
24.04.2017 | Grafi: alcune proprietà combinatorie; esempi di problemi; rappresentazione in memoria. Chiusura transitiva. | [CGGR, par. 7.1] |
26.04.2017 | Laboratorio. Lettura e creazione di un grafo. | lab8 |
28.04.2017 | Visita in profondità (DFS) di un grafo e ordinamento topologico. Visita in ampiezza (BFS) con coda implementata mediante liste. Diametro. | [CGGR, par. 7.2.1, 7.3.1] |
03.05.2017 | Laboratorio. | … |
05.05.2017 | Grafi pesati e cammini minimi. Algoritmi di Dijstra e Floyd-Warshall. Albero di ricoprimento minimo (MST): regola del ciclo e del taglio. | [CGGR, par. 7.4, 7.5.1] |
08.05.2017 | Algoritmo di Jarnik-Prim mediante heap. Algoritmo di Kruskal con struttura di dati per union-find e analisi ammortizzata. | [CGGR, par. 5.3, 7.5.2-7.5.3] |
10.05.2017 | Laboratorio. | … |
12.05.2017 | Programmazione dinamica. Fibonacci e sottosequenza comune più lunga. Partizione (subset sum) e zaino (knapsack). Problemi pseudo-polinomiali. | [CGGR, par. 6.1, 6.3-6.5] |
15.05.2017 | Classi di complessità P e NP: esempio dei cicli euleriani e hamiltoniani (HAM) nei grafi. Nozione di certificato polinomiale. Definizione della classe NP. Relazione tra certificato polinomiale e non-determinismo polinomiale. Riduzione polinomiale. Esempio da HAM a commesso viaggiatore (TSP). | [CGGR, par. 8.1-8.3] video |
17.05.2017 | Laboratorio: Discussione del progetto (I). | [progetto] |
19.05.2017 | Proprietà della riduzione polinomiale e definizione della classe NPC (problemi NP-completi). Problema della soddisfacibilità (SAT) e Teorema di Cook-Levin. Riduzione da 3-colorazione di mappe (3-COL) a SAT. Riduzioni a la Karp: da SAT a soddisfacibilità con clausole a 3 letterali (3-SAT), e da 3-SAT a vertex cover (VC). | [CGGR, par. 8.4-8.6, 8.8-8.10] |
22.05.2017 | Algoritmi di r-approssimazione. 2-approssimazione per min VC. Inapprossimabilità di TSP nel caso generale e sua 2-approssimazione per istanze metriche. | [CGGR, par. 8.10-8.11] |
24.05.2017 | Laboratorio: Discussione del progetto (II). | [progetto] |