Ingegneria degli Algoritmi
Anno Accademico 2020/2021
Informazioni generali
Il corso verrà tenuto dai Proff. Salvatore Filippone e Alessandro Pellegrini.
A causa delle restrizioni sull’utilizzo delle aule, il corso verrà erogato a distanza sulla piattaforma Teams di ateneo. Per accedere al team del corso, fare clic su Crea e partecipa al team sotto all’elenco dei team e cercare la scheda Partecipa a un team con un codice. Il codice del corso è sv1ehq1
.
Per problemi o malfunzionamenti, inviare una mail al Prof. Alessandro Pellegrini.
News
- Orari delle lezioni:
- Lunedì, 14.00-15.30
- Mercoledì, 9.30-11.00
- Nell’anno accademico 2019/2020 il corso è passato da 9 CFU a 6 CFU. Chi avesse la necessità di sostenere l’esame da 9 CFU (unicamente per gli studenti degli anni accademici precedenti) contatti via email il docente.
Obiettivi del corso
- Prendere confidenza con la progettazione e l’analisi di algoritmi
- Capire come si misura l’efficienza degli algoritmi e delle strutture dati
- Imparare a scegliere quale algoritmo è più conveniente utilizzare per risolvere problemi del mondo reale
- Implementare algoritmi e strutture dati in Python
Regole d’esame
- L’esame consiste in una prova scritta
- La prova scritta conterrà sia domande teoriche che domande pratiche
Libro di testo consigliato
Alan A. Bertossi, Alberto Montresor. Algoritmi e strutture di dati.
CittàStudi, 2014.
ISBN: 978-8825173956
Programma del corso (preliminare)
Le slide e gli esempi di codice verranno pubblicati sul canale Teams durante il corso
- Introduzione
- Definizioni di base
- Esempi di applicazioni di algoritmi
- Problema del sottovettore di somma massimale
- Efficienza di un algoritmo
- Analisi della complessità e tecniche algoritmiche
- Modelli di calcolo
- Ricorsione e relazioni di ricorrenza
- Divide et impera
- Analisi asintotica
- Analisi delle ricorrenze
- Analisi ammortizzata
- Programmazione dinamica
- Algoritmi Greedy
- Backtracking
- Il problema dell’ordinamento
- Stupid sort, selection sort, bubble sort, insertion sort, merge sort, bucket sort, quick sort, radix sort
- Proprietà degli algoritmi di ordinamento
- Complessità computazionale del problema dell’ordinamento
- Strutture dati di base
- Tipi di dato astratto e Abstract Base Classes
- Liste
- Pile
- Code
- Strutture dati avanzate
- Coda di priorità
- Alberi
- Heap
- Tecniche di Hashing
- Grafi e algoritmi sui grafi
- Visita di un grafo
- Ordinamento topologico
- Cammini minimi
- Minimo albero ricoprente