Corso Vittorio Emanuele II, 39 - Roma 0669207671

Ingegneria informatica (Anno Accademico 2018/2019) - Ingegneria Informatica (ad esaurimento)

Algoritmi e programmazione avanzata



Slides

Lezione n. 1: C avanzato
   Introduzione al corso

   L'ambiente di sviluppo

   I puntatori

   Aritmetica dei puntatori

   Puntatori e vettori

   Puntatori e struct
Vai alla slide della lezione Massimo Poncino
Lezione n. 2: Allocazione dinamica della memoria
   Allocazione dinamica della memoria

   Funzione malloc

   Funzione free

   Funzioni calloc, realloc

   Modello di memoria

   Problemi di uso errato
Vai alla slide della lezione Massimo Poncino
Lezione n. 3: Ricorsione e programmi ricorsivi
   Definizione e motivazioni

   Analisi di funzioni ricorsive

   Ricorsione ed efficienza
Vai alla slide della lezione Massimo Poncino
Lezione n. 4: Programmazione modulare
   Gestione di progetti

   Regole di visibilità

   File di intestazione
Vai alla slide della lezione Massimo Poncino
Lezione n. 5: Liste lineari I
   Proprietà e limitazioni della rappresentazione tramite vettori

   Liste lineari

   Implementazione

   Varianti di liste
Vai alla slide della lezione Massimo Poncino
Lezione n. 6: Liste lineari II
   Primitive di gestione delle liste

   Implementazione in C

   Inizializzazione

   Ricerca

   Visita

   Inserimento

   Cancellazione
Vai alla slide della lezione Massimo Poncino
Lezione n. 7: Tipo di dato astratti I - pile e code
   Tipi di dato astratti

   L'ADT pila (stack)

   L'ADT coda
Vai alla slide della lezione Massimo Poncino
Lezione n. 8: Tipo di dato astratti II - code a priorità e alberi
   L'ADT coda a priorità

   Heap

   L'ADT Albero
Vai alla slide della lezione Massimo Poncino
Lezione n. 9: Algoritmi - introduzione e definizioni
   Concetto di algoritmo

   Aspetti legati agli algoritmi

   Progetto di algoritmi

   Analisi di algoritmi

   Analisi di complessità
Vai alla slide della lezione Massimo Poncino
Lezione n. 10: Analisi di complessità
   Proprietà della notazione asintotica

   Dipendenza dagli input

   Esempio: ordinamento per inserimento

   Esempio: ricerca binaria
Vai alla slide della lezione Massimo Poncino
Lezione n. 11: Analisi di programmi ricorsivi: ricorrenze
   Ricorrenze

   Serie e sommatorie

   Soluzioni di ricorrenze

   Metodo della sostituzione

   Metodo iterativo

   Metodo principale
Vai alla slide della lezione Massimo Poncino
Lezione n. 12: Algoritmi di ordinamento I
   Definizioni e assunzioni

   Classi di algoritmi di ordinamento

   Heapsort

   Heapsort: esempio
Vai alla slide della lezione Massimo Poncino
Lezione n. 13: Algoritmi di ordinamento II
   Quicksort

   Quicksort: esempio

   Analisi del quicksort

   Limiti teorici
Vai alla slide della lezione Massimo Poncino
Lezione n. 14: Algoritmi di ordinamento III
   Algoritmi di ordinamento con complessità lineare

   Counting sort

   Counting sort: esempio

   Stabilità di un algoritmo di ordinamento

   Conclusioni sull'ordinamento
Vai alla slide della lezione Massimo Poncino
Lezione n. 15: Insiemi dinamici e dizionari
   Insiemi dinamici e dizionari

   Implementazione dei dizionari

   Alberi binari di ricerca (BST)

   Visite di un BST

   Ricerca in un BST
Vai alla slide della lezione Massimo Poncino
Lezione n. 16: Alberi binari di ricerca
   Inserimento in un BST

   Cancellazione in un BST

   Caso peggiore in un BST
Vai alla slide della lezione Massimo Poncino
Lezione n. 17: Tabelle Hash
   Tabelle ad accesso diretto

   Tabelle hash

   Funzioni di hash

   Gestione delle collisioni

   Concatenazione

   Indirizziamento aperto
Vai alla slide della lezione Massimo Poncino
Lezione n. 18: Paradigmi algoritmici: Programmazione dinamica
   Progetto di un algoritmo

   Programmazione dinamica

   Un esempio: il cambio di monete
Vai alla slide della lezione Massimo Poncino
Lezione n. 19: Paradigmi algoritmici II: Il paradigma Greedy
   Il paradigma greedy

   Esempi di algoritmi greedy

   Programmazione dinamica e algoritmi greedy
Vai alla slide della lezione Massimo Poncino
Lezione n. 20: Paradigmi algoritmici III: Backtracking
   Paradigmi basati su ricerca

   Spazio delle soluzioni

   Backtracking

   Esempio
Vai alla slide della lezione Massimo Poncino
Lezione n. 21: I Grafi - Prima parte
   I grafi

   Definizioni e proprietà

   Rappresentazioni dei grafi
Vai alla slide della lezione Massimo Poncino
Lezione n. 22: I Grafi - Seconda parte
   L'ADT grafo

   Visite di grafi

   Algoritmo di visita generico
Vai alla slide della lezione Massimo Poncino
Lezione n. 23: Visite di grafi
   Visita in ampiezza

   Visita in profondità

   Etichette temporali

   Applicazioni
Vai alla slide della lezione Massimo Poncino
Lezione n. 24: Alberi di copertura minimi
   Alberi di copertura minimi

   Algoritmo generico

   Definizioni

   Algoritmo di Kruskal
Vai alla slide della lezione Massimo Poncino
Lezione n. 25: Percorsi minimi in un grafo
   Definizioni e proprietà

   Rilassamento

   Algoritmo di Dijkstra

   Algoritmo di Bellman-Ford
Vai alla slide della lezione Massimo Poncino
Lezione n. 26: Teoria della complessità
   Problemi intrattabili

   Problemi di decisione

   Nondeterminismo

   Problemi P e NP
Vai alla slide della lezione Massimo Poncino
Lezione n. 27: NP completezza e algoritmi approssimati
   Riducibilità

   Problemi NP-completi e NP-hard

   Problemi NP-completi classici

   Algoritmi approssimati ed euristiche
Vai alla slide della lezione Massimo Poncino