Vorrei chiedere due cose, su un esercizio di questo tipo:
codice:
Si fornisca un'efficiente implementazione dell'interfaccia
BSTSet<E>, come mostrata nella pagina successiva,
rappresentante un albero binario di ricerca (BST) i cui nodi
sono degli insiemi contenti elementi di tipo generico <E>.
Gli insiemi contengono elementi ordinabili. Ciascun insieme è
rappresentato dal suo elemento con valore minore. All'interno
dell'albero gli insiemi sono inseriti in base al loro
elemento rappresentante. Si assuma che ogni insieme non
contenga più 20 elementi.
L'implementazione dell'albero dovrà essere realizzata
utilizzando la struttura [parent/left/right] all'interno
della classe nodo, che dovrà essere denominata SetNode<E>.
L'implementazione del metodo search() è facoltativa, così
come la gestione delle eccezioni all'interno delle classi (Se
il metodo search() non viene implementato il corpo dovrà
essere lasciato vuoto).
Realizzare in seguito, mediante il metodo main() della
classe, un programma Java che prenda in input un file di
testo contenente un elenco di insiemi di interi da inserire
in un albero (costruisce un albero di insiemi di interi) e
restituisca in output un file di testo contenente alcune
informazioni relative all'albero.
Il programma consegnato dovrà compilare correttamente e dovrà
produrre il corretto output. In caso contrario la soluzione
verrà considerata errata.
Specifiche della classe
Qualsiasi struttura dati ausiliaria dovrà essere
implementata dallo studente. Il file Java (e quindi la classe
Java) dovrà essere denominato con il proprio numero di
Matricola con un underscore “_” al posto del simbolo “/”
(“M01_123456.java”). Nel caso in cui la matricola inizi per
667 utilizzare il prefisso SS7 (“SS7_123456.java”). Il file
di input dovrà essere denominato “input.txt” mentre il file
di output dovrà essere denominato con la propria matricola
(“M01_123456.txt”, oppure “SS7_123456.java”).
File di input e output
Il file di input contiene l'elenco degli insiemi, uno per
riga, contenuti nei nodi dell'albero. Ogni insieme è
descritto da una sequenza di valori interi separati da uno
spazio e terminanti con un punto e virgola.
La prima riga del file di output contiene tre numeri interi:
il numero di nodi, il numero di elementi e il valore più
piccolo dell'albero. Tali valori sono relativi all'albero
iniziale dopo aver applicato 5 operazione extracMinimum().
Segue la visita inorder dello stesso albero con uni insieme
per ogni riga
L'interfaccia è:
codice:
import java.util.*;
public interface BSTSet<E extends Comparable> {
public int nodes ();
// ritorna il numero di nodi dell'albero
public int elements ();
// ritorna il numero complessivo di elementi di tipo E
public E getMinimum ();
// ritorna l'elemento più piccolo contenuto nei nodi dell'albero
public SetNode<E> search (E e);
// ritorna il nodo contenente l'elemento e
public void insert (SetNode<E> node);
// aggiunge all'albero un nuovo nodo
public SetNode<E> getRoot ();
// ritorna la radice dell'albero
public SetNode<E>[] inorder();
// ritorna un array con gli insiemi dell'albero in ordine inorder
public E extractMinimum ();
// elimina e ritorna l'elemnto più piccolo dell'albero
}
Io avrei pensato di creare la classe SetNode, e all'interno di memorizzare l'insieme, realizzato tramte coda, implementata magari come array. Può andare?
Siccome ogni elemento dell'insieme è rappresentato dal più piccolo suppongo si debba fare un inserimento ordinato....allora dovrei usare il compareTo.
Di conseguenza dovrebbe essere solo la classe coda ad estendere Comparable o sbaglio?
Cioè avrei:
codice:
class SetNode<E>
.
.
.
codice:
class Queue<E extends Comparable>
.
.
.
public void insert(E element){
.
.
.//uso del compareTo per inserire in coda gli elementi
}
Si potrebbe fare così o mi darà errori nel trovare il metodo comparTo()?