TECNICHE DI PROGRAMMAZIONE CON LABORATORIO

Obiettivi formativi

Obiettivi generali: Introdurre gli aspetti fondamentali del pensiero computazionale e della soluzione di problemi attraverso la programmazione in Python. Offrire agli studenti le competenze necessarie per utilizzare con profitto il metodo computazionale per la soluzione dei problemi quali ad esempio la programmazione ad oggetti, la ricorsione, le strutture dati di base, e la programmazione dinamica. Gli strumenti verranno presentati sia con una rigorosa trattazione matematica volta a valutare la correttezza e l'efficienza delle soluzioni proposte che attraverso la programmazione e numerosi esempi di problem solving computazionale. Il corso ha una forte connotazione progettuale e prevede quindi esercitazioni settimanali in laboratorio. Obiettivi specifici: Conoscenza e comprensione: Fornire un'ampia panoramica sull’analisi e la progettazione di programmi in Python che richiedano una conoscenza approfondita del pensiero computazionale. I diversi problemi affrontati vengono definiti formalmente e vengono fornite sia le basi teoriche sia informazione tecniche per comprendere le soluzioni adottate. Applicare conoscenza e comprensione: Risolvere problemi specifici di programmazione, mediante l'applicazione delle tecniche studiate. Lo svolgimento di esercitazioni in laboratorio consente agli studenti di applicare le conoscenze acquisite. Capacità critiche e di giudizio: Essere in grado di valutare la correttezza di un programma e la sua adeguatezza rispetto ai requisiti. Capacità comunicative: Essere in grado di descrivere le scelte effettuate nelle soluzioni adottate e spiegare il meccanismo di esecuzione dei programmi secondo il modello adottato. Capacità di apprendimento: Approfondimento autonomo di alcuni argomenti presentati nel corso tramite lo svolgimento a casa di esercitazioni proposte in laboratorio.

Canale 1
FEDERICO FUSCO Scheda docente

Programmi - Frequenza - Esami

Programma
(Programma di massima) Complessità computazionale - Concetto di tempo di esecuzione di un algoritmo e memoria utilizzata - Definizioni degli ordini di grandezza Algoritmi di ricerca ed algoritmi di ordinamento - Algoritmo di ricerca in una lista non ordinata - Algoritmo di ricerca in una lista ordinata - Bubble sort: algoritmo ed analisi - Insertion sort: algoritmo ed analisi - Merge sort: algoritmo ed analisi - Heap sort: algoritmo ed analisi. Concetto di coda con priorità e heap - Quick sort: algoritmo ed analisi. - Quick sort randomizzato: algoritmo ed analisi Ripasso di programmazione orientata ad oggetti - Concetti di classe, attributo e metodo - Ereditarietà (Slides) Algoritmi su Grafi - Definizione di Grafo diretto, grafo indiretto ed albero - Rappresentazione astratta di un grafo: lista e matrice di adiacenza (Slides) - Visite di un grafo: DFS e BFS - Shortest path in un grafo non pesato con DFS e BFS - Shortest path in un grafo pesato: Dijkstra e Programmazione Dinamica - Problema del Minimum Spanning Tree: Algoritmi di Prim e Kruskal
Prerequisiti
Conoscenza basilare di Python
Testi di riferimento
- Introduction to Algorithms di Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein. - Introduzione alla programmazione in Python John Guttag.
Modalità di esame
Esame scritto ed orale
GIOVANNI TRAPPOLINI Scheda docente

Programmi - Frequenza - Esami

Programma
(Programma di massima) Complessità computazionale - Concetto di tempo di esecuzione di un algoritmo e memoria utilizzata - Definizioni degli ordini di grandezza Algoritmi di ricerca ed algoritmi di ordinamento - Algoritmo di ricerca in una lista non ordinata - Algoritmo di ricerca in una lista ordinata - Bubble sort: algoritmo ed analisi - Insertion sort: algoritmo ed analisi - Merge sort: algoritmo ed analisi - Heap sort: algoritmo ed analisi. Concetto di coda con priorità e heap - Quick sort: algoritmo ed analisi. - Quick sort randomizzato: algoritmo ed analisi Ripasso di programmazione orientata ad oggetti - Concetti di classe, attributo e metodo - Ereditarietà (Slides) Algoritmi su Grafi - Definizione di Grafo diretto, grafo indiretto ed albero - Rappresentazione astratta di un grafo: lista e matrice di adiacenza (Slides) - Visite di un grafo: DFS e BFS - Shortest path in un grafo non pesato con DFS e BFS - Shortest path in un grafo pesato: Dijkstra e Programmazione Dinamica - Problema del Minimum Spanning Tree: Algoritmi di Prim e Kruskal
Prerequisiti
Conoscenza basilare di Python
Testi di riferimento
- Introduction to Algorithms di Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest e Clifford Stein. - Introduzione alla programmazione in Python John Guttag.
Modalità di esame
Esame scritto ed orale
  • Codice insegnamento10603331
  • Anno accademico2024/2025
  • CorsoScienze matematiche per l’intelligenza artificiale
  • CurriculumCurriculum unico
  • Anno1º anno
  • Semestre2º semestre
  • SSDING-INF/05
  • CFU9
  • Ambito disciplinareFormazione informatica