Fondamenti della progettazione e analisi di algoritmi efficienti. Vengono trattate la complessità asintotica (notazione O-grande), le strutture dati classiche (liste, pile, code, alberi binari, heap, tabelle hash), gli algoritmi di ordinamento e ricerca, e la teoria dei grafi (visite, cammini minimi, alberi ricoprenti). Il corso introduce inoltre strategie di progettazione quali Divide-et-Impera, Programmazione Dinamica e algoritmi Greedy.