Corso di Algoritmi e Strutture Dati Quinta Esercitazione in Laboratorio 26/05/2004 In questa esercitazione, disponibile presso il sito web http://www.dis.uniroma1.it/~allulli/asd/0304/Eserc5/, lavoreremo con gli heap. Un oggetto della classe Heap rappresenta un max-heap. Sono disponibili, tra gli altri, i seguenti metodi: insert(Comparable k), getFirst(), deleteFirst(), isEmpty(). Fase 1 (25 min.) Progettare una struttura dati che realizzi le seguenti operazioni: insert(Comparable k), getFirst(), deleteFirst(), come per le Code di Priorità isEmpty(), getSecond(), deleteSecond(). restituisce/elimina il secondo elemento più grande, assumendo che esista. Valutare il costo computazionale di ciascuna delle operazioni. Costruire una classe Java che realizzi la struttura specificata. Si suggerisce di estendere la classe Heap. Collaudare la classe con opportuni test. Fase 2 (40 min.) Costruire una classe Java che realizzi un min-heap, utilizzando un max-heap per la sua rappresentazione. Valutare il costo computazionale delle operazioni del min-heap. Collaudare la classe con opportuni test. Fase 3 (tempo rimanente – per casa) Progettare una struttura dati che realizzi le seguenti operazioni: insert(Comparable k), getMedian(), deleteMedian(), isEmpty(). Per la rappresentazione della struttura si consiglia di usare congiuntamente un max-heap e un min-heap. Valutare il costo computazionale di ciascuna delle operazioni. Costruire una classe Java che realizzi la struttura specificata. Si ricorda che l’elemento mediano di un insieme {a1, a2, …, an} è, informalmente, l’elemento che “sta in mezzo”. Più precisamente, se a 1 ≤ a2 ≤ … ≤ an, l’elemento mediano è: a(n+1)/2, se n è dispari; an/2, se n è pari1. Collaudare la classe con opportuni test 1 In effetti, se n è pari esistono due elementi mediani: il mediano inferiore an/2 e il mediano superiore an/2+1. Noi chiamiamo mediano il mediano inferiore.