ALGORITMI E STRUTTURE DATI

Obiettivi formativi

Obiettivi generali: Obiettivo del corso è l'introduzione di principi e tecniche fondamentali per la rappresentazione dei dati, la progettazione degli algoritmi e l'analisi delle loro prestazioni. L'applicazione di tali principi e tecniche viene mostrata attraverso lo studio di algoritmi e strutture dati classici, di rilevante importanza teorica ed applicativa. Vengono trattate strutture collegate lineari e non lineari (liste, pile, code, alberi, grafi, hash tables) ed affrontati i rispettivi problemi di ordinamento, ricerca e selezione, analizzando le prestazioni dei relativi algoritmi. Obiettivi specifici: Conoscenza e capacità di comprensione: al termine del corso gli studenti conoscono le strutture dati e gli algoritmi classici per la risoluzione di problemi fondamentali e le principali tecniche di analisi delle prestazioni. Conoscenza e capacità di comprensione applicate: attraverso l'applicazione delle conoscenze acquisite, gli studenti imparano a confrontare diverse soluzioni in base alle loro caratteristiche computazionali (tempo impiegato, memoria utilizzata) e sono in grado di fornire un'implementazione concreta delle strutture dati e degli algoritmi studiati in un linguaggio di programmazione. Autonomia di giudizio: lo svolgimento di esercitazioni mirate permette agli studenti di sviluppare la capacità di progettare e implementare una soluzione algoritmica e di valutarne le prestazioni. Abilità comunicative: le lezioni frontali forniscono agli studenti il linguaggio tecnico (alfabetizzazione) necessario ad uno scambio efficace di idee; tale linguaggio viene utilizzato dagli studenti durante le esercitazioni, svolte interattivamente, per proporre e analizzare la propria soluzione al problema scelto. Capacità di apprendere: il corso introduce nozioni, principi e tecniche di base necessari allo studio degli algoritmi e delle strutture dati in generale. Sebbene l'applicazione di tali elementi sia mostrata su una selezione di problemi fondamentali, il corso fornisce allo studente la capacità di generalizzare tale applicazione e poter quindi affrontare lo studio di approcci più avanzati non presenti in programma.

Canale 1
FABIO PATRIZI Scheda docente

Programmi - Frequenza - Esami

Programma
Analisi di algoritmi (12 ore) Algoritmi e strutture dati: generalità ed esempi. Introduzione alla nozione di costo (tempo e spazio di memoria). Notazioni asintotiche per le funzioni di costo e metodi di analisi (caso peggiore, medio, migliore). Metodi di analisi di algoritmi ricorsivi: iterativo, sostituzione, relazione di ricorrenza, Master Theorem. Tipi di dato astratto (12 ore) Tipi di dato astratto (pile, code, alberi) e loro implementazioni. Algoritmi di visita di un albero. Ordinamento (12 ore) Algoritmi di ordinamento incrementali (descrizione, implementazione e analisi): SelectionSort, InsertionSort, BubbleSort, HeapSort. Algoritmi di ordinamento con approccio divide et impera: MergeSort, QuickSort. Lower bound sul costo dell'ordinamento per modello basato su confronti. Algoritmi di ordinamento lineari (descrizione, implementazione e analisi): IntegerSort, BucketSort, RadixSort. Dizionario (6 ore) Tipo di dato Dizionario. Alberi di ricerca binari. Alberi AVL. Tabelle di Hash (6 ore) Grafi (12 ore) Grafi e loro rappresentazione. Algoritmi di visita (descrizione, implementazione e costo). Tecnica algoritmica golosa (greedy). Minimo albero ricoprente e rispettivo calcolo basato su algoritmo greedy. Algoritmi di Kruskal, di Prim e di Boruvka. Cammini minimi su grafi e relativi algoritmi (descrizione, implementazione e analisi): calcolo delle distanze, algoritmo di Bellman e Ford, calcolo dei cammini minimi a sorgente singola su grafi aciclici, algoritmo di Dijkstra.
Prerequisiti
È richiesta la conoscenza di base di almeno un linguaggio di programmazione, preferibilmente C. È fortemente raccomandato aver seguito il corso di Tecniche di Programmazione.
Testi di riferimento
C. Demetrescu, I. Finocchi, G. F. Italiano: Algoritmi e strutture dati, McGraw-Hill, seconda edizione
Modalità insegnamento
Il corso è erogato in lezioni d’aula settimanali con alcune esercitazioni di laboratorio.
Frequenza
La frequenza è facoltativa ma fortemente incoraggiata.
Modalità di esame
L'esame prevede una prova scritta (70% del voto finale) che include quesiti a risposta aperta relativi ad aspetti teorici e pratici, e la presentaione di un progetto (30%) svolto nel linguaggio C. La prova ha come scopo la valutazione delle conoscenze acquisite (problemi, strutture dati, algoritmi, definizioni, dimostrazione di risultati) e la capacità dello studente di applicare tali conoscenze su problemi specifici (progetto di un algoritmo, applicazione ad un'istanza specifica, valutazione del costo di un algoritmo). Il progetto ha come scopo la valutazione dell'abilità dell* student* di realizzare un sistema concreto.
Modalità di erogazione
Il corso è erogato in lezioni d’aula settimanali con alcune esercitazioni di laboratorio.
  • Codice insegnamento1022760
  • Anno accademico2024/2025
  • CorsoIngegneria dell'Informazione (sede di Latina)
  • CurriculumInformatica
  • Anno2º anno
  • Semestre1º semestre
  • SSDING-INF/05
  • CFU6
  • Ambito disciplinareIngegneria informatica