Obiettivi formativi: Fornire conoscenze sui metodi di rappresentazione delle principali strutture di dati (pile, code, liste, alberi, grafi) e sugli algoritmi fondamentali per la loro gestione. Esporre glli strumenti formali per la valutazione rigorosa della complessità computazionale degli algoritmi e dei problemi. E' un obiettivo del corso anche lìacquisizione di familiarità con i principali approcci algoritmici (divide-et-impera, greedy, incrementale) e con i paradigmi di programmazione ricorsivo ed iterativo. Per le esercitazioni e le prove d'esame del corso viene utilizzato il linguaggio C.

Aims of this course: Provide knowledge on basic data structures (stacks, queues, lists, trees, graphs) and fundamental algorithms for their management. Acquire the formal tools for a rigorous evaluation of the computational complexity of algorithms and problems. a further objective of the course is the acquisition of familiarity with the main algorithmic approaches (divide and conquer, greedy, incremental) and the recursive and iterative programming paradigms. The course adopts the C language for laboratories and for final evaluation.