INSEGNAMENTO Algoritmi e Strutture Dati + Lab _________________________________________________________ ANNO ACCADEMICO 2013-2014 _________________________________________________________ Informatica triennale sede di Bari CORSO DI LAUREA IN _________________________________________________________ DOCENTE Floriana Esposito _________________________________________________________ ANNO DI CORSO 1° 2° ____________________ SEMESTRE _________________________ 7 N° CREDITI LEZIONI FRONTALI: ______________ 56 N° ORE LEZIONI FRONTALI: __________________ 119 STUDIO INDIVIDUALE (________) 2 N° CREDITI ESERCITAZIONI/LABORATORIO: ______________ 20 30 STUDIO INDIVIDUALE (_______) N° ORE ESERCITAZIONI/LABORATORIO: ________ 0 N° CREDITI PROGETTO/CASO DI STUDIO: ______________ 0 N° ORE STUDIO INDIVIDUALE (_______) 9 TOTALE CREDITI: ________ PRE-REQUISITI PRE-REQUISITI: Principi della programmazione strutturata e conoscenza di almeno un linguaggio di Programmazione imperativa; - Principi della programmazione modulare; - Concetto di tipo, Dati e Strutture dati predefiniti; - Principi dell'astrazione funzionale (funzioni e procedure) e meccanismi di passaggio dei parametri, compilazione separata; - Capacità di utilizzare linguaggi algebrici per formulare problemi. OBIETTIVI FORMATIVI OBIETTIVI FORMATIVI Viene presentata una metodologia di progetto basata sull’uso di Dati Astratti (ADT) e sono introdotte tecniche di programmazione orientata ad oggetti. Saranno acquisiti gli strumenti della programmazione per classi attraverso la realizzazione di dati astratti in ambienti di programmazione orientati ad oggetti. Oltre alla capacita' di rappresentare in modo formale diversi tipi di problemi, saranno acquisiti i principi della algoritmica, presentati in funzione del modo di utilizzo dello spazio di ricerca: verranno definite le caratteristiche dei paradigmi selettivo e generativo e se ne daranno esempi con la presentazione di diversi algoritmi fondamentali. Campus Via E. Orabona, 4 Tel (+39) 080 5442294; Fax (+39) 080 5443196 [email protected] Pagina 1 Algoritmi e Strutture Dati + Lab 2013-2014 OBIETTIVI PROFESSIONALIZZANTI OBIETTIVI PROFESSIONALIZZANTI Capacita' di integrare le tecniche di astrazione funzionale con quelle di astrazione dati nella progettazione di programmi per la soluzione di un problema, individuando le strutture dati piu' opportune, il metodo solutivo e la tecnica algoritmica appropriata. Capacita’ di utilizzare tecniche di realizzazione più efficienti in un linguaggio di programmazione di riferimento, valutandone i costi ed i benefici in termini di complessita' di calcolo. Capacita’ di implementare diverse realizzazioni degli operatori definiti in un’opportuna algebra definita per strutture dati non primitive, attraverso l’uso di ADT, in un linguaggio orientato ad oggetti. _ TESTO/I ADOTTATO/I A. Bertossi, A. Montresor Algoritmi e strutture di dati. CittàStudi, 2010 M. Cadoli, M. Lenzerini, P. Naggar, A. Schaerf . Fondamenti della progettazione dei programmi. Città studi Edizioni, 1997. TESTO/I CONSIGLIATO/I C. Demetrescu, I. Finocchi, G. F. Italiano Algoritmi e strutture dati 2/ed Seconda edizione, McGraw-Hill, 2008. P. Crescenzi, G. Gambosi, R. Grossi. Strutture di Dati e Algoritmi, Addison-Wesley Pearson, 2/ed 2012 T. Cormen, C. Leiserson, R. Rivest, C. Stein. Introduzione agli algoritmi e strutture dati. Seconda edizione, McGraw-Hill, 2005. Clifford A. Shaffer Data Structures and Algorithm Analysis Edition 3.2 (C++Version) 2012 http://people.cs.vt.edu/~shaffer/Book PROPEDEUTICITÀ OBBLIGATORIE Programmazione PROPEDEUTICITÀ CONSIGLIATE Linguaggi di programmaione, Matematica Discreta Campus Via E. Orabona, 4 Tel (+39) 080 5442294; Fax (+39) 080 5443196 [email protected] Pagina 2 Algoritmi e Strutture Dati + Lab 2013-2014 INCENTIVI ALLA FREQUENZA * Sono previste tre prove intermedie riservate agli studenti che hanno almeno l'80% di presenze del numero di ore di lezioni effettuate nel periodo precedente ogni prova. La prima si svolge nel periodo di interruzione delle lezioni a novembre. La seconda si svolge alla fine delle lezioni, nella seconda metà di dicembre. La terza, di recupero, si svolge nella seconda settimana di gennaio. Il superamento di due prove esonera dalla prova d'esame di laboratorio. ESONERI O PROVE DI VALUTAZIONE INTERMEDIE CON MODALITÀ DI ESECUZIONE * Le prove intermedie riguardano l'analisi, la progettazione della strategia solutiva e la corrispondente realizzazione in C++ di un problema che richieda le strutture dati fino a quel momento presentate a lezione e durante le ore di esercitazioni guidate in laboratorio. VALIDITÀ DEI VOTI E PREMIALITÀ ACQUISITE * La validità dell'esonero è fino alla sessione d'esame di settembre dell'anno accademico in corso. MODALITÀ DI ESECUZIONE DEGLI ESAMI * L''esame consiste di una prova di laboratorio e di una prova orale. La prova di laboratorio, riguarda l'analisi, la progettazione della strategia solutiva e la corrispondente realizzazione in C+ + di un problema. La prova di Laboratorio superata in un appello vale per la sessione d'same e comunque non oltre 90 giorni. Lo studente è tenuto a presentarsi all'esame orale con gli esercizi/programmi svolti durante l'anno relativi alla realizzazione di strutture dati e prove di algoritmi. PROVA SCRITTA ________ NO PROVA ORALE ________ SI PROVA DI LABORATORIO SI ________ PROVA DI PROGETTO O CASO DI STUDIO NO ________ * Valido solo per gli studenti che sostengono l’esame nell’anno a cui si riferisce il modulo Campus Via E. Orabona, 4 Tel (+39) 080 5442294; Fax (+39) 080 5443196 [email protected] Pagina 3 Algoritmi e Strutture Dati + Lab 2013-2014 CONTENUTO 1. Algoritmi e programmi Presentazione del corso. Il ruolo delle tecniche di astrazione nel progetto di programmi. Dall'algoritmo al programma; la valutazione dell'algoritmo. 2. Algebre di dati Dati e rappresentazioni, requisiti delle astrazioni di dati, costrutti. Astrazioni di dati e dati primitivi. Gli ADT (Abtract Data Types): specifica e realizzazione. 3. Strutture lineari di dati Il concetto di sequenza. Liste: specifiche, realizzazioni attraverso rappresentazioni sequenziali e collegate. Pile: specifiche e realizzazioni alternative. Pile e procedure ricorsive. Code: specifiche e realizzazioni alternative. Scelta, implementazione e verifica di algoritmi per la ricerca, l'ordinamento e la fusione delle strutture dati proposte. 4. Analisi della Complessità di calcolo Generalità. Tempo di calcolo. Ordini di grandezza e complessità. Modelli di costo per la complessita' in tempo e in spazio. Definizione delle funzioni di costo. 5. Insiemi Insiemi: specifiche e confronto tra realizzazioni alternative. 6. Strutture non lineari di dati: alberi Generalita'. Alberi binari ed n-ari. Gli alberi radicati e alberi ordinati, proprieta'. Alberi binari: specifiche, definizione ricorsiva, la corrispondenza con le liste, rappresentazioni e realizzazioni. Algoritmi fondamentali di visita. Alberi bilanciati di ricerca. 7. Alberi n-ari Specifiche, definizione ricorsiva, rappresentazioni e realizzazioni alternative. Algoritmi su alberi n-ari: visita, inserimento di un valore e ricerca di un valore. 8. Code con priorita' Generalita'. Specifiche, rappresentazioni e realizzazioni alternative. 9. Dizionari Tavole indicizzate. Tabelle Hash. Dizionari: algebra e operatori. Rappresentazioni e realizzazioni: Hash statico chiuso e aperto, Hash dinamico. Scelta di Funzioni hash. 10. Strutture non lineari di dati: Grafi Il tipo astratto GRAFO: specifiche e rappresentazioni. Realizzazioni mediante matrici di adiacenza e di incidenza, vettori di adiacenza, liste di adiacenza, e rappresentazioni collegate: realizzazioni alternative. Algoritmi fondamentali su grafi: visita di un grafo e calcolo dei cammini minimi. 11. Le tecniche algoritmiche Classificazione dei problemi: problemi di ricerca, di decisione, di ottimizzazione. Lo spazio di ricerca: definizione e proprieta'. Le tecniche algoritmiche: il paradigma selettivo e il paradigma generativo. Tecnica dell'enumerazione, del backtracking, tecnica greedy, tecnica divide-et-impera. Problemi e metodi solutivi: string matching (Knuth-Morris-Pratt), partizionamento di insiemi, problema delle N Regine, problema dello zaino, problema del commesso viaggiatore, problema della colorazione, ricerca del percorso piu' breve in un grafo (Dijkstra), minimo albero di copertura (Kruskal), selezione di attivita'. TESTO/I ADOTTATO/I A. Bertossi, A. Montresor Algoritmi e strutture di dati. CittàStudi, 2010 M. Cadoli, M. Lenzerini, P. Naggar, A. Schaerf . Fondamenti della progettazione dei programmi. Città studi Edizioni, 1997. Campus Via E. Orabona, 4 Tel (+39) 080 5442294; Fax (+39) 080 5443196 [email protected] Pagina 4 Algoritmi e Strutture Dati + Lab 2013-2014 ~ Campus Via E. Orabona, 4 Tel (+39) 080 5442294; Fax (+39) 080 5443196 [email protected] Pagina 5 Algoritmi e Strutture Dati + Lab 2013-2014 Campus Via E. Orabona, 4 Tel (+39) 080 5442294; Fax (+39) 080 5443196 [email protected] Pagina 6