ALGORITMI

Anno accademico 2023/2024 - Docente: GIUSEPPE MANGIONI

Risultati di apprendimento attesi

Scopo del corso è fornire allo studente le nozioni necessarie per progettare, valutare e implementare algoritmi efficienti, utilizzando le più avanzate tecniche di programmazione e le strutture dati adeguate.

Tali nozioni includono le tecniche di programmazione ricorsiva e Divide-et-impera, le principali strutture dati avanzate e l'analisi di complessità. Verranno, inoltre, forniti i concetti necessari a valutare quali tecniche e quali strutture dati scegliere per affrontare al meglio i diversi tipi di problemi computazionali.


Conoscenza e comprensione

  • comprendere gli elementi per descrivere i tempi di esecuzione di un algoritmo;
  • apprendere le tecniche di programmazione divide-et-impera, ricorsivi, dinamica e greedy;
  • conoscere le principali tecniche di ordinamento;
  • conoscere le strutture dati di base ed avanzate;
  • apprendere i principali algoritmi per grafi.

Capacità di applicare conoscenza e comprensione

  • saper valutare la complessità degli algortimi;
  • capacità di individuare gli algoritmi e le strutture dati migliore per risolvere un dato problema computazionale.

Autonomia di giudizio (Ability of making judgements)

  • sapere valutare l'adeguatezza di un dato algoritmo e/o di una struttura dati per la soluzione di un problema.

Abilità comunicative (Communication skills)

  • acquisire la conoscenza degli algortitmi e delle strutture dati e del vocabolario tecnico ad essi associato

​​Capacità di apprendimento (Learning skills)

  • capacità di apprendere le principali tecniche algoritmiche, necessarie per intraprendere studi successivi e/o attività professionali con un alto grado di autonomia.

Modalità di svolgimento dell'insegnamento

Il metodo di insegnamento principale è la didattica frontale associata alla discussione delle conoscenze acquisite.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

  • concetto di algoritmo, definizione e caratteristiche di un linguaggio di programmazione, rudimenti di complessità computazionale, strutture dati di base.
  • conoscenza di almeno un linguaggio di programmazione imperativo (esempio: C, C++, C#, Java, Python, Go, ...)
  • elementi di matematica discreta e di analisi matematica

Frequenza lezioni

Frequenza non obbligatoria anche se fortemente consigliata.

Contenuti del corso

  • Fondamenti. Introduzione agli algoritmi ed alla loro descrizione. Tempi di esecuzione. Tecniche algoritmiche.
  • Ordinamento e statistiche d'ordine. Heapsort. Quicksort, Ordinamento in tempo lineare.
  • Strutture dati. Strutture dati elementari. Hashing. Alberi binari di ricerca e rosso-neri.
  • Tecniche avanzate di progettazione e di analisi. Programmazione dinamica e greedy.
  • Strutture dati avanzate. Arricchire le strutture dati. B-alberi.
  • Algoritmi per grafi. Algoritmi elementari. Alberi di connessione minima. Cammini minimi. Massimo flusso.

Testi di riferimento

[T1]: Introduzione agli algoritmi e strutture dati. IV Edizione. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. MCGraw-Hill. 2023. 

Programmazione del corso

 ArgomentiRiferimenti testi
1Fondamenti.  Per incominciare[T1] Capitolo 1 e 2
2Descrivere i tempi di esecuzione[T1] Capitolo 3
3 Divide-et-impera[T1] Capitolo 4
4 Heapsort[T1] Capitolo 6
5Quicksort[T1] Capitolo 7
6Ordinamento in tempo lineare[T1] Capitolo 8
7Mediane e statistiche d’ordine[T1] Capitolo 9
8Strutture dati elementari[T1] Capitolo 10
9Hashing[T1] Capitolo 11
10Alberi binari di ricerca[T1] Capitolo 12
11Alberi rosso-neri[T1] Capitolo 13
12Programmazione dinamica[T1] Capitolo 14
13Algoritmi avidi[T1] Capitolo 15
14Arricchire le strutture dati[T1] Capitolo 17
15 B-alberi[T1] Capitolo 18
16Algoritmi elementari per grafi[T1] Capitolo 20
17Alberi di connessione minimi[T1] Capitolo 21
18Cammini minimi[T1] Capitolo 22 e 23
19Flusso massimo[T1] Capitolo 24

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

L'esame consiste in una prova orale che include anche la discussione del progetto realizzato dallo studente.
ENGLISH VERSION