Introduzione alla gestione delle
collezioni di oggetti
Alcune tecniche di base
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Un esempio: l’ADT Dizionario
(mutabile)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Un esempio: l’ADT Pila
(mutabile)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Un esempio: l’ADT Coda
(mutabile)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Tecniche di rappresentazione dei dati
Rappresentazioni indicizzate:
• I dati sono contenuti in array
Rappresentazioni collegate:
• I dati sono contenuti in record collegati fra
loro mediante puntatori
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Pro e contro
Rappresentazioni indicizzate:
• Pro: accesso diretto ai dati mediante indici
• Contro: dimensione fissa (riallocazione
array richiede tempo lineare)
Rappresentazioni collegate:
• Pro: dimensione variabile (aggiunta e
rimozione record in tempo costante)
• Contro: accesso sequenziale ai dati
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Esempi di strutture collegate
Lista semplice
Lista doppiamente
collegata
Lista circolare
doppiamente
collegata
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Alberi
Organizzazione gerarchica dei dati
Dati contenuti nei nodi, relazioni gerarchiche
definite dagli archi che li collegano
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Rappresentazioni collegate di alberi
Rappresentazione
con puntatori ai figli
(nodi con numero
limitato di figli)
Rappresentazione
con liste di puntatori ai
figli (nodi con numero
arbitrario di figli)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Rappresentazioni collegate di alberi
Rappresentazione
di tipo primo figliofratello successivo
(nodi con numero
arbitrario di figli)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Visite di alberi
Algoritmi che consentono l’accesso
sistematico ai nodi e agli archi di un albero
Gli algoritmi di visita si distinguono in
base al particolare ordine di accesso ai nodi
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Algoritmo di visita generica
visitaGenerica visita il nodo r e tutti i suoi
discendenti in un albero
I.C.: I nodi ancora da
visitare sono
quelli in S e i
loro discendenti
Richiede tempo O(n) per visitare un albero
con n nodi a partire dalla radice (sotto
opportune ipotesi sulla struttura dati S)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Algoritmo di visita in profondità
L’algoritmo di visita in profondità (DFS)
parte da r e procede visitando nodi di
figlio in figlio fino a raggiungere una
foglia. Retrocede poi al primo antenato
che ha ancora figli non visitati (se esiste)
e ripete il procedimento a partire da uno
di quei figli.
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Algoritmo di visita in profondità
(si noti che, a prescindere dall’uso della pila, lo pseudo-codice e’ “piu’ concreto” rispetto a quello della visita generica
--- si sarebbe potuto usare uno pseudo-codice “piu’ astratto” e, analogamente, per la visita generica si sarebbe
potuto usare pseudo-codice “piu’ concreto”)
Versione iterativa (per alberi binari):
I.C.: I nodi ancora da
visitare sono
quelli in S e i
loro discendenti
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Algoritmo di visita in profondità
Versione ricorsiva (per alberi binari):
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Algoritmo di visita in ampiezza
L’algoritmo di visita in ampiezza (BFS)
parte da r e procede visitando nodi per
livelli successivi. Un nodo sul livello i
può essere visitato solo se tutti i nodi sul
livello i-1 sono stati visitati.
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Algoritmo di visita in ampiezza
(si noti che, a prescindere dall’uso della coda, lo pseudo-codice e’ “piu’ concreto” rispetto a quello della visita generica
--- si sarebbe potuto usare uno pseudo-codice “piu’ astratto” e, analogamente, per la visita generica si sarebbe
potuto usare pseudo-codice “piu’ concreto”)
Versione iterativa (per alberi binari):
I.C.: I nodi ancora da
visitare sono
quelli in C e i
loro discendenti
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Riepilogo
• Rappresentazioni indicizzate e collegate di
collezioni di dati: pro e contro
• Organizzazione gerarchica dei dati mediante
alberi
• Rappresentazioni collegate classiche di alberi
• Algoritmi di esplorazione sistematica dei nodi di
un albero (algoritmi di visita)
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Esercizi (1)
• Dimostrare la correttezza dell’algoritmo
visitaDFSRicorsiva considerato nei lucidi
precedenti con il metodo delle asserzioni.
ANNOTATE (SCRIVENDO SULLA STAMPA
DEI LUCIDI) IL CODICE CON LE
ASSERZIONI CHE NE DIMOSTRANO LA
CORRETTEZZA. In questo modo vi sara’ piu’
facile ragionare sulla sua complessita’!!!
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Esercizi (2)
• Calcolare la complessita’ in tempo e spazio degli
algoritmi considerati nei lucidi precedenti
(visitaGenerica, visitaDFS,
visitaDFSRicorsiva, visitaBFS).
Nota: e’ necessario fare assunzioni sulla
complessita’ in tempo e spazio delle operazioni
sulle strutture dati ausiliarie (insiemi, pile, code)
utilizzate dagli algoritmi di visita.
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Esercizi (3)
• Scrivede una versione “piu’ concreta” dell’
algoritmo visitaGenerica .
• Scrivete una versione “piu’ astratta’’
dell’algoritmo visitaDFS.
• Scrivete una versione “piu’ astratta’’
dell’algoritmo visitaBFS.
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)
Esercizi (4)
• Modificare gli algoritmi visitaDFS,
visitaDFSRicorsiva, visitaBFS, in modo che
operino su alberi con un numero arbitrario di
figli. Dimostratene la correttezza con il metodo
delle asserzioni. ANNOTATE (SCRIVENDO
SULLA STAMPA DEI LUCIDI) IL CODICE
CON LE ASSERZIONI CHE NE
DIMOSTRANO LA CORRETTEZZA.
Calcolatene la complessita’.
F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)