1 Il problema 2 Implementazione del risolutore

Homework 5
Corso di Fondamenti di Informatica II
BIAR2 (Ing. Informatica e Automatica) e BSIR2 (Ing. dei Sistemi)
A.A. 2010/2011
12 Gennaio 2011
Sommario
Questo documento fornisce informazioni relative al quinto homework relativo al corso di Fondamenti di Informatica II (AA 2010/2011).
1
Il problema
Si vuole realizzare una classe Java che implementa un dizionario mediante
BST. In particolare il dizionario deve essere in grado di memorizzare coppie
chiave-valore rispettivamente di tipo int e String.
2
Implementazione del risolutore
Si richiede di realizzare le seguenti classi:
• La classe pubblica Homework5Impl che estende Homework5 e che con-
tiene il metodo di risoluzione dell'homework.
• La classe interna BSTDictionaryImpl che estende BSTDictionary e
che rappresenta un dizionario implementato mediante albero binario
di ricerca (BST).
1
2.1
2.1.1
Implementazione
La classe risolutore: Homework5Impl
Realizzare una classe Homework5Impl che implementa la classe astratta Homework5
(fornita nel materiale di supporto - le Homework5.java) e che ne ridenisce
i seguenti metodi:
• public BSTDictionary createEmptyDictionary()
Il metodo restituisce un nuovo dizionario inizialmente vuoto. Il metodo
al suo interno potra' utilizzare la classe BSTDictionaryImpl descritta
nella successiva sotto-sezione.
• public Set<Integer> commonKeys
(BSTDictionary d1, BSTDictionary d2)
Il metodo restituisce l'insieme delle chiavi comuni ai due dizionari. In
caso di chiavi duplicate in uno o entrambi i dizionari deve restituire un
unico valore per la chiave.
Il metodo dovra' avere costo lineare rispetto al massimo tra
le dimensioni dei due dizionari.
2.1.2
Dizionario (BSTDictionaryImpl)
Realizzare la classe interna BSTDictionaryImpl che implementa BSTDictionary
e che rappresenta un dizionario implementato mediante BST. In particolare
il dizionario accetta chiavi (anche multiple) di tipo intero e valori di tipo
String. Per la descrizione dettagliata dei metodi fare riferimento alle API
fornite.
Rappresentazione dei nodi Per la rappresentazione dei nodi dell'albero
BST si deve utilizzare la classe BSTNode fornita nel materiale di supporto e
che rappresenta un singolo nodo dell'albero. In ogni nodo le chiavi del sottoalbero sinistro devono essere strettamente minori del valore della chiave
del nodo mentre nel sottoalbero destro le chiavi dovranno essere maggiori
o uguali alla stessa.
In conseguenza di cio' gli eventuali valori con chiave duplicata dovranno
essere inseriti nel ramo destro di ciascun nodo.
2
2.2
Classi di supporto
Le classi BSTDictionary, BSTNode e Homework5 sono forniti nel materiale di
supporto e documentati attraverso le API.
3
Progettazione, test e sottomissione dei contributi
3.1
Validazione dell'input
La verica dei contributi inviati verra' fatta utilizzando input di test validi. Lo studente quindi non dovra' preoccuparsi controllare la correttezza
dell'input fornito. La verica sara' tesa a controllare che tutti i metodi implementati siano corretti e verra' eettuata costruendo, a partire dai metodi
di BSTDictionary alberi di test su cui invocare poi i vari metodi disponibili.
3.2
Vincoli per l'implementazione
Anchè il contributo possa essere considerato valido (e quindi sottoposto
a valutazione mediante test automatico) è necessario che siano vericate le
seguenti condizioni:
• Tutto il codice deve essere contenuto nel le Homework5Impl.java
Il le deve contenere la classe public Homework5Impl che:
∗ estende la classe astratta Homework5 e ne implementa i metodi
astratti
∗ ha come unico costruttore il costruttore senza argomenti.
∗ si trova nel package di default (non devono cioè trovarsi all'interno di nessun package specico )
∗ puo' contenere classi interne e metodi aggiuntivi rispetto a
quelli richiesti
∗ deve contenere la classe interna BSTDictionaryImpl
Nel le Homework5Impl.java non deve essere inserita nessuna
delle classi e interfacce fornite come materiale di supporto.
• Si possono realizzare tutte le Java Foundation Classes classi disponibili
in Java 6 SE di Sun.
3
• Qualora fosse necessario rilanciare eccezioni, utilizzare solo eccezioni di
Runtime (es. RuntimeException).
• Non e' consentito il ricorso a librerie esterne o a metodi nativi.
• Non e' consentito l'utilizzo del metodo System.exit(...) per terminare
il programma.
• Non e' consentito modicare in nessun modo la classe Homework5 e le
altre classi di supporto fornite.
Il non rispetto di uno dei vincoli precedenti rende automaticamente NON
VALIDO il contributo che quindi verra' scartato.
3.3
Consegna dei contributi e valutazione
I contributi potranno essere inviati mediante modulo online direttamente dal
sito del corso (area Laboratorio) a questo indirizzo. Le date di scadenza sono
riportate sulla pagina stessa web.
I contributi inviati verranno successivamente valutati attraverso un sistema di valutazione automatico secondo quanto riportato nel regolamento
per gli homework.
NB: Consegnare solamente il le sorgente Homework4Impl.java,
evitando invece si spedire i le .class o i le di supporto forniti.
4