Corso 2024/2025
Le lezioni cominciano regolarmente martedì 10 Settembre, 2024.
Le lezioni si terranno in presenza, in aula A101 , e in streaming sincrono su zoom (trovate link zoom in questo documento, accessibile solo tramite account UniTN).
Per partecipare al corso è obbligatorio:
- Compilare questo questionario, che mi serve per avere una fotografia di quante persone sono interessate a fare l’esame
E’ inoltre suggerito, ma non obbligatorio:
- Unirvi al canale telegram del corso. Tutti gli avvisi (lezioni, assenze, esami, pubblicazioni di risultati, etc.) vengono notificati attraverso il gruppo fino a Settembre 2025. Al termine dell’anno accademico, il gruppo resterà attivo per annunci di interesse generale (hackathon, bandi, opportunità, etc.) mentre chi non ha ancora completato l’esame dovrà spostarsi sul gruppo del 25/26.
- Al canale è associato un gruppo di discussione, dove è possibile discutere di tutto, magari concentrandosi sugli algoritmi però
Se preferite non unirvi al canale su telegram, nessun problema — tutte le informazioni sono disponibili su questo sito.
Tutte le lezioni frontali degli anni scorsi sono già disponibili online in questo sito, in due formati: (1) le registrazioni del 2020/21 (parte in ufficio, parte in aula) e (2) le registrazioni degli anni precedenti (in aula). Delle due, le prime sono più aggiornate, le seconde sono più “vive” (IMHO). In entrambi i casi è stato fatto un po’ di editing per tagliare le parti inutili.
Metterò a disposizione le registrazioni anche quest’anno (in forma non editata) entro il weekend di ogni settimana qui; attiverò una connessione zoom per chi vuole partecipare in maniera sincrona.
Tuttavia, prima del covid, le lezioni di esercitazione e di laboratorio erano molto interattive, partecipate e basate sulla discussione fra tutti; sono tornato a quel modello, e questo significa che saranno scarsamente fruibili a distanza, per la difficoltà di registrare le mie interazioni con gli studenti. Inoltre, la mia attenzione sarà comunque rivolta agli studenti in aula, perché personalmente sono convinto che l’università sia soprattutto una comunità che si forma nelle aule, non online.
Si può passare il corso esercitandosi da soli? Certamente sì, il materiale online è tantissimo. E’ fattibile per tutti? Sicuramente no, il corso è impegnativo e molti fanno fatica a passarlo, perché pensano che si possa passare il corso “leggendo” e “studiando”, in maniera passiva; invece bisogna essere attivi, risolvere problemi, scrivere codice.
Ritengo che il modo migliore per capire se si è sulla strada giusta è confrontarsi con gli altri. Quest’affermazione fa parte del mio “credo” didattico.
Organizzazione
- Per gli studenti del Corso di Laurea in Informatica, il corso è annuale (!!): un unico corso di 12 crediti, che inizia a settembre e finisce a maggio (145004). E’ diviso in due parti, la parte A nel primo semestre e la parte B nel secondo semestre.
- Per gli studenti del Corso di Laurea in Matematica, esiste la versione da 6 crediti (145946), che si svolge nel primo semestre; oppure la versione intera da 12 crediti. Se siete ancora indecisi, ecco due righe sul perché uno studente di Matematica dovrebbe studiare Algoritmi e Strutture Dati.
- Per gli studenti del Corso di Laurea in Ingegneria Informatica, delle Comunicazioni ed Elettronica (ICE), è possibile scegliere come opzionale il corso intero (145004, dal manifesto di Informatica), oppure solo la prima parte (145946, dal manifesto di Matematica). Se siete ancora indecisi, ecco due righe sul perché uno studente di ICE dovrebbe studiare Algoritmi e Strutture Dati.
Sommario
Il corso ha lo scopo di presentare i concetti fondamentali dell’algoritmica, ovvero quella branca dell’informatica che si occupa della definizione e la progettazione degli algoritmi, l’analisi della loro correttezza e della loro efficienza, la dimostrazione delle loro limitazioni e complessità, e lo studio dei dati da essi elaborati.
Verranno presentati algoritmi per risolvere alcuni problemi fondamentali (quali ad esempio l’ordinamento), tecniche per l’analisi degli algoritmi (notazione asintotica e ricorrenze), strutture dati elementari (quali liste, pile, code), strutture dati non lineari (alberi e grafi) e gli algoritmi ad esse collegati, strutture dati avanzate (alberi red-black, heap, tabelle hash, etc.). Particolare enfasi verrà dedicata alle metodologie di progettazione di algoritmi (divide et impera, programmazione dinamica, metodo greedy, backtracking, ricerca locale).
Prerequisiti
Si assume che lo studente conosca i concetti presentati nei corsi di Analisi, Geometria ed Algebra Lineare, Fondamenti Matematici per l’Informatica, Programmazione 1–2, più qualche elemento di calcolo delle probabilità.
Per gli studenti del corso di laurea in Matematica, le maggiori conoscenze nel campo della matematica compensano la minore esperienza nel campo della programmazione, rendendo l’esame affrontabile senza problemi.