Indice

Algoritmica e Laboratorio - Corso A

Informazioni Generali

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.

Anni accademici precedenti

Orario Lezioni

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.

Obiettivi del Corso

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.

Modalità e Appelli di Esame

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.pdfRisultati
30/05/2013, ore 9.00 Scritto (secondo compitino)algo1_300513.pdf Risultati
12/06/2013, ore 9.00 Scritto (primo appello)algo1_120613.pdfsoluzioniRisultati
12/07/2013, ore 9.00 Scritto (secondo appello)testorisultati
9/09/2013, ore 15.00 Scritto algo1_090913.pdfrisultatiOrale: 13/9/2013 ore 9.30 ufficio Pagli
4/11/2013, ore 14.00 Scritto algo1_041113.pdfrisultati 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.pdfVisione 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

Libri di testo

Per il laboratorio, un testo fra:

Materiale per il Laboratorio

Programma del corso

  1. Breve introduzione a problemi computazionali, indecidibilità, e trattabilità (P, NP, NPC, EXP-TIME).
  2. Complessità computazionale: modello di calcolo, dimensione dell'input e dell'output, caso pessimo e caso medio.
  3. Limiti del calcolo: albero di decisione, limiti superiori e inferiori.
  4. Divide-et-impera, Relazioni di ricorrenza, Teorema fondamentale.
  5. Algoritmi per sequenze statiche e dinamiche: ricerca e ordinamento.
  6. Ordinamento basato su confronti: Insertion sort, Merge-sort, Quick-sort, Heap sort.
  7. Ordinamento di interi: Counting sort, Radix Sort.
  8. Ordinamento di stringhe: qsort-based.
  9. Sottosequenza di somma massima.
  10. Programmazione dinamica: LCS, Partizione e Zaino
  11. Algoritmi randomizzati: Quicksort.
  12. Generazione di combinazioni e permutazioni
  13. Analisi ammortizzata: doubling di array, contatore binario, k ricerche.
  14. Dizionari: Alberi bilanciati (AVL), Tabelle hash (liste di trabocco e indirizzamento aperto).
  15. Alberi: rappresentazione e visite.
  16. Grafi I: rappresentazione e visite (DFS e BFS), DAG e ordinamento topologico.
  17. Grafi II: Ciclo/cammino euleriano, ciclo hamiltoniano, componenti (fortemente) connesse.
  18. Grafi III: Minimum Spanning Tree e Shortest Path.

Lavagna

Primo "quaderno"

risalg3-41-3.pdf

Registro delle Lezioni

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 structPuzzle: 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 laboratorioTesto Input Codice sottomesso
17/05/2013 Algoritmo di Dijkstra: simulazione, correttezza e analisi. [CGGR]: cap 7; [CGG]: cap 6;