Algoritmi e strutture dati Esercitazione in laboratorio del 13 giugno 2002 1. Accendere il PC e collegarsi alla sessione di Windows 2000 2. Verificare la presenza del supporto minimo per Java a. jdk1.2 o successivo b. JCreator Lite v. 2.00 3. Procurarsi la classe ConsoleReader (file ConsoleReader.java, disponibile sul sito Web del corso all’indirizzo http://www.dis.uniroma1.it/~damore/asd/listati/ConsoleReader/ConsoleReader. java.html) a. Trattasi di una classe per agevolare l’input da console, distribuita assieme al volume: C. S. Horstmann. Concetti di informatica e fondamenti di Java 2. Apogeo, 2000. b. Esaminarne la documentazione nonché i metodi disponibili i. readInt(), readDouble(), readLine() ecc. ii. esempio di uso (lettura di una stringa da console): ConsoleReader lettore = new ConsoleReader(System.in); String s = lettore.readLine(); iii. Attenzione: la lettura di caratteri a 8 bit (ad es., le vocali accentate) non funziona correttamente! 4. Realizzare una classe MinHeap, che realizza un Min-Heap, vale a dire uno heap in cui ogni nodo contiene una chiave minore o eguale di quelle presenti negli eventuali figli. Allo scopo di fornire una specifica formale, la classe MinHeap deve implementare la seguente interfaccia (con ovvio significato dei metodi) public interface MinHeapInterface { void heapify(int i); int getMin(); void delMin(); boolean insert(int k); // restituisce true sse l’inserimento causa una crescita della struttura boolean isLeaf(int i); boolean isRoot(int i); boolean isEmpty(); boolean isFull(); String toString(); } Si suggerisce di estendere opportunamente la classe Heap, osservando che, se A è un insieme di numeri naturali e B = {-n | n A}, max(A) = -min(B). La classe HeapTest, opportunamente adattata, potrebbe risultare utile per testare la classe MinHeap. 5. Dato un insieme X di n interi, supposti per semplicità tutti distinti, si definisce elemento mediano di X quell’elemento di X che, nell’ordinamento crescente degli elementi dell’insieme, occupa la posizione n/2 (il mediano fra 10 elementi è il quinto in ordine crescente, il mediano fra tredici elementi è il settimo in ordine crescente). Una Clessidra è una struttura di dati che supporta le seguenti operazioni: Inserisci(k ) Inserisce nella struttura un nuovo intero k GetMediano() Restituisce l’elemento mediano fra quelli presenti nella struttura DelMediano() Elimina dalla struttura l’elemento mediano Progettare gli algoritmi che effettuano tali operazioni e realizzare una classe Clessidra che implementa tali algoritmi. [Suggerimento: mantenere gli elementi “piccoli” di X in un Max-Heap e quelli “grandi” in un MinHeap, facendo in modo che il mediano sia sempre la radice di uno dei due heap.]