La complessità computazionale è uno dei più affascinanti campi di ricerca dell'informatica e più in genere delle scienze, volto sia allo studio del costo computazionale nella soluzione algoritmica di problemi sia ad una classificazione dei problemi in base a questo costo, secondo opportune misure di complessità (tempo/spazio). Questa classificazione permette di studiare la difficoltà intrinseca di classi di problemi di largo interesse nella pratica comune dell'informatica ed i limiti conosciuti per il raggiungimento di buoni algoritmi per risolvere problemi complessi. In quest'area si trova uno dei problemi più affascinanti rimasti tutt'ora aperti nel campo delle scienze esatte: l'ormai noto problema P NP. Oltre a rappresentare un interessante campo di ricerca, la complessità computazionale è al tempo stesso anche un prerequisito per molti settori avanzati dell'informatica, come l'intelligenza artificiale, la logica ed i fondamenti dell'informatica, l'analisi e la verifica di programmi, la criptografia, i sistemi distribuiti e le reti di calcolatori, ecc. Questo corso è rivolto non solo agli studenti che abbiano interessi in tali settori, ma anche a quanti vogliano approfondire e sistematizzare in un quadro concettuale rigoroso i concetti e le osservazioni sulla complessità degli algoritmi incontrati in corsi precedenti.
Programma del corso:
Testo di referenza: C. Papadimitriou. Computational Complexity, Addison Wesley, 1995.