Ingegneria Informatica e Intelligenza artificiale L-8
Algoritmi e strutture dati
| Settore scientifico disciplinare | Numero crediti formativi (CFU) | Docente |
| ING-INF/05 (IINF-05/A) | 6 | Marco Esposito |
Obiettivi formativi
L'insegnamento si propone di fornire le competenze fondamentali per l'analisi, la progettazione e l'implementazione di algoritmi e strutture dati essenziali, con un focus specifico sulle esigenze metodologiche dell'ingegneria informatica. Gli studenti impareranno a formalizzare problemi computazionali e a risolverli in modo efficiente, comprendendo i trade-off tra diverse soluzioni algoritmiche in termini di tempo e spazio. Attraverso lo studio dei principali paradigmi di progettazione e l'analisi dei modelli di calcolo non ricorsivi e ricorsivi, il corso mira a sviluppare una mentalità analitica orientata alla progettazione di soluzioni efficienti, fornendo inoltre le basi metodologiche per l'approfondimento autonomo di tecniche algoritmiche più avanzate (programmazione dinamica, tecniche greedy, algoritmi su grafi) trattate in insegnamenti successivi del percorso di studi.
Risultati di apprendimento attesi
Conoscenza e capacità di comprensione
Lo studente acquisirà familiarità con i principali algoritmi di ordinamento (selection sort, insertion sort, bubble sort, merge sort, quick sort, heap sort) e con i metodi di ricerca su array. Comprenderà a fondo le strutture dati lineari e non lineari, tra cui liste, pile, code, alberi (generici e binari) e grafi, incluse le operazioni sugli alberi binari di ricerca. Apprenderà inoltre i fondamenti della notazione asintotica per l'analisi di complessità e i principi della gestione della memoria in C++. Lo studente saprà tradurre problemi reali in pseudocodice e diagrammi di flusso, implementandoli efficacemente in linguaggio C++ tramite un ambiente di sviluppo online. Sarà in grado di manipolare strutture dati complesse come alberi e grafi, applicando algoritmi di visita quali la ricerca in ampiezza (BFS) e le operazioni fondamentali sui nodi (inserimento, ricerca, cancellazione). Lo studente svilupperà la capacità di valutare in modo indipendente e critico le prestazioni di algoritmi diversi applicati allo stesso problema, e di individuare la struttura dati più adeguata per uno specifico contesto applicativo, bilanciando efficienza temporale e consumo di memoria. Lo studente saprà esporre con rigore scientifico e proprietà di linguaggio le scelte progettuali effettuate, descrivendo la complessità computazionale di un algoritmo e illustrando il funzionamento di strutture dati complesse sia a livello concettuale sia tecnico. Il corso fornisce le basi metodologiche necessarie per studiare autonomamente algoritmi e strutture dati avanzati non trattati direttamente a lezione, favorendo la capacità di aggiornamento continuo tipica dei contesti informatici in rapida evoluzione.
Programma del corso
Introduzione agli algoritmi Pseudocodice e flowchart Un problema, due algoritmi Divide et Impera Notazione Asintotica Complessità degli algoritmi non ricorsivi Replit - online IDE Complessità Algoritmi per Array Gestione della memoria in C++ Il problema della ricerca nell'array Selection Sort Insertion Sort Bubble Sort Merge Sort Quick Sort Heap Sort Strutture Dati Liste Stack Coda Albero Albero binario Visita di un albero Albero generico e BFS Albero binario di ricerca Albero binario di ricerca - Operazioni Grafo
Testi consigliati
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein: Introduzione agli algoritmi e strutture dati, McGraw-Hill (2023).
Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano: Algoritmi e Strutture Dati, McGraw-Hill (2008).
Calendario
Modalità di accertamento dei risultati di apprendimento acquisiti dallo studente
Modalità di esame
Propedeuticità
Prerequisiti
Organizzazione didattica
Ricevimento studenti
Lezioni
Introduzione agli algoritmi
Pseudocodice e flowchart
Un problema, due algoritmi
Divide et Impera
Notazione Asintotica
Complessità degli algoritmi non ricorsivi
Replit - online IDE
Complessit
Complessit
Algoritmi per Array
Gestione della memoria in C++
Il problema della ricerca nell'array
Selection Sort
Insertion Sort
Bubble Sort
Merge Sort
Quick Sort
Heap Sort
Strutture Dati
Liste
Stack
Coda
Albero
Albero binario
Visita di un albero
Albero generico e BFS
Albero binario di ricerca
Albero binario di ricerca - Operazioni
Albero binario di ricerca - Operazioni
Grafo