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)