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
L'acquisizione dei risultati di apprendimento previsti viene accertata attraverso: le attività di autovalutazione associate ad ogni video-lezione, i test associati alla didattica sincrona, la prova intermedia online e la prova finale in presenza.
Test di autovalutazione: i test di autovalutazione permettono allo studente di monitorare la comprensione degli argomenti somministrati ed eventualmente di attivarsi per colmare le lacune.
Test post-didattica sincrona: I test successivi alla didattica sincrona verificano l’applicazione delle conoscenze in situazione guidata e la capacità di apprendimento autonomo. Consentono di osservare l’uso operativo dei saperi e la capacità di trasferimento.
La prova intermedia online e la prova finale in presenza: consente una verifica sistematica e standardizzata delle conoscenze disciplinari e della comprensione concettuale e permette di valutare l’autonomia di giudizio, ovvero la capacità di formulare valutazioni motivate e sostenere argomentazioni critiche.
Modalità di esame
La valutazione finale avverrà nelle date d’appello previste dall’Ateneo e pubblicate in piattaforma, in modalità scritta online, scritta strutturata in presenza e/o orale.
Propedeuticità
Prerequisiti
Organizzazione didattica
Modalità di erogazione del corso: sono comprese videolezioni e attività di Didattica Sincrona. Le attività didattiche, suddivise tra Didattica Erogativa (DE) e Didattica Sincrona (DS), saranno costituite da 7 ore per CFU e ripartite secondo una struttura di almeno 2,5 ore di DE (tenuta in considerazione la necessità di riascolto) e di 2 ore di DS per ciascun CFU. Attività didattica erogativa (30 ore): 30 lezioni frontali videoregistrate, della durata di circa 30 minuti ciascuna (tenuta in considerazione la necessità di riascolto), sempre disponibili in piattaforma. Attività di didattica sincrona (12 ore): 12 ore in forma di lezioni interattive in aula virtuale, svolte in modalità sincrona, organizzate in date e orari concordati e dedicate a tematiche di approfondimento e integrazione del programma per gli studenti che preparano l'esame. Verranno ripetute nel secondo semestre. Attività di autoapprendimento: lo studente è stimolato a sviluppare autonomia nel problem solving mediante la risoluzione di esercizi non standard e prove di autovalutazione. Il processo di apprendimento è supportato dall'utilizzo di risorse bibliografiche e digitali.
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