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.]