Nome insegnamento: Algoritmi e Strutture Dati Dipartimento: Corso di laurea: Classe: Tipo Attività formativa: Ambito disciplinare: Settore Scientifico-Disciplinare: Numero di Crediti Formativi Universitari: Propedeuticità obbligatoria: Anno di corso: Semestre: Ore di insegnamento: Modalità di esame: DIIES Ingegneria dell’Informazione L-8 caratterizzante ING. INFORMATICA ING-INF/05 6 Fondamenti di Informatica II I 48 prova scritta e prova orale TITOLARE DEL CORSO Prof. Francesco Buccafurri Obiettivi formativi Comprensione e assimilazione del concetto di tipo di dato astratto come strumento di rappresentazione della realtà nonché dei principali algoritmi, con particolare riguardo agli algoritmi su grafi (ed alle applicazioni alle reti di computer), delle principali tecniche di programmazione e dell'analisi di complessità degli algoritmi. Capacità di applicare i concetti teorici assimilati nella risoluzione di problemi e opportuni casi d’uso. Acquisizione di un appropriato livello di autonomia nell’apprendimento delle tecniche di progetto di algoritmi e di implementazione che seguono il paradigma object-oriented. Capacità di comunicare con adeguata competenza tecnica con altri partner in attività di gruppo di implementazione su larga scala. Capacità di apprendimento di nuove tecniche di programmazione e strutture dati più avanzate nonché di diversi linguaggi che seguono il paradigma object-oriented. Programma dettagliato Introduzione Problemi e algoritmi Cenni sulla nozione di Calcolabilita’ e sulla tesi di Church-Turing. Complessità computazionale di problemi ed algoritmi (notazione O, Omega, Theta) Tipi di Dato e Strutture Dati Vettori, Matrici, Liste,Liste Ordinate, Pile, Code, Heap, Alberi Binari di Ricerca, Alberi Generali, Code di Priorita', Insiemi, Dizionari, Tabelle Hash, Vettori Associativi, Grafi Orientati e Non Orientati, Grafi Pesati, Trie. Algoritmi Fondamentali, Tecniche di Programmazione e Algoritmi su Grafi Algoritmi di Base su Grafi (Raggiungibilita' di nodi in un grafo, Componenti Connesse, Albero Ricoprente) Tecniche di Ricerca e di Ordinamento Divide et Impera (approf: Ricerca Binaria, Merge Sort, Tecniche Quadratiche di Ordinamento, Calcolo del Fattoriale, Calcolo della Successione di Fibonacci) Equazione di Ricorrenza per la definizione della complessita’ delle tecniche Divide et Impera. Tecniche Golose (Knapsack, Algoritmo di Dijkstra, Algoritmo di Prim, Implementazione con vettori e con heap indicizzato, cenni all’Algoritmo di Huffman per compressione lossless). Esempi di Applicazione alle Reti di Computer degli Algoritmi su Grafi (routing, connettivita’, etc.). Programmazione OO in Java Caratteristiche OO di Java (Incapsulamento, Ereditarietà, Polimorfismo, Template) Implementazione delle strutture dati e degli algoritmi studiati in Java. Testi consigliati Camil Demetrescu, Umberto Ferraro Petrillo, Irene Finocchi, Giuseppe F. Italiano, Progetto di algoritmi e strutture dati in Java, McGraw-Hill. Cormen-Leiserson-Rivest: Introduzione agli algoritmi e strutture dati 2a ediz., McGrawHill. Ausiello, et al., Teoria e Progetto di Algoritmi Fondamentali, Franco Angeli. A.A., Bertossi, Strutture, Algoritmi, Complessita', ECIG, Universita' di Pisa. Cay Horstmann, Concetti di informatica e fondamenti di Java, Apogeo. Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano, Algoritmi e strutture dati 2/ed, McGraw-Hill.