31.05.2013 Views

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

Esercizi e progetti di programmazione - Apogeo

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!