Programma di Algoritmi E Strutture Dati:

Il corso riguarda l'analisi e la progettazione di algoritmi. L'enfasi è sugli algoritmi efficienti. Saranno presentati i principali strumenti teorici utili per l'analisi e le principali tecniche di progettazione algoritmica (tecnica greedy, divide-et-impera, programmazione dinamica). Il corso è diviso in due parti. La prima parte copre: notazione asintotica, diversi metodi per stimare la complessità computazionale di algoritmi ricorsivi, il problema dell'ordinamento, strutture dati efficienti per implementare dizionari e code con priorità, e algoritmi efficienti per visitare grafi. La seconda parte riguarda le principali tecniche di progettazione algoritmica (tecnica greedy, divide-et-impera, programmazione dinamica). Saranno presentati algoritmi per risolvere problemi di scheduling, calcolare cammini minimi (in grafi pesati), trovare un minimo albero di copertura, e calcolare la distanza di edit fra due parole.