Corso di Studi in INFORMATICA,
Università di Pisa, Anno accademico 2000/2001
AVVISI
- Date degli orali:
- 31-05-2001 ore 9:00 aula BETA (oppure stanza del docente)
- 11-06-2001 ore 9:00 aula BETA
- 06-07-2001 ore 9:00 aula BETA
- 23-07-2001 ore 9:00 aula ALFA
- Progetto facoltativo da consegnare al momento dell'orale:
alberi AVL.
Docente
Prof.
Roberto Grossi
Pagina
Web principale Algoritmi
e Strutture Dati I
Calendario
delle lezioni previste
(25 lezioni + 15 esercitazioni
+ 2 esercitazioni di recupero)
|
Data |
Inizio |
Fine |
|
|
Data |
Inizio |
Fine |
|
|
Data |
Inizio |
Fine |
1 |
12
Feb |
9.00 |
11.00 |
|
16 |
8
Mar |
9.00 |
11.00 |
|
31 |
10
Apr |
11.00 |
13.00 |
2 |
13
Feb |
11.00 |
13.00 |
|
17 |
12
Mar |
9.00 |
11.00 |
|
32 |
11
Apr |
11.00 |
13.00 |
3 |
14
Feb |
11.00 |
13.00 |
|
18 |
13
Mar |
11.00 |
13.00 |
|
|
|
|
|
4 |
15
Feb |
9.00 |
11.00 |
|
19 |
14
Mar |
11.00 |
13.00 |
|
33 |
23
Apr |
9.00 |
11.00 |
5 |
19
Feb |
9.00 |
11.00 |
|
20 |
15
Mar |
9.00 |
11.00 |
|
34 |
24
Apr |
11.00 |
13.00 |
6 |
20
Feb |
11.00 |
13.00 |
|
21 |
19
Mar |
9.00 |
11.00 |
|
|
|
|
|
7 |
21
Feb |
11.00 |
13.00 |
|
22 |
20
Mar |
11.00 |
13.00 |
|
35 |
26
Apr |
9.00 |
11.00 |
8 |
22
Feb |
9.00 |
11.00 |
|
23 |
22
Mar |
9.00 |
11.00 |
|
36 |
30
Apr |
9.00 |
11.00 |
9 |
26
Feb |
9.00 |
11.00 |
|
24 |
22
Mar |
16.00 |
18.00 |
|
37 |
2
Mag |
11.00 |
13.00 |
10 |
27
Feb |
11.00 |
13.00 |
|
25 |
29
Mar |
9.00 |
10.00 |
|
38 |
3
Mag |
9.00 |
11.00 |
11 |
28
Feb |
11.00 |
13.00 |
|
26 |
2
Apr |
9.00 |
11.00 |
|
39 |
7
Mag |
9.00 |
11.00 |
12 |
1
Mar |
9.00 |
11.00 |
|
27 |
3
Apr |
11.00 |
13.00 |
|
40 |
8
Mag |
11.00 |
13.00 |
13 |
5
Mar |
9.00 |
11.00 |
|
28 |
4
Apr |
11.00 |
13.00 |
|
41 |
9 Mag |
11.00 |
13.00 |
14 |
6
Mar |
11.00 |
13.00 |
|
29 |
5
Apr |
9.00 |
11.00 |
|
42 |
10 Mag |
9.00 |
11.00 |
15 |
7
Mar |
11.00 |
13.00 |
|
30 |
9
Apr |
9.00 |
11.00 |
|
|
|
|
|
Calendario
dei ricevimenti durante il semestre
(3 ore a settimana)
|
Data |
Inizio |
Fine |
|
|
Data |
Inizio |
Fine |
|
|
Data |
Inizio |
Fine |
1 |
12
Feb |
14.30 |
17.30 |
|
5 |
12
Mar |
14.30 |
17.30 |
|
9 |
23
Apr |
14.30 |
17.30 |
2 |
19
Feb |
14.30 |
17.30 |
|
6 |
19
Mar |
14.30 |
17.30 |
|
10 |
30
Apr |
14.30 |
17.30 |
3 |
26
Feb |
14.30 |
17.30 |
|
7 |
2
Apr |
16:30 |
17.30 |
|
11 |
7
Mag |
14.30 |
17.30 |
4 |
5
Mar |
14.30 |
17.30 |
|
8 |
9
Apr |
14.30 |
17.30 |
|
12 |
14
Mag |
14.30 |
17.30 |
Il ricevimento si svolge nella stanza del docente, oppure in aula
ALFA/BETA, in Corso Italia 40, su richiesta. È fortemente
consigliato agli studenti che abbiano evidente
difficoltà nel seguire le lezioni. In tal caso, il
docente ripeterà i concetti principali delle lezioni da lui
tenute nella settimana corrente.
Contenuti
dettagliati delle lezioni
[I libri di testo
sono nelle
pagine principali. Premere
qui per una versione breve.]
Problemi, algoritmi e complessità
-
Presentazione del corso e dei suoi prerequisiti.
- Struttura e scopo, modalità di svolgimento delle
lezioni, esercitazioni ed esami, pagine Web [Pagina Web].
- Crescita polinomiale ed esponenziale [LP, cap.1].
- Prerequisiti e analisi asintotica delle funzioni.
- Prerequisiti matematici richiesti
[Pagina Web].
- Ordine di grandezza e comportamento asintotico. Notazione O,
Omega e Teta [CLR, cap.2].
- Confronto asintotico tra funzioni [CLR, cap.2].
-
Esercitazioni.
- Verifica dei prerequisiti.
- Ordini di grandezza, comportamento e confronto asintotico di
funzioni.
-
Formalizzazione di problemi, dati e algoritmi. Ordinamento e Insertion Sort.
- Cenni sulla rappresentazione dei dati elementari: bit, interi,
puntatori, caratteri/stringhe (ASCII e Unicode), reali (IEEE 754)
[Pagina Web].
- Formalizzazione di un problema mediante la notazione
matematica. Esempio dell'ordinamento [CLR, cap.1].
- Formalizzazione dell'algoritmo di risoluzione mediante un
linguaggio di programmazione. Pseudocodice adottato nel libro di testo
[CLR, cap.1].
- Progettazione di un algoritmo e verifica della
correttezza. Esempio dell'Insertion Sort [CLR, cap.1]
[Animazione].
-
Modello di calcolo RAM e analisi di complessità.
- Modello di computazione secondo von Neumann (Modello RAM = Random
Access Machine). Operazioni elementari supportate e ipotesi di costo
unitario [Pagina
Web]. Analisi di alcuni costrutti dello psudocodice adottato in
[CLR] [Pagina Web].
- Dimensione dei dati. Risorse computazionali (tempo e
spazio). Complessità asintotica di un problema e di un
algoritmo. Caso ottimo, caso medio e caso pessimo. Limite inferiore e
superiore di complessità, complessità polinomiale e
superpolinomiale [Lu, cap. 4 (solo le parti qui citate)].
- Analisi di complessità di un algoritmo al caso ottimo,
medio e pessimo. Esempio dell'Insertion Sort [CLR, cap.1].
-
Esercitazioni.
Formalizzazione del problema, progetto dell'algoritmo risolutore,
dimostrazione della correttezza e analisi della complessità al
caso pessimo:
- Ricerca del massimo in un vettore.
- Ricerca sequenziale di un elemento in un vettore.
-
Ricorsione: sua interpretazione mediante induzione e sua realizzazione
mediante pila.
- Relazione tra induzione e soluzione ricorsiva di un problema [Lu,
sez.3.1].
- Esempio di calcolo ricorsivo del massimo in un vettore [Lu,
sez.3.1].
- Realizzazione della ricorsione mediante pila delle chiamate
[Lu,
sez.6.5].
-
Algoritmi divide et impera (1): Calcolo del massimo in un
vettore. Primo e secondo elemento in un vettore. Ricerca binaria in un
vettore ordinato.
- Schema generale di un algoritmo ricorsivo divide et impera
e sua relazione con il principio di induzione [CLR, cap.1].
- Calcolo del massimo e del primo e secondo elemento in un vettore
con visualizzazione dell'esecuzione mediante pila [Lu, sez.3.1].
- Ricerca sequenziale e ricerca binaria in un vettore ordinato
(Esempio del vocabolario e dell'elenco telefonico) [Lu, cap.5 par.5.2.1]
[Pagina Web].
-
Algoritmi divide et impera (2): Equazioni di ricorrenza e
teorema principale. Analisi degli algoritmi divide et
impera.
- Schema generale DIVetIMP per un algoritmo ricorsivo divide et
impera [Lu, cap.3, par 3.4].
- Impostazione e risoluzione delle equazioni di ricorrenza per DIVetIMP con esempi:
- massimo (1): T(n) = T(n-1) + O(1);
- massimo (2) e primo/secondo : T(n) = 2 T(n/2) + O(1);
- Metodo di sostituzione (cenni) e iterativo [CLR, cap.4].
- Metodo principale e teorema principale [CLR, cap.4].
-
Algoritmi divide et impera (3): Applicazioni del teorema
principale. MergeSort.
- Ordinamento con il MergeSort [CLR, cap.1] [Lu, cap.5
par.5.3.2] [Codice Java]
[Animazione].
- Applicazioni del teorema principale:
- ricerca binaria : T(n) = T(n/2) + O(1);
- MergeSort : T(n) = 2 T(n/2) + O(n);
-
Algoritmi divide et impera (4): Moltiplicazione veloce di
interi lunghi. Generazione delle permutazioni e delle sequenze binarie.
- Moltiplicazione rapida di interi lunghi: T(n) = 3 T(n/2) + O(n) [Lu, cap.5 par.5.2.2]
[Pagina Web].
- Generazione delle sequenze binarie in ordine lessicografico: T(n)
= 2 T(n-1) + O(1).
- Generazione di tutte le permutazioni di un insieme: T(n) = n
T(n-1) + O(n) [Lu, cap.3].
- Esercitazioni con la ricorsione e la risoluzione delle equazioni
di ricorrenza [Pagina Web].
Ordinamento e selezione
-
Heap e HeapSort.
- Definizione di heap [CLR, cap.7 par 7.1].
- Mantenimento della proprietà di heap [CLR, cap.7 par 7.2].
- Costruzione di uno heap [CLR, cap.7 par 7.3].
- L'algoritmo HeapSort [CLR, cap.7 par 7.4].
-
Esercitazioni.
Animazione dei seguenti algoritmi [Animazione]:
- InsertionSort
- MergeSort
- HeapSort
-
QuickSort.
- Animazione del QuickSort [Animazione].
- Descrizione del QuickSort [CLR, cap.8 par 8.1].
- Versione randomizzata del QuickSort [CLR, cap.8 par 8.3].
-
Tecniche di base per i limiti inferiori.
Limite inferiore all'ordinamento per confronti.
- Tecniche di base per i limiti inferiori [Lu, cap.4 par 4.2].
- Limite inferiore all'ordinamento per confronti [CLR, cap.9 par 9.1].
-
Mediano e k-esimo elemento.
- Selezione del mediano e del k-esimo elemento [CLR, cap.10
par 10.1-10.2].
- Counting Sort e Radix Sort (lezione svolta il 14/3).
- Descrizione e analisi di Counting Sort e Radix Sort
[CLR, cap.9 par 9.2-9.3].
- Animazione di Counting Sort e Radix Sort [Animazione].
- Lettura consigliata di Bucket Sort [CLR, cap.9 par 9.4].
Strutture di dati e algoritmi di ricerca
-
Strutture informative di base (I): pile, code e liste.
- Cenni su pile e code (visti nella lezione del 12/3) [CLR, cap.11 par 11.1].
- Liste concatenate, loro rappresentazione e operazioni supportate [CLR, cap.11 par 11.2].
- Un esempio ragionato di liste annidate [Pagina
Web].
-
Esercitazioni.
- Cancellazione di tutte le occorrenze di chiavi in liste annidate [Pagina
Web].
- Cancellazione di un elemento dallo heap [Pagina Web].
- Animazione di QuickSort e RadixSort [Animazione].
-
Dizionari. Tabelle hash (1): liste concatenate.
- Il problema del dizionario [CLR, Parte III (introduzione)].
- Concetto di funzione hash con esempi [CLR, cap.12 par 12.3].
- Collisioni e loro gestione mediante liste concatenate [CLR, cap.12 par 12.2].
-
Tabelle hash (2): indirizzamento aperto.
- Analisi della gestione mediante liste concatenate [CLR, cap.12
par 12.2]
[Pagina Web].
- Indirizzamento aperto: scansione lineare, quadratica e doppio
hash [CLR, cap.12 par 12.4 senza analisi].
-
Esercitazioni preparatorie alla prima verifica.
- Risoluzione di alcuni degli esercizi forniti nel materiale
didattico [Pagina Web].
- Risoluzione di alcuni degli esercizi delle verifiche degli anni
passati [Pagina Web].
-
Esercitazioni preparatorie alla prima verifica.
- Risoluzione di alcuni degli esercizi forniti nel materiale
didattico [Pagina Web].
- Risoluzione di alcuni degli esercizi delle verifiche degli anni
passati [Pagina Web].
-
Discussione delle soluzioni agli esercizi proposti nella prima verifica (1 ora).
-
Esercitazioni sulle liste
[Pagina Web].
-
Strutture informative di base (II): alberi radicati.
- Pile e code [CLR, cap.11 par 11.1].
- Alberi liberi, radicati e ordinati [CLR, cap.5 par 5.5].
- Rappresentazione di alberi e loro visita [CLR, cap.11 par 11.4]
[Lu, cap.6 par 6.2].
-
Alberi binari di ricerca.
- Definizione di albero binario di ricerca con esempi [Lu, cap.5
par 5.2.1] [CLR, cap.13 par 13.1].
- Ricerca in un albero binario di ricerca e relazione con la
ricerca binaria [Lu, cap.5
par 5.2.1] [CLR, cap.13 par 13.2].
- Successore, predecessore, inserzione e cancellazione in un albero
binario di ricerca [CLR, cap.13 par 13.3].
-
Alberi bilanciati (1): alberi AVL (prima parte).
- Problema del ribilanciamento. Definizione di 1-bilanciamento e
alberi AVL [Lu, cap.5 par 5.2.1] [Bi, cap.10 par 10.1].
- Altezza logaritmica degli AVL: alberi di Fibonacci [Lu, cap.5 par 5.1.2] [Bi, cap.10 par 10.1].
-
Alberi bilanciati (1): alberi AVL (seconda parte).
- Rotazioni (SS, DS, SD, DD), inserimento e cancellazione logica in
un AVL [Lu, cap.5 par 5.2.1] [Bi, cap.10 par 10.1].
- Esempi di inserimenti con rotazioni.
-
Esercitazioni su alberi binari di ricerca e alberi AVL [Pagina
Web].
-
Alberi bilanciati (2): alberi 2-3-4 e B-alberi.
- B-Alberi e loro uso in memoria secondaria [CLR, cap.19 (introduzione)].
- Definizione di B-alberi [CLR, cap.19 par 19.1].
- Ricerca e inserimento in un B-albero [CLR, cap.19 par 19.2].
- Altezza logaritmica dei B-alberi [CLR, cap.19 par 19.1].
Algoritmi su grafi. Intrattabilità e NP-completezza.
-
Grafi e visite in ampiezza (BFS) e profondità (DFS).
- Terminologia sui grafi [CLR, cap.5 par 5.4].
- Rappresentazione di grafi [CLR, cap.23 par 23.1].
- Visita in ampiezza (BFS) [CLR, cap.23 par 23.2].
- Visita in profondità (DFS) [CLR, cap.23 par 23.3].
-
Esercitazioni su B-alberi e grafi [Pagina
Web].
-
Esercitazioni su grafi [Pagina
Web].
- Grafi diretti aciclici (DAG) e ordinamento topologico.
Algoritmi di enumerazione.
- Oridnamento topologico [CLR, cap.23 par 23.4].
- Algoritmi di enumerazione, con esempi [Lu, cap.7 par 7.1.1 e 7.2.2].
-
Classi P e NP. Nozione di NP-completezza.
- Problemi in P e NP [CLR, cap.36 par 36.1].
- Verifica in tempo polinomiale e certificati [CLR, cap.36 par 36.2].
- NP-completezza e riducibilità [CLR, cap.36 par 36.3].
-
Discussione di alcuni problemi NP-completi.
- Dimostrazioni di NP-completezza, con esempi [CLR, cap.36 par 36.4].
-
Esercitazioni su enumerazione e NP-completezza
[Pagina Web].
-
Esercitazioni preparatorie alla seconda verifica [Pagina Web].
-
Esercitazioni preparatorie alla seconda verifica [Pagina Web].
-
Esercitazioni preparatorie alla seconda verifica [Pagina Web].
Letture facoltative
- Alberi rosso-neri (red-black trees), Capitolo 14 del testo [CLR]
- Alberi di intervalli (interval trees), Capitolo 15 del testo [CLR]
- Programmazione dinamica, Capitolo 16 del testo [CLR]
- Algoritmi greedy e codici di Huffman per la compressione dati,
Capitolo 17 del testo [CLR]
- Insiemi disgiunti (union-find), Capitolo 22 del testo [CLR]
- Alberi di copertura minimi, Capitolo 24 del testo [CLR]
- String matching esatto, Capitolo 34 del testo [CLR]
- Inviluppo convesso (convex hull), Capitolo 35 del testo [CLR]
- Liste con salti (skip lists), Capitolo 12 in Weiss [W]
- Alberi di ricerca randomizzati (treaps), Capitolo 12 in Weiss [W]
- k-d-alberi (k-d-trees), Capitolo 12 in Weiss [W]
Programma
d'esame degli anni passati