Laboratorio di ASD: Progetto n. 2 a.a. 2005/2006 Date di consegna La consegna va fatta a mano e via e-mail scrivendo ad entrambi i seguenti indirizzi: [email protected] e [email protected], entro e non oltre il 7 Luglio 2006. Non si accetteranno consegne via e-mail in formati diversi da PDF e Postscript. Punto 1 Realizzare un programma che prende in input un file descrivente un albero genealogico (descritto rispetto alla sintassi presentata in seguito) e ne costruisce una rappresentazione interna. Si deve usare una struttura dati ad albero per memorizzare l’albero, ed una tabella hash per memorizzare puntatori a nodi, in modo da avere un accesso medio O(1) ai nodi interni. E` inoltre necessario predisporre un’interfaccia utente testuale che, una volta costruita la rap- presentazione dell’albero, prenda in input delle query (vedi sotto) e risponda. Sintassi degli alberi genealogici Un file che descrive gli alberi genealogici avr`ala seguente sintassi: • La riga iniziale consiste di una dichiarazione del tipo gentree COGNOME; • Ogni altra riga `edel tipo NOME_ID + (NOME CONSORTE) # FIGLIO_1 + FIGLIO_2 + ... + FIGLIO_n; Il requisito fondamentale `eche ogni nome sia distinto (per questo si usa ID). Nel sito del corso c’`eun file con un albero genealogico che potete usare come esempio. Il contenuto del file `eil seguente: gentree Agnelli; Giovanni Agnelli + (Clara Boselli) # Aniceta Agnelli + Edoardo Agnelli; Edoardo Agnelli + (Virginia Bourbon Del MonteClara) # Giovanni Agnelli_2 + Susanna Agnelli + Maria Sole Agnelli + Cristina Agnelli + Umberto Agnelli + Giorgio Agnelli; Giovanni Agnelli_2 + (Marella Caracciolo) # Margherita Agnelli + Edoardo Agnelli; Margherita Agnelli + Alain Elkann # John Jacob Elkann + Lapo Elkann + Ginevra Elkann; Umberto Agnelli + Antonella Bechi Piaggio # Giovanni Alberto Agnelli; Giovanni Alberto Agnelli + Frances Avery Howe # Virginia Asia Agnelli; 1 Queries Le query a cui `enecessario saper rispondere sono del tipo: • genitore(x,y) (x `egenitore di y, risposta: vero/falso). • figlio(x,y) (x `efiglio di y, risposta: vero/falso). • antenato(x,y) (x `eantenato di y, risposta: vero/falso). • discendente(x,y) (x `ediscendente di y, risposta: vero/falso). Le query devono essere prese in input da console, analizzate sintatticamente e risposte. Per rispondere ad alcune di esse `enecessario fare una visita di una porzione dell’albero; tale visita va fatta in ampiezza (usando una coda). Ricordatevi di usare la tabella hash dei nodi! Punto 2 Si implementino gli alberi rosso-neri con la sentinella nil[T ] e chiavi intere. In particolare si richie- de che vengano implementate le operazioni di inserimento, cancellazione, ricerca di un elemento generico, del minimo e del massimo. Infine si implementi l’operazioni di Join su due alberi rosso-neri T1 e T2 e un lemento x tale che ∀x1 ∈ T1, x2 ∈ T2.key[x1] ≤ key[x] ≤ key[x2]. Per far ci`osi introduca un nuovo campo bh[T] (uno per tutto l’albero). Si vuole inoltre rilevare il comportamento asintotico nel caso medio delle seguenti operazioni, in funzione della dimensione del vettore: • inserimento di un elemento; • ricerca e successiva cancellazione di un elemento presente nell’albero (si scelga diligentemente l’elemento da cancellare); • join. A tal fine, si stimi, per ognuna delle operazioni elencate, il tempo medio di esecuzione su alberi con n elementi, per n pari a 1000, 2000, 5000 e 10000, con intervallo di confidenza del 95%. Relazione Si deve consegnare una relazione analitica di 15-20 pagine (esclusi i listati) che comprenda: 1. descrizione del problema e degli obiettivi dell’esperimento; 2. descrizione ed analisi degli algoritmi implementati; 3. plot di albero rosso-nero con 20 nodi, tramite graphviz; 4. esempi illustranti il funzionamento dell’operazione di Join; 5. discussione sulla metodologia dell’esperimento e sulle scelte implementative; 6. strumenti utilizzati; 7. tabelle e grafici riepilogativi e comparativi dei risultati sperimentali (con linee di tendenza relative ai tempi misurati); 8. discussione dei risultati ottenuti nei test effettuati e confronto con la teoria; 9. conclusioni; 10. listati completi. 2 Note • I gruppi possono consistere al pi`udi tre componenti; • per generare i numeri casuali si utilizzi il Random generator visto a lezione; • si commenti il codice opportunamente ed in italiano e si utilizzino nomi di variabili signifi- cativi. 3.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages3 Page
-
File Size-