Modelli e complessità di calcolo Prof. Giorgio Ausiello Orario delle lezioni: Martedi, Mercoledi, Giovedi ore 8.30 10.00 Orario di ricevimento: Lunedi ore 17.00 19.00 Via Ariosto 25 II piano - Ufficio B220 - tel. 06 77274005 e-mail: ausiello@dis.uniroma1.it www.dis.uniroma1.it/~ausiello Collaboratore: Prof. Luigi Laura Via Ariosto 25 II piano - Ufficio B118 - tel. 06 77274111 e-mail: laura@dis.uniroma1.it
1. Contenuti e obiettivi del corso - Presentazione di modelli formali adatti a rappresentare macchine e programmi ed illustrare i loro principali aspetti: - computazioni - potere computazionale - macchine deterministiche e non deterministiche - varianti imperative e funzionali di linguaggi di programmazione - costi di computazione Abituarsi ad utilizzare strumenti formali per descrivere in modo preciso i sistemi di calcolo, i programmi e i problemi che con essi intendiamo risolvere Imparare a utilizzare macchine a stati Imparare un semplice linguaggio di programmazione funzionale
- Introduzione delle proprietà del concetto di calcolo e dei concetti di calcolabilità e decidibilità Imparare che esistono funzioni non calcolabili e problemi non risolubili mediante computer - Introduzione del concetto di costo di risoluzione di un problema (complessità computazionale) e dei metodi con cui i problemi possono essere classificati in base alla loro complessità Comprendere i limiti pratici dei calcolatori e l esistenza di problemi computazionalmente difficili
2. Capacità acquisite Dopo aver seguito e studiato il corso ci aspettiamo che abbiate imparato: - a formalizzare un sistema di calcolo definendone i concetti essenziali (stato, computazione ecc.) - a risolvere semplici problemi utilizzando diversi paradigmi computazionali come macchine a stati e linguaggi di programmazione funzionali (oltre agli usuali linguaggi imperativi) e sapendo valutare il costo di risoluzione - a conoscere le proprietà fondamentali delle funzioni calcolabili e dei problemi risolubili mediante un calcolatore - a riconoscere, almeno in casi semplici, se un problema non è risolubile mediante un calcolatore - a classificare i problemi in base alla loro complessità - a riconoscere, almeno in casi semplici, se un problema è computazionalmente difficile
3. Collocazione nel curriculum Fondamenti di Informatica Linguaggi e Sistemi Formali Algoritmi e Strutture di Dati Ricerca Operativa - Modelli e Complessità di calcolo Laurea Specialistica (Informatica Teorica II)
4. Programma - Lezioni 1. Richiami e complementi su linguaggi formali e automi. 2. Macchine di Turing 3. Macchine a registri (RAM) 4. Funzioni ricorsive, linguaggi funzionali, LISP 5. Teoria generale della calcolabilità 6. Classi di complessità 7. Problemi computazionalmente intrattabili
Esercitazioni 1. Esercizi relativi alle varie parti del corso 2. Il linguaggio di programmazione LISP
5. Testi di riferimento G. Ausiello, F. d Amore, G. Gambosi, Linguaggi, Modelli, Complessità, FrancoAngeli Editore, 2003 Dispensa sul Linguaggio LISP Altro materiale didattico Trasparenze del corso
Testi consigliati in alternativa o a completamento: Hopcroft, Motwani, Ullmann, Introduction to Automata Theory, Languages and Computation, Addison Wesley 2001. D. P. Bovet, P. Crescenzi, Teoria della complessità computazionale, FrancoAngeli Editore, 1991 P. H. Winston, B. K. P. Horn, LISP, Addison-Wesley, 1984
6. Modalità d esame Esame scritto al termine del corso in uno dei due appelli della prima sessione o in una delle sessioni di recupero. Chi supera con un voto tra 18 e 23 può sostenere anche l esame orale ed il voto finale sarà la media dei voti di scritto e orale. Date previste per gli esami: 1 Aprile 2008 15 Aprile 2008 1 Luglio 2008 18 Settembre 2008 Esempi delle prove scritte delle passate sessioni sono disponibili in rete.