La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

A.a. 2008-20091 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Introduzione.

Presentazioni simili


Presentazione sul tema: "A.a. 2008-20091 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Introduzione."— Transcript della presentazione:

1 a.a Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Introduzione Scopi Programma Modalita' d'esame Bibliografia Docente e home page

2 2 Copyright © by Claudio Salati. These tutorials have been produced for the course "Algoritmi Avanzati" (Computer Science) of the University of Ferrara. They may be used for educational purposes, under the condition that their source is explicitly acknowledged.

3 3 Scopi del corso Introdurre ai fondamenti della teoria degli algoritmi e delle strutture dati e all'analisi della complessità computazionale di programmi. Familiarizzare lo studente con le principali problematiche e tecniche relative alla verifica e alla progettazione degli algoritmi. Introdurre i metodi di base utilizzati per stabilire la complessità di programmi e problemi e i criteri utilizzati per scegliere e progettare strutture dati efficienti. Introdurre alcune delle principali strategie per la risoluzione di problemi tramite algoritmi. Presentare un insieme di algoritmi e strutture dati fondamentali. Dopo aver superato l'esame si ritiene che lo studente sia in grado di: risolvere algoritmicamente problemi classici e scegliere motivatamente le strutture dati adatte ad ottenere soluzioni computazionalmente efficienti. porre limiti superiori sufficientemente precisi (indipendenti dall'architettura) alla complessità computazionale di programmi di media difficoltà.

4 4 Programma sintetico del corso Cosa e' un algoritmo Semantica di un programma Verifica di correttezza e terminazione Programmazione strutturata e progettazione top-down Complessita' degli algoritmi e dei problemi Searching and sorting Strutture dati fondamentali: Liste, Alberi, Grafi, Alberi di ricerca binaria, Hash table, 2-3 B-Tree Gestione dinamica della memoria Strategie di progettazione: divide&conquer greedy method semplificazione e trasformazione algebrica tecniche di Montecarlo differenziazione formale

5 5 Programma del corso1 Introduzione e nozioni preliminari. Problema e algoritmo: dal problema al programma. Significato di un programma e sua definizione tramite semantica assiomatica. Analisi degli algoritmi: correttezza e terminazione (dimostrazione formale e semi-formale), complessità nello spazio e nel tempo. Complessita di un problema. Complessita asintotica: definizione di O() e (). Nozioni matematiche. Principio di induzione matematica. Relazioni ricorsive e soluzione di equazioni di ricorrenza del tipo "divide et impera". Programmazione strutturata. Tipi di dati, strutture di dati, introduzione ai tipi di dati astratti (ADT). Progettazione top-down e per raffinamenti successivi, differenziazione formale. Contratto chiamante-chiamato e sua definizione sintattica e semantica. Ricorsione. Algoritmi di ricerca. Ricerca sequenziale e ricerca binaria.

6 6 Programma del corso2 Algoritmi di ordinamento. Ordinamento interno per confronti: numero minimo di confronti necessari per ordinare n elementi. Algoritmi di ordinamento elementari (quadratici): selection-sort, insertion-sort, bubble-sort. Algoritmi di ordinamento per confronto ottimi : merge-sort, la struttura di heap e l'algoritmo heapsort. Algoritmi di ordinamento non basati sul confronto: radix-sort. Strutture dati di base. Liste, Stack, Code e relative operazioni. Le strutture dati di base come ADT. Implementazione (array+indici, memoria dinamica+puntatori) e varianti implementative (liste circolari e non, semplicemente e doppiamente linkate, con e senza nodo dummy di testate): analisi delle operazioni, vantaggi e svantaggi di ciascuna variante. Programmazione. Modalita' di allocazione delle variabili. Puntatori e aritmetica degli indirizzi. La macro assert(). La ricorsione e la sua implementazione tramite stack: utilizzo di uno stack per l'eliminazione della ricorsione. Esempi di problemi e soluzioni ricorsive e non.

7 7 Programma del corso3 Gestione dinamica della memoria. Lalgoritmo dei boundary-tag. Alberi. Concetto di albero e definizioni (altezza di un nodo e di un albero, profondità e livello di un nodo, altezza dell'albero, alberi n-ari e binari). Tecniche di attraversamento (inorder, preorder, postorder). Lalbero come ADT. Tecniche di rappresentazione in memoria dinamica per alberi n-ari e binari: figlio-sinistra e fratello-destro, figlio-sinistro e figlio-destro per alberi binari. Alberi binari di ricerca. Operazioni di ricerca, ritrovamento dellelemento minimo, successore, predecessore, inserimento e cancellazione. Costo delle operazioni. Grafi. Grafi orientati e non orientati. Definizioni e concetti principali (grado, cammino, lunghezza cammino,...). Tecniche di rappresentazione. Ordinamento topologico e test di aciclicità.

8 8 Programma del corso4 Altre strutture dati: Tabelle hash, 2-3BTree, altre rappresentazioni di insiemi e partizioni (bit map, alberi di Tarjan). Tecniche di progetto. Divide et impera, greedy method, semplificazione e trasformazione algebrica, tecniche di Montecarlo, differenziazione formale.

9 9 Lista dei principali algoritmi esaminati Algoritmo di Euclide per il MCD Minimo e massimo di un vettore (diversi metodi) Algoritmi di ordinamento: straight selection, straight exchange (bubblesort), straight insertion, mergesort, heapsort, radix sort, quicksort Ricerca binaria Knapsack Minimum cost spanning tree (algoritmo di Kruskal) Single source - shortest paths (algoritmo di Dijkstra) Topological sort di un grafo Regola di Horner per il calcolo dei polinomi Simulated annealing (cenni) Boundary-tag

10 10 Modalita' di esame Esame orale finale. Durante le lezioni ci saranno (praticamente sempre) delle sessioni di esercitazione (di gruppo e individuali), normalmente legate agli argomenti trattati in quel momento: la partecipazione con successo a queste esercitazioni potra' essere considerata come un sostanziale sostitutivo dell'esame.

11 11

12 12 Venite qui che lo facciamo insieme

13 13 Docente Claudio Salati Telefono: Orario di ricevimento Sostanzialmente on demand. Home page del corso

14 14 Bibliografia Le dispense del corso sono disponibili in copia elettronica sul sito: Il capitolo sulla gestione dinamica della memoria e' tratto da: F. de Luigi, C. Salati, Fondamenti di Informatica - Esercitazioni, Gabriele Corbo Editore. Libro di Testo: T.H. Cormen, C.E. Leiserson, R.L. Rivest, Introduzione agli algoritmi, 2. ed., Jackson Libri, 1999 (CLR): molto diffuso ma in realta non utilizzato in questo corso. Per il linguaggio C si fa riferimento a B.W. Kernighan, D.M. Ritchie, The C Programming Language, 2nd Ed., Prentice-Hall (traduzione italiana del Gruppo Editoriale Jackson). Come riferimento veramente significaytivo vedi: A.V. Aho, J.E. Hopcroft, J.D. Ullman, Data Structures and Algorithms, Addison-Wesley. Vedi anche: M.T. Goodrich, R. Tamassia, Strutture dati e algoritmi in Java, 1a ed. it. (4a americana), Zanichelli. Di interesse e' il link:

15 15 Riconoscimenti - 1 Le lezioni sono state preparate utilizzando i seguenti riferimenti: D.E. Knuth, The art of computer programming, Vol. 1, Fundamental Algorithms, Addison-Wesley. –sez. 1, Basic concepts –sez , Mathematical Induction C.A.R. Hoare, An Axiomatic Basis for Computer Programming, Communications of the ACM, Vol. 12, No. 10, Dec N. Wirth, Principi di programmazione strutturata, ISEDI. –sez. 5, 6, 7 E. Horowitz, S. Sahni, Fundamentals of data structures, Computer Science Press. –sez. 4.8, Doubly Linked Lists and Dynamic Storage Management –sez. 6.4, Topological Sort

16 16 Riconoscimenti - 2 Le lezioni sono state preparate utilizzando i seguenti riferimenti: E. Horowitz, S. Sahni, Computer algorithms, Computer Science Press. –sez. 1.1, What is an Algorithm? –sez. 1.4, Analyzing Algorithms –sez. 2.4, Sets and Disjoint Set Union –sez. 2.6, Hashing –sez. 3.1, Divide-and-Conquer, The General Method –sez. 3.2, Binary Search –sez. 4.1, The Greedy Method, The General Method –sez. 4.3, Knapsack Problem –sez. 4.7, Single source shortest paths –sez. 9.1, Algebraic Simplification and Transformation, The General Method –sez. 9.2, Evaluation and Interpolation

17 17 Riconoscimenti - 3 Le lezioni sono state preparate utilizzando i seguenti riferimenti: A.V. Aho, J.E. Hopcroft, J.D. Ullman, The design and analysis of computer algorithms, Addison-Wesley. –sez. 1.1, Algorithms and their Complexity –sez. 2.1, Data Structures: Lists, Queues, and Stacks –sez. 2.2, Set representations –sez. 2.3, Graphs –sez. 2.4, Trees –sez. 2.5, Recursion –sez. 2.6, Divide-and-Conquer –sez. 2.7, Balancing –sez. 3.3, Sorting by Comparisons –sez. 3.4, Heapsort –sez. 4.4, Binary Search Trees –sez. 4.5, Optimal Binary Search Trees –sez. 4.6, A Simple Disjoint-Set Union Algorithm –sez. 5.1, Minimum-Cost Spanning Tree –sez. 5.10, Single source problems

18 18 Riferimenti al libro di testo (CLR) Le lezioni non seguono troppo fedelmente il contenuto del libro di testo: alcuni argomenti trattati a lezione non sono coperti da CLR la trattazione matematica e' molto piu' leggera nelle lezioni. I capitoli citati di seguito sono quelli che coprono, sia pure in ordine diverso, gli stessi argomenti trattati a lezione: cap. 1 sez. 2.1, fino a pag. 26 cap. 7 cap. 9


Scaricare ppt "A.a. 2008-20091 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Introduzione."

Presentazioni simili


Annunci Google