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.