Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
Esercizi e progetti di programmazione - Apogeo
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
E–68 ESERCIZI E PROGETTI DI PROGRAMMAZIONE<br />
*** <strong>Esercizi</strong>o P15.16. Realizzate nuovamente la classe dell’esercizio precedente usando un esemplare<br />
<strong>di</strong> TreeSet. Oltre ai meto<strong>di</strong> già visti, progettate un metodo iterator che restituisca<br />
un oggetto dotato dei soli meto<strong>di</strong> hasNext e next. Il metodo next deve restituire un int, non un<br />
oggetto, per cui non potete semplicemente restituire l’iteratore fornito dalla classe TreeSet.<br />
* <strong>Esercizi</strong>o P15.17. Realizzate nuovamente la classe dell’<strong>Esercizi</strong>o P15.15 usando un esemplare <strong>di</strong><br />
TreeSet. Oltre ai meto<strong>di</strong> già visti nell’<strong>Esercizi</strong>o P15.15, progettate i meto<strong>di</strong> seguenti,<br />
che calcolano l’unione e l’intersezione <strong>di</strong> due insiemi:<br />
IntSet union(IntSet other)<br />
IntSet intersection(IntSet other)<br />
* <strong>Esercizi</strong>o P15.18. Scrivete un metodo della classe BinarySearchTree<br />
Comparable smallest()<br />
che restituisca l’elemento minimo presente in un albero. Avrete bisogno <strong>di</strong> aggiungere un metodo<br />
anche alla classe Node.<br />
*** <strong>Esercizi</strong>o P15.19. Mo<strong>di</strong>fi cate il metodo BinarySearchTree.print in modo che visualizzi la<br />
forma grafi ca <strong>di</strong> un albero, facendolo estendere orizzontalmente, da sinistra a destra. Otterrete una<br />
valutazione migliore se, invece, visualizzate l’albero che si estende verso il basso, con il nodo ra<strong>di</strong>ce<br />
in alto, centrato orizzontalmente.<br />
* <strong>Esercizi</strong>o P15.20. Realizzate meto<strong>di</strong> che usino la visita in or<strong>di</strong>ne anticipato e in or<strong>di</strong>ne posticipato<br />
per visualizzare gli elementi presenti in un albero <strong>di</strong> ricerca binario.<br />
*** <strong>Esercizi</strong>o P15.21. Nella classe BinarySearchTree, mo<strong>di</strong>fi cate il metodo remove in modo che<br />
un nodo avente due fi gli venga sostituito dal fi glio contenente il dato <strong>di</strong> valore maggiore presente<br />
nel suo sottoalbero <strong>di</strong> sinistra.<br />
** <strong>Esercizi</strong>o P15.22. Defi nite un’interfaccia, Visitor, dotata dell’unico metodo:<br />
void visit(Object obj)<br />
Aggiungete, poi, alla classe BinarySearchTree i meto<strong>di</strong>:<br />
void inOrder(Visitor v)<br />
void preOrder(Visitor v)<br />
void postOrder(Visitor v)<br />
Tali meto<strong>di</strong> devono visitare i no<strong>di</strong> dell’albero secondo l’or<strong>di</strong>ne specifi co <strong>di</strong> ciascun attraversamento,<br />
applicando il metodo visit ai dati presenti nei no<strong>di</strong> visitati.<br />
** <strong>Esercizi</strong>o P15.23. Usate i meto<strong>di</strong> defi niti nell’esercizio precedente per calcolare il valor me<strong>di</strong>o<br />
degli elementi presenti in un albero <strong>di</strong> ricerca binario contenente oggetti <strong>di</strong> tipo Integer, fornendo<br />
un oggetto <strong>di</strong> una classe che realizzi l’interfaccia Visitor.<br />
** <strong>Esercizi</strong>o P15.24. Mo<strong>di</strong>fi cate la realizzazione della classe MinHeap in modo che gli in<strong>di</strong>ci corrispondenti<br />
alle posizioni dei no<strong>di</strong> genitore e fi glio vengano calcolati <strong>di</strong>rettamente, senza invocare<br />
meto<strong>di</strong> ausiliari.<br />
*** <strong>Esercizi</strong>o P15.25. Mo<strong>di</strong>fi cate la realizzazione della classe MinHeap in modo che la cella <strong>di</strong> in<strong>di</strong>ce<br />
0 dell’array non sia sprecata.<br />
* <strong>Esercizi</strong>o P15.26. Misurate il tempo necessario all’esecuzione degli algoritmi heapsort e mergesort:<br />
nella realtà, quale algoritmo ha le prestazioni migliori?<br />
Cay Horstmann: Concetti <strong>di</strong> informatica e fondamenti <strong>di</strong> Java 5 a ed. - Copyright 2010 <strong>Apogeo</strong> srl