CORSO DI LABORATORIO DI ALGORITMI E STRUTTURE DATI

CORSO DI LABORATORIO DI ALGORITMI E STRUTTURE DATI - A.A. 2005/2006
Programma dettagliato delle lezioni svolte
Docente: Giovanna Melideo
[email protected]
http://www.di.univaq.it/melideo/index-personal.htm
1. Martedì 4 ottobre ore 17
Presentazione del corso.
Richiami: Strutture dati elementari (array, strutture, liste). Concetto tipo di dato astratto (ADT).
Esempi: un ADT per i punti del piano, un ADT per la gestione di liste.
Rif. [1], capp. 3 e 4 - disponibile materiale integrativo online
2. Giovedì 6 ottobre ore 15
Un ADT per la gestione di liste (continuazione) e suo uso per la definizione di alcune funzioni
derivate per l'elaborazione delle liste.
Definizione alternativa di una interfaccia per l'elaborazione delle liste e esempio di applicazione.
Rif. [1], capp. 3 e 4 - disponibile materiale integrativo online
3. Venerdì 7 ottobre ore 11:30
Esercitazione: ordinamento per inserzione di una lista (Insertionsort), svolgimento esercizi vari
Disponibile materiale integrativo online
4. Martedì 11 ottobre ore 17
ADT Stack.
Interfacce per l'elaborazione di stack e relative implementazioni.
Rif. [1], cap. 4 - disponibile materiale integrativo online
5. Giovedì 13 ottobre ore 15
Esercitazione: esempio di client dell'ADT Stack (conversione di un'espressione da forma infissa a
forma postfissa e valutazione di un'espressione postfissa).
ADT Queue.
Interfacce per l'elaborazione di code e relative implementazioni mediante liste concatenate e array
(buffer circolare).
Rif. [1], cap. 4 - disponibile materiale integrativo online
6. Venerdì 14 ottobre ore 11:30
Alberi: definizioni, proprietà, ADT Btree.
Definizione di una interfaccia per l'elaborazione degli alberi binari e esempi di applicazione.
Rif. [1], cap. 5 - disponibile materiale integrativo online
7. Martedì 18 ottobre ore 17
Visite di alberi: visite in profondità ricorsive e iterative (prima versione): metodi preorder, inorder,
postorder.
Rif. [1], cap. 5 - disponibile materiale integrativo online
8. Giovedì 20 ottobre ore 15
Visite di alberi: visite iterative inorder e postorder (seconda versione ) e visita in ampiezza
(levelorder) (vedi codice lezione precedente).
Esercitazione: svolgimento esercizi vari basati sulle visite degli alberi.
Rif. [1], cap. 5 - disponibile materiale integrativo online
9. Venerdì 21 ottobre ore 11:30
Ordinamento di array: metodi elementari (Insertionsort, Selectionsort, Bubblesort).
Definizione di una interfaccia per l'ordinamento di array e relativi esempi di applicazione su array di
caratteri e array di stringhe.
Rif. [1], cap. 6 - disponibile materiale integrativo online
1
10. Giovedì 27 ottobre ore 9:30
Ordinamento di array: Quicksort (implementazioni ricorsiva ed iterativa della versione base),
Quicksort con partizionamento a tre vie; Mergesort: merging a due vie e merging astratto sul posto;
Mergesort top-down, Mergesort bottom-up.
Rif. [1], §§ 7.1--7.3, 7.6, 8.1--8.3, 8.5 - disponibile materiale integrativo online
11. Giovedì 27 ottobre ore 15
Esercitazione: ordinamento di termini di un polinomio.
Ordinamento di liste concatenate: Insertionsort, Selectionsort, Mergesort.
Tipo puntatore generico void *, funzioni per la manipolazione di blocchi di memoria (memcpy,
memmove), ordinamento di array "generici" (avanzato).
Rif. [1], §§ 3.4 (programma 3.11), 6.9, 8.7 - disponibile materiale integrativo online
12. Venerdì 28 ottobre ore 11:30
ADT Coda con priorità. Implementazioni elementari.
La struttura dati heap: ripristino dei vincoli di uno heap (funzioni FixUp, FixDown), inserimento e
cancellazione di elementi. Costruzione top-down e bottom-up di uno heap.
Coda con priorità basata su heap. Applicazione: uso delle code con priorità per l'ordinamento di
valori.
Heapsort.
Rif. [1], §§ 9.1--9.4 - disponibile materiale integrativo online
13. Giovedì 3 novembre ore 15
Esercitazione.
14. Venerdì 4 novembre ore 11:30
Esercitazione.
Disponibile materiale integrativo online
15. Martedì 15 novembre ore 17
Correzione prova intermedia.
ADT Tabella di Simboli (ST): introduzione e discussione sui diversi approcci implementativi.
Rif. [1], § 12.1
16. Giovedì 17 novembre ore 15
Alberi binari di ricerca (BST): definizione, ricerca ed inserimento di un elemento (versioni ricorsiva ed
iterativa). Rotazioni su BST.
Applicazione: uso di BST per ordinamento.
Rif. [1], §§ 12.5, 12.8 - disponibile materiale integrativo ondine
17. Venerdì 18 novembre ore 11:30
BST: inserimento di un elemento alla radice, cancellazione di un elemento e unione di BST (vedi
codice lezione precedente: rif. BST2.c).
Rotazioni doppie in un BST.
Rif. [1], §§ 12.8, 12.9
18. Martedì 22 novembre ore 17
Splay BST: inserimento splay in un BST
Alberi 2-3-4 top-down.
Alberi red-black: 3-nodi e 4-nodi; scomposizione di 4-nodi; algoritmo di inserimento in un BST redblack con rotazioni.
Rif. [1], §§ 13.2--13.4 - disponibile materiale integrativo online
19. Giovedì 24 novembre ore 15
Inserimento in un BST red-black con rotazioni.
Alberi AVL: definizione della struttura dati; relazione tra BST red-black e alberi AVL
ADT ST: esempio di interfaccia per la gestione di ST e relativa implementazione mediante array
ordinati; funzioni di ricerca sequenziale, binaria e per interpolazione.
Rif. [1], §§ 13.4, 12.3--12.5 - disponibile materiale integrativo online
2
20. Lunedì 28 novembre ore 15 (3h)
Grafi: definizioni e rappresentazioni mediante matrice di adiacenza, liste di adiacenza, matrice di
incidenza e liste di archi.
Definizione di interfacce per la gestione di grafi non etichettati rappresentati mediante liste di
adiacenza e matrice di adiacenza.
Rif. [1], § 3.7; Rif. [2], § 11.2 - disponibile materiale integrativo online
21. Giovedì 1 dicembre ore 9:30
Visite di grafi. Implementazioni: visita ricorsiva in profondità e visite iterative in ampiezza ed in
profondità.
Rif. [1], § 5.8 - disponibile materiale integrativo online
22. Giovedì 1 dicembre ore 15
Esercitazione: albero dei cammini minimi in grafi non etichettati (vedi codice lezione precedente);
soluzione di alcuni esercizi sui grafi.
Grafi etichettati. Albero dei cammini minimi in grafi etichettati (approccio Dijkstra).
Disponibile materiale integrativo online
23. Lunedì 5 dicembre ore 15 (3h)
Union-Find: Algoritmi Quick-Find e Quick-Union.
Euristiche: bilanciamento nell'operazione Union (Union by rank e Union by size) e compressione
nell'operazione Find (Find by compression e Find by splitting) .
Applicazioni: verifica della connessione di un grafo non orientato; implementazione algoritmo di
Kruskal per la ricerca del minimo albero ricoprente in un grafo non orientato etichettato.
Rif. [1] §1.3, [2] cap.9 - disponibile materiale integrativo online
24. Martedì 6 dicembre ore 17
Esercitazione.
Legenda: testi di riferimento
[1] "Algoritmi in C", terza ed., di Robert Sedgewick, edito da Addison-Wesley, 2002.
[2] "Algoritmi e strutture dati", C. Demetrescu, I. Finocchi, G.F. Italiano, edito da MacGraw Hill.
3