Concetti di algoritmo, di struttura dati, di efficienza; di costo computazionale; di problem solving e di problema computazionale.
Giovedì 29 Febbraio 2024 - Lezioni 3-4-5Notazione asintotica
Definizione e significato degli insiemi O, Ω e Θ
Algebra della notazione asintotica
Metodo del limite
Esempi
Lunedì 4 Marzo 2024 - Lezioni 6-7Valutazione del costo computazionale (1)
Pseudocodice
Valutazione del costo computazionale di un algoritmo
Un primo esempio
Esempi di problemi che si possono risolvere in modo più o meno efficiente e loro costo computazionale
somma dei primi n interi
valutazione di un polinomio in un punto
Giovedì 7 Marzo 2024 - Lezioni 8-9-10Valutazione del costo computazionale (2)
Esercizi svolti
Il problema della ricerca
ricerca sequenziale e suo costo computazionale nel caso migliore, peggiore e medio
ricerca binaria e suo costo computazionale nel caso migliore, peggiore e medio
Lunedì 11 Marzo 2024 - Lezioni 11-12Ricorsione (1)
funzioni matematiche ricorsive
algoritmi ricorsivi
fattoriale: pseudocodice iterativo e ricorsivo;
ricerca sequenziale: pseudocodice ricorsivo;
ricerca binaria: pseudocodice ricorsivo;
equazione di ricorrenza degli algoritmi ricorsivi già visti (fattoriale; ricerca sequenziale; ricerca binaria; numeri di Fibonacci)
esempi di algoritmi ricorsivi (potenza di n alla k, somma degli elementi di un array, minimo in un array, array palindromo): pseudocodice ricorsivo e calcolo dell'equazione di ricorrenza.
Giovedì 14 Marzo 2024 - Lezioni 13-14-15Ricorsione (2)
esempi di algoritmi ricorsivi (stampa dei valori in un array, Torri di Hanoi): pseudocodice ricorsivo e calcolo dell'equazione di ricorrenza;
Soluzioni delle equazioni di ricorrenza (1)
metodi risolutivi (1):
metodo iterativo
metodo di sostituzione;
metodo dell'albero.
Lunedì 18 Marzo 2024 - Lezioni 16-17Soluzioni delle equazioni di ricorrenza (2)
metodi risolutivi (2):
metodo principale
esempi di soluzione di equazioni di ricorrenza (1)
Giovedì 21 Marzo 2024 - Lezioni 18-19-20Soluzioni delle equazioni di ricorrenza (3)
esempi di soluzione di equazioni di ricorrenza (2)
Lunedì 24 Marzo 2024 - Lezioni 21-22Soluzioni delle equazioni di ricorrenza (4)
esempi di soluzione di equazioni di ricorrenza (3)
Il problema dell'ordinamento (2)
albero delle decisioni e teorema sulla limitazione inferiore per il costo computazionale di un algoritmo per confronti
Giovedì 28 Marzo 2024 e Lunedì 1 Aprile 2024 vacanze Pasquali
Giovedì 4 Aprile 2024 - Lezioni 23-24-25Il problema dell'ordinamento (3)
algoritmi efficienti (1):
paradigma del Divide et Impera
merge sort (pseudocodice e costo computazionale, pseudocodice della funzione Fondi)
problematica dell'ordinamento in loco: una parentesi sull'uso della memoria secondaria
quick sort (idea e pseudocodice, costo computazionale nei casi migliore e peggiore)
pseudocodice della funzione Partiziona
un esercizio svolto: Tim Sort (Merge Sort + Insertion Sort per il caso base)
Lunedì 8 Aprile 2024 - Lezioni 26-27Il problema dell'ordinamento (4)
algoritmi efficienti (2):
quick sort (costo computazionale nel caso medio, randomizzazione)
Giovedì 11 Aprile 2024 - Lezioni 28-29-30Il problema dell'ordinamento (5)
algoritmi efficienti (3):
heap sort: struttura dati heap; Heapify (pseudocodice e costo computazionale) e BuildHeap (pseudocodice)
Heap sort (pseudocodice e costo computazionale)
Lunedì 15 Aprile 2024 - Lezioni 31-32Il problema dell'ordinamento (4)
algoritmi lineari
counting sort (versione semplificata e versione completa)
bucket sort (idea)
Strutture dati fondamentali (1)
strutture dati ed insiemi dinamici
confronto tra array qualunque e array ordinato
Giovedì 18 Aprile 2024 - Lezioni 33-34-35Strutture dati fondamentali (2)
liste puntate
introduzione alle liste concatenate: ricerca e inserimento in testa
cancellazione nelle liste concatenate
pila
le operazioni Push e Pop
coda
le operazioni enqueue e dequeue
code con priorità
Lunedì 22 Aprile 2024 - Lezioni 36-37Strutture dati fondamentali (3)
Esercizio svolto: simulazione di una coda tramite due pile
Esercizi svolti sulle liste
Giovedì 25 Aprile 2024 - festa della LiberazioneLunedì 29 Aprile 2024 - ponte con la festa dei lavoratoriGiovedì 2 Maggio 2024 - Lezioni 38-39-40Strutture dati fondamentali (4)
alberi (1)
definizione tramite la nozione di grafo
caratterizzazione degli alberi
memorizzazione degli alberi:
tramite record e puntatori
posizionale
tramite vettore dei padri
confronto delle tre memorizzazioni
Ancora esercizi svolti sulle liste
Lunedì 6 Maggio 2024 - Lezioni 41-42 Strutture dati fondamentali (5)
alberi (2) * visite di alberi: in-ordine, pre-ordine e post-ordine
pseudocodice ricorsivo per memorizzazione con record e puntatori
costo computazionale tramite equazione di ricorrenza e metodo di sostituzione
esercizi che si risolvono utilizzando le visite: numero di nodi di un albero, ricerca in un albero
pseudocodice ricorsivo per memorizzazione con vettore dei padri e costo computazionale
visita per livelli
esercizi svolti: calcolo dell'altezza e del numero di nodi ad un dato livello
Giovedì 9 Maggio 2024 - Lezioni 43-44-45 Strutture dati fondamentali (6)
alberi (3)
esercizi svolti: calcolo dell'altezza e del numero di nodi ad un dato livello; trasformazione da memorizzazione tramite vettore dei padri a notazione posizionale
dizionari
tabelle ad indirizzamento diretto
tabelle hash
collisioni
liste di trabocco
tabelle ad indirizzamento aperto
tabelle hash
hashing doppio
Strutture dati fondamentali (7)
Alberi binari di ricerca (ABR) (1):
definizione e proprietà dell' "ordinamento orizzontale"
algoritmo per la ricerca
Questionari Opis. Codice: SIHRI6GK Lunedì 13 Maggio 2024 - Lezioni 46-47 Strutture dati fondamentali (7)
Alberi binari di ricerca (ABR) (2):
algoritmo per il massimo e minimo
algoritmo per il successore e predecessore
algoritmo di inserimento
osservazioni sul costo computazionale delle operazioni viste come funzione dell'altezza
Giovedì 16 Maggio 2024 - Lezioni 48-49-50 Strutture dati fondamentali (8)
Alberi binari di ricerca (ABR) (3):
Esercizi svolti sugli ABR
alberi bilanciati: alberi rosso-neri
dimostrazione che gli alberi rosso-neri hanno altezza logaritmica
rotazioni
algoritmo di inserimento
Lunedì 20 Maggio 2024 - Lezioni 51-52
Esercizi ripeilogativi
Giovedì 23 Maggio 2024 - Lezioni 53-54-55
Esercizi ripeilogativi
Lunedì 27 Maggio 2024 - Lezioni 56-57
Esercizi ripeilogativi
A.A. 2022/2023
Lunedì 20 Febbraio 2023 - Lezioni 1-2Introduzione (1)
Informazioni sul corso.
Concetti di algoritmo, di struttura dati, di efficienza; di costo computazionale; di problem solving e di problema computazionale.
Giovedì 23 Febbraio 2023 - Lezioni 3-4-5Notazione asintotica
Definizione e significato degli insiemi O, Ω e Θ
Algebra della notazione asintotica
Metodo del limite
Esempi
Esercizi assegnati:
Dimostrare le regole relative all'algebra della notazione asintotica che non sono state dimostrate a lezione
Calcolare l'ordine asintotico stretto di alcune funzioni assegnate.
Lunedì 27 Febbraio 2023 - Lezioni 6-7Valutazione del costo computazionale (1)
Pseudocodice
Valutazione del costo computazionale di un algoritmo
Un primo esempio
Esempi di problemi che si possono risolvere in modo più o meno efficiente e loro costo computazionale
somma dei primi n interi
valutazione di un polinomio in un punto
Esercizi assegnati:
Calcolare il costo computazionale del Selection, dell'Insertion Sort e del Bubble Sort (pseudocodice sulle slides)
Giovedì 2 Marzo 2023 - Lezioni 8-9-10Valutazione del costo computazionale (2)
Esercizi svolti
Il problema della ricerca (1)
ricerca sequenziale e suo costo computazionale nel caso migliore, peggiore e medio
Lunedì 6 Marzo 2023 - Lezioni 11-12Il problema della ricerca (2)
ricerca binaria e suo costo computazionale nel caso migliore, peggiore e medio
Ricorsione (1)
funzioni matematiche ricorsive
algoritmi ricorsivi
fattoriale: pseudocodice iterativo e ricorsivo;
ricerca sequenziale: pseudocodice ricorsivo;
ricerca binaria: pseudocodice ricorsivo;
Esercizi assegnati:
Progettare degli algoritmi che calcolino quanti elementi di un array appartengono all'intervallo chiuso [a,b] sotto varie ipotesi.
Giovedì 9 Marzo 2023 - Lezioni 13-14-15Ricorsione (2)
equazione di ricorrenza degli algoritmi ricorsivi già visti (fattoriale; ricerca sequenziale; ricerca binaria; numeri di Fibonacci)
esempi di algoritmi ricorsivi (potenza di n alla k, somma degli elementi di un vettore, minimo in un array, vettore palindromo, stampa dei valori in un array, Torri di Hanoi): pseudocodice ricorsivo e calcolo dell'equazione di ricorrenza;
Soluzioni delle equazioni di ricorrenza (1)
metodi risolutivi (1):
metodo iterativo
Esercizi assegnati:
Progettare degli algoritmi ricorsivi ed esprimerli tramite pseudocodice che risolvano i seguenti problemi:
calcolare il coefficiente binomiale n sopra k;
calcolare il MCD tra due interi positivi x ed y come segue:
sia y<x
se y=0 allora MCD(x,y)=y
altrimenti MCD(x,y))MCD(y, x%y) (dove x%y indica il resto della divisione intera tra x e y)
Lunedì 13 Marzo 2023 - Lezioni 16-17
Soluzioni delle equazioni di ricorrenza (2)
metodi risolutivi (2):
metodo di sostituzione;
metodo dell'albero.
Esercizi assegnati:
Risolvere con i primi tre metodi alcune equazioni di ricorrenza assegnate
Giovedì 16 Marzo 2023 - Lezioni 18-19-20
Soluzioni delle equazioni di ricorrenza (2)
metodi risolutivi (3):
metodo principale
esempi di soluzione di equazioni di ricorrenza (1)
Esercizi assegnati:
Risolvere con tutti i metodi alcune equazioni di ricorrenza assegnate
Lunedì 20 Marzo 2022 - Lezioni 21-22
Soluzioni delle equazioni di ricorrenza (3)
esempi di soluzione di equazioni di ricorrenza (2)
Esercizi assegnati:
Risolvere alcune equazioni di ricorrenza assegnate
Giovedì 23 Marzo 2023 - Lezioni 23-24-25
Il problema dell'ordinamento (1)
albero delle decisioni e teorema sulla limitazione inferiore per il costo computazionale di un algoritmo per confronti
algoritmi efficienti (1):
paradigma del Divide et Impera
Esercizi assegnati:
Calcolare il costo computazionale dell'algoritmo di Insertion Sort in cui la posizione dell'elemento da inserire viene determinata tramite ricerca binaria.
Scrivere in pseudocodice una funzione che, dato un array A ed un indice j, calcoli il valore minimo nel sottoarray A[j..n]. Riscrivere lo pseudocodice del selection sort che utilizzi ripetutamente questa funzione.
Modificare l'algoritmo di Bubble Sort in modo che non prosegua la computazione se l’array risulta ordinato (con l'aggiunta di una flag).
Dato un array di n elementi, verificare se contiene occorrenze ripetute dello stesso elemento
Lunedì 27 Marzo 2023 - Lezioni 26-27
Il problema dell'ordinamento (2)
algoritmi efficienti (2)
merge sort (pseudocodice e costo computazionale, pseudocodice della funzione Fondi, problematica dell'ordinamento in loco)
cosa non va nel merge sort: una parentesi sull'uso della memoria secondaria
quick sort (idea e pseudocodice)
pseudocodice della funzione Partiziona
un esercizio svolto: Tim Sort (Merge Sort + Insertion Sort per il caso base)
Esercizi assegnati:
Scrivere la funzione di fusione ricorsiva
Scrivere Merge Sort iterativo
Giovedì 30 Aprile 2023 - Lezioni 28-29-30
Il problema dell'ordinamento (3)
quick sort (costo computazionale nei casi migliore e peggiore, costo computazionale nel caso medio, randomizzazione)
heap sort: struttura dati heap; Heapify (pseudocodice e costo computazionale) e BuildHeap (pseudocodice)
Esercizi assegnati:
Sia dato un array di lunghezza n contenente solo valori 0 e 2. Si progetti un algoritmo con costo computazionale lineare che modifichi l'array in modo che tutte le occorrenze di 0 si trovino più a sinistra di tutte le occorrenze di 2.
Si considerino i valori 0 1 2 3 4 5 6 7. Si determini una permutazione di questi valori che generi il caso peggiore per l'algortimo Quick sort.
Calcolare il costo computazionale del Quick sort nel caso in cui l'array contenga tutti elementi uguali.
Lunedì 3 Aprile 2023 - Lezioni 31-32
Il problema dell'ordinamento (4)
algoritmi efficienti:
Build Heap (costo computazionale)
Heap sort (pseudocodice e costo computazionale)
algoritmi lineari
counting sort (versione semplificata e versione completa)
bucket sort (idea)
Esercizi assegnati:
Scrivere una funzione che restituisca il valore minimo di un HeapMax e calcolarne il costo computazionale
Scrivere Heapsort sfruttando la struttura dati HeapMin
Scrivere la funzione di inserimento in un HeapMax e calcolarne il costo computazionale
VACANZE PASQUALI: giovedì 6 aprile e lunedì 10 aprileGiovedì 13 Aprile 2023 - Lezioni 33-34-35
Strutture dati fondamentali (1)
strutture dati ed insiemi dinamici
confronto tra array qualunque e array ordinato
introduzione alle liste concatenate: ricerca e inserimento in testa
cancellazione nelle liste concatenate
Esercizi assegnati:
vari esercizi di manipolazione delle liste.
Lunedì 17 Aprile 2023 - Lezioni 36-37
Strutture dati fondamentali (2)
pila
le operazioni Push e Pop
code con priorità
la struttura dati coda
le operazioni enqueue e dequeue
Esercizio svolto: simulazione di una coda tramite due pile
Esercizio svolto: inserimento in una lista ordinata (versione iterativa e ricorsiva)
Esercizi assegnati:
scrivere lo pseudocodice delle funzioni Enqueue e Dequeue quando la coda sia circolare ed implementata su array
scrivere lo pseudocodice delle funzioni Pop, Push e Pila_Piena quando la pila sia implementata su array
Giovedì 20 Aprile 2023 - Lezioni 38-39-40
Strutture dati fondamentali (3)
Esercizi svolti sulle liste
Lunedì 24 Aprile 2023 - Ponte con la festa della Liberazione Giovedì 27 Aprile 2023 - Lezioni 41-42-43
Strutture dati fondamentali (4)
alberi (1)
definizione tramite la nozione di grafo
caratterizzazione degli alberi
memorizzazione degli alberi:
tramite record e puntatori
posizionale
tramite vettore dei padri
confronto delle tre memorizzazioni * visite di alberi: in-ordine, pre-ordine e post-ordine
pseudocodice ricorsivo per memorizzazione con record e puntatori
costo computazionale tramite equazione di ricorrenza e metodo di sostituzione
esercizi che si risolvono utilizzando le visite: numero di nodi di un albero, ricerca in un albero
Esercizi assegnati:
scrivere lo pseudocodice di una funzione che, dato un albero in notazione posizionale, lo restituisca tramite vettore dei padri
scrivere lo pseudocodice di una funzione che, dato un albero tramite vettore dei padri, lo restituisca in notazione posizionale
Lunedì 1 Maggio 2023 - Festa del lavoro Giovedì 4 Maggio 2023 - Lezioni 44-45-46
Strutture dati fondamentali (5)
alberi (2)
visite di alberi
pseudocodice ricorsivo per memorizzazione con vettore dei padri e costo computazionale
visita per livelli
esercizi svolti: calcolo dell'altezza e del numero di nodi ad un dato livello; trasformazione da memorizzazione tramite vettore dei padri a notazione posizionale
dizionari (1)
tabelle ad indirizzamento diretto
tabelle hash
collisioni
liste di trabocco
tabelle ad indirizzamento aperto
Questionari Opis. Codice: 4AEFX2KF
Esercizi assegnati:
Pseudocodice iterativo della visita in preordine
Lunedì 8 Maggio 2023 - Lezioni 47-48
Strutture dati fondamentali (6)
dizionari (2)
tabelle hash
hashing doppio
Alberi binari di ricerca (ABR) (1):
definizione e proprietà dell' "ordinamento orizzontale"
algoritmo per il massimo e minimo
algoritmo per il successore e predecessore
algoritmo di inserimento
osservazioni sul costo computazionale delle operazioni viste come funzione dell'altezza
Giovedì 11 Maggio 2023 - Lezioni 49-50-51
Strutture dati fondamentali (7)
Alberi binari di ricerca (ABR) (2):
Esercizi svolti sugli ABR
alberi bilanciati: alberi rosso-neri
dimostrazione che gli alberi rosso-neri hanno altezza logaritmica
rotazioni
algoritmo di inserimento
Lunedì 15 Maggio 2023 - Laurea honoris causa a Silvio Micali Giovedì 18 Maggio 2023 - no lezione per indisponibilità dell'aula Lunedì 22 Maggio 2023 - Lezioni 52-53
Esercizi ripeilogativi
Giovedì 25 Maggio 2023 - Lezioni 54-55-56
Esercizi ripeilogativi
Lunedì 29 Maggio 2023 - Lezioni 57-58
Esercitazione d'esame
-- Tiziana Calamoneri - 2024-02-27