Docenti: Linda Pagli, Giuseppe Prencipe
(Docenti corso B: Anna Bernasconi, Rossano Venturini )
Assistente: Diego Ceccarelli
Impegno: 12 CFU di cui 9 teoria/esercitazioni e 3 Laboratorio.
Semestre: secondo.
Ricevimento studenti: dopo ogni lezione e su appuntamento.
Il corso consiste ogni settimana di 3 lezioni di didattica frontale in aula e di 1 esercitazione in laboratorio nella quale le nozioni apprese in classe verranno sperimentate realizzando in C gli algoritmi corrispondenti.
Orario delle Lezioni | |||
---|---|---|---|
Martedì | 9-11 | A | Teoria |
Mercoledì | 11-13 | A | Teoria |
Giovedì | 14-16 | H, M | Laboratorio |
Venerdì | 11-13 | A | Teoria |
Si pregano gli studenti che dispongono di un portatile di portarlo in Laboratorio.
L'obiettivo del corso è quello di introdurre strutture dati e tecniche algoritmiche (di base) che consentano allo studente la risoluzione di problemi su sequenze, liste, alberi e grafi, in modo efficiente in tempo e/o spazio. Si discuteranno inoltre alcune tecniche analitiche per la valutazione delle prestazioni degli algoritmi, o delle limitazioni inerenti del calcolo.
Il corso prevede una intensa attività di laboratorio che porterà gli studenti a sperimentare in linguaggio C le nozioni e le tecniche algoritmiche apprese in classe.
L'esame consiste di tre prove:
Le prove possono essere sostenute in appelli diversi. Se una prova non viene passata, occorre risostenere soltanto quella.
Per avere una idea della tipologia delle prove, si consultino i testi dell'anno scorso.
Data | Tipo Prova | Documento | Note | |
---|---|---|---|---|
03/04/2013, ore 11.00 | Scritto (primo compitino) | algo1_030413.pdf | Risultati | |
30/05/2013, ore 9.00 | Scritto (secondo compitino) | algo1_300513.pdf | Risultati | |
12/06/2013, ore 9.00 | Scritto (primo appello) | algo1_120613.pdfsoluzioni | Risultati | |
12/07/2013, ore 9.00 | Scritto (secondo appello) | testo | risultati | |
9/09/2013, ore 15.00 | Scritto | algo1_090913.pdf | risultati | Orale: 13/9/2013 ore 9.30 ufficio Pagli |
4/11/2013, ore 14.00 | Scritto | algo1_041113.pdf | risultati | Visione scritti: mercoledì 6 novembre, ore 9:30, ufficio Bernasconi. |
21/01/2014, ore 9.30 | Scritto | algo1_210114sol.pdf | risalg21-1-14.pdf | Visione scritti: venerdi'ore 11, ufficio Pagli. |
7/02/2014, ore 9.30 | Scritto | risalg7-2-14.pdf | Visione scritti: 11/2/2014 ore 15.30, ufficio Pagli. |
Prossime date per le prove di laboratorio:
Data | Ora | Aule |
---|---|---|
11/06/2013 | 9:30 | H e M |
14/06/2013 | 9:30 | H e M |
16/07/2013 | 9:30 | H e M |
12/09/2013 | 9:30 | H e M |
24/01/2014 | 9:30 | H e M |
Prossime date per le prove orali:
Data | Ora | Aule |
---|---|---|
11/06/2013 | dopo il laboratoio | ufficio Pagli |
14/06/2013 | 9-13 | aula L |
24/06/2013 | 9:30 | ufficio Pagli |
16/07/2013 | 11:00 | ufficio Pagli |
17/07/2013 | 9.00 | ufficio Pagli |
24/01/2014 | 11:00 | ufficio Pagli |
11/02/2014 | 15:30 | ufficio Pagli |
Per il laboratorio, un testo fra:
Emacs
), e il compilatore gcc
, sono sufficienti per apprendere e testare le varie nozioni algoritmiche e di coding che verranno discusse in Laboratorio. I programmatori più esperti potranno eventualmente utilizzare un framework di sviluppo come Eclipse esteso con il suo plug-in Eclipse C/C++ Development Tooling. Per chi si trova a operare sotto Windows suggeriamo il compilatore e il debugger disponibili con MinGW, e consigliamo di istallare i 3 componenti suddetti secondo la sequenza: Eclipse-MinGW-CDevTool. Oppure istallare una macchina virtuale, come VirtualBox, con una qualunque distribuzione Linux sopra. Il consiglio è però quello di adoperare la combinazione minimale editor+gcc
al fine di non perdersi nei meandri e nelle opzioni dei vari tools (non necessari per AIL), per concentrarsi soltanto sugli aspetti di coding degli algoritmi.qsort
-based.Data | Argomento | Rif. Biblio |
---|---|---|
19/02/2013 | Introduzione al corso. Moltiplicazione Egizia. Nozioni di Algoritmo, Problema, Limite Inferiore. Analisi di un problema semiserio | appunti |
20/02/2012 | Laboratorio: Editing e compilazione. Richiami di linguaggio C: Costrutti, array, printf e scanf. | Cap. 2-3, 7.1-7.4 di [KR]. somma == P[b-1) Sito Esercitazioni |
21/02/2012 | Laboratorio: Ripasso e esercizi su funzioni e puntatori. | Sez. 4.1-4.5 e 5.1-5.5 di [KR]. Lucidi |
22/02/2013 | Problemi intrattabili: le torri di Hanoi, algoritmo, analisi del numero di mosse. Crescita esponenziale. | [CGGR] prologo; [CGG] cap. 1 |
27/02/2012 | Laboratorio: Funzioni e passaggio dei parametri. | Sez. 4.1-4.5 e 5.1-5.5 di [KR]. Lucidi |
28/02/2012 | Laboratorio: Allocazione dinamica della memoria (malloc) e stringhe. | Lucidi |
01/03/2013 | Teoria della calcolabilità. Insiemi numerabili.Esistenza di problemi non decidibili. Il problema dell'arresto | Lucidi; |
05/03/2013 | Rappresentazione degli elementi di un insieme con vettore di appartenenza. Generazione di tutte le stringhe binarie, applicazione a PARTITION. Generazione di tutte le permutazioni, applicazione a HAMILTONIAN CYCLE. Esempi di certificati polinomiali. La classe NP. | [CGGR] prologo; [CGG] cap. 1 |
06/03/2013 | Il certificato polinomiale. Nozione di Riduzione Polinomiale. Problemi NP-completi. Il Problema SAT. | [CGGR]: prologo; [CGG]: cap. 1 |
07/03/2013 | Laboratorio: Sottoarray di somma massima, intersezione e fusione di array. | File di test per intersezione File di test per sottoarray di somma massima |
08/03/2013 | Esempi di problemi NPC: Problema SAT, Ciclo Hamiltoniano, k-clique. Esempio di riduzione: da SAT a k-Clique. Il modello RAM e costo delle istruzioni if, for, while. | Una riduzione (K-clique). [CGG]: cap. 1, esercizi0.pdf |
12/03/2013 | Notazione asintotica: Theta, O-grande, Omega-grande, o-piccolo e w-piccolo, con esempi. Array di dimensione variabile. Selection Sort analisi complessità. | [CGGR]:introduzione e cap. 1; [CGG]: cap. 2; Formule utili |
13/03/2013 | Insertion Sort, analisi. Limiti inferiori: tecnica della dimensione dell'input, tecnica dell'albero delle decisioni e dell'oracolo. Esempi: ordinamento. Algoritmo del torneo e del doppio torneo. | limiti inferiori |
14/03/2013 | Laboratorio: Sottoarray di somma massima lineare, Insertion Sort su interi e stringhe, ricerca binaria su stringhe. | Lucidi sottoarray somma massima Lucidi Array Stringhe Puzzle: L'intero mancante |
15/03/2013 | Esercitazione: Limite inferiore per il problema della ricerca con albero di decisione. Soluzione degli esercizi proposti : generazione di tutti i sottoinsiemi di k elementi. Algoritmo di soluzione e verifica della k-clique. Algoritmo per il problema della Subset-Sum. | esercizi corretti |
19/03/2013 | Il problema della ricerca: ricerca binaria ricorsiva; Analisi. Paradigma Divide et Impera. Un algoritmo ottimo di ordinamento di tipo Divide et Impera: MergeSort. | [CGGR]: cap 3; [CGG]: cap. 2; |
20/03/2013 | Quicksort: proprietà e analisi della complessità nel caso ottimo e pessimo. Equazioni di ricorrenza: enunciato teorema principale e esempi. | [CGGR]: cap 3; [CGG]: cap. 2; ricorrenze |
21/03/2012 | Laboratorio: Quick Sort su interi e su stringhe. Varianti (pari&dispari, 3-way partition). | Quicksort parziale Pseudocodice Distribuzione Puzzle: la scala e cavalli |
22/03/2013 | Randomized-Quicksort: analisi della complessità nel caso medio. Equazioni di ricorrenza: dimostrazione teorema principale e esempi. | [CGGR]: cap 5; [CGG]: cap. 2; esercizi1.pdf |
26/03/2013 | Moltiplicazione veloce di interi e matrici. Esercitazione: progettazione di algoritmi e analisi di complessità. | [CGGR]: cap 3; [CGG]: cap. 2; |
27/03/2013 | Selezione dell'erresimo elemento, QickSelect: analisi caso pessimo e caso medio. Esercitazione: progettazione di algoritmi e analisi di complessità. | [CGGR]: cap 3; [CGG]: cap. 2; |
3/04/2013 | Prima prova di verifica intermedia. | risultati |
9/04/2013 | Correzione della prima prova di verifica intermedia. Code con priorità, Heap come albero binario completo a sinistra, relazione tra numero di nodi e altezza. | [CGGR]: cap 2 ; [CGG]: cap. 8; |
10/04/2013 | Operazioni Enqueue, First, Dequeue per un Heap di massimo. Complessità. Allocazione implicita in array. HeapSort. | [CGGR]: cap 2 ; [CGG]: cap. 8; |
11/04/2012 | Laboratorio: Esercizi d'esame: qsort e struct | Puzzle: Elemento maggioritario |
12/04/2012 | Ordinamento di interi: Counting sort e Radix Sort. Introduzione alla Programmazione Dinamica. | [CLR] cap. 8; Programmazione dinamica (dispensa Prof. Luccio) ; [CGGR]: cap 6; [CGG]: cap 2; |
16/04/2013 | Programmazione Dinamica: Edit Distance, Longest Common Subsequence (introduzione al problema). | Programmazione dinamica (dispensa Prof. Luccio); [CGGR]: cap 6; [CGG]: cap 2; |
17/04/2013 | Programmazione Dinamica: Longest Common Subsequence, Partizione di un insieme di interi. | [CGGR]: cap 6; [CGG]: cap 2; |
18/04/2013 | Laboratorio: Liste | Puzzle: Ciclo in una lista |
19/04/2013 | Programmazione Dinamica: Il problema dello Zaino. Pseudopolinomialità. Esercizi sulla programmazione dinamica. | [CGGR]: cap 6; [CGG]: cap 2; Esercizi |
23/04/2013 | Alberi binari: visite, algoritmi ricorsivi su alberi binari. Alberi con un numero qualsiasi di figli: memorizzazione binarizzata. Dizionari. | [CGGR]: cap 1, cap 3, cap 4; [CGG]: cap 4, cap 5; |
24/04/2013 | Dizionari: realizzazione con alberi binari di ricerca. Alberi AVL: definizione. | [CGGR]: cap 4; [CGG]: cap 5; |
26/04/2013 | Esercitazione: operazione DecreaseKey in un heap; simulazione di un algoritmo di programmazione dinamica per il problema dello Zaino. Progettazione di algoritmi di programmazione dinamica per problemi su scacchiera. | ese26-4-2012.pdf |
30/04/2013 | Alberi binari 1-bilanciati: dimostrazione di altezza logaritmica nel numero di nodi. Dizionari: realizzazione con alberi AVL (ricerca; inserimento: rotazioni; cancellazione: cenni). | [CGGR]: cap 4; [CGG]: cap 5; |
3/05/2013 | Esercitazione: progettazione di algoritmi efficienti su alberi binari, ABR e AVL. | esercizi corretti |
07/05/2013 | Dizionari: funzioni hash, realizzazione del dizionario con tabelle hash con liste di trabocco e a indirizzamento aperto. Il problema della cancellazione. | [CGGR]: cap 4; [CGG]: cap 5; |
08/05/2013 | Dizionari: tabelle hash a indirizzamento aperto: analisi al caso medio; scansione lineare, quadratica, doppio hash. | [CGGR]: cap 4; [CGG]: cap 5; tabelle hash (dispensa Prof. Luccio); |
09/05/2013 | Laboratorio: Tabelle Hash | Lucidi Puzzle: Griglia infetta |
10/05/2013 | Grafi: definizioni, rappresentazione di grafi in memoria; visita in ampiezza. | [CGGR]: cap 7; [CGG]: cap 6; |
14/05/2013 | Visita in ampiezza di un grafo: analisi e proprietà. Visita in profondità. Ordinamento topologico di un grafo diretto aciclico. | [CGGR]: cap 7; [CGG]: cap 6; |
15/05/2013 | Ordinamento topologico di un DAG: algoritmo e analisi. Ricerca di cammini minimi su grafi pesati: algoritmo di Dijkstra. | [CGGR]: cap 7; [CGG]: cap 6; |
16/05/2013 | Laboratorio: Simulazione della prova di laboratorio | Testo Input Codice sottomesso |
17/05/2013 | Algoritmo di Dijkstra: simulazione, correttezza e analisi. | [CGGR]: cap 7; [CGG]: cap 6; |