i120: Oppgavesett 4

Introduksjon

Oppgave 1.1 og 1.2 til forrige ukes gruppeøvelser gikk fra en ikke-generisk implementasjon av binært tre, til det som skulle være en generisk implementasjon av ADT Binært Tre. I oppgaveteksten var det ikke presisert at for en generisk implementering skal alle parametere være enten en 'interface' eller et 'Object'. I løsningsforslaget til forrige ukes oppgave, som nå ligger ute, og som dere alle bør ta en titt på, har dog dette blitt tatt hensyn til, og vi har definert et interface bt for binære trær, samt et interface Posisjon.

 I denne ukens oppgave skal vi følge en liknende utvikling fra en ikke-generisk implementasjon av en heap i oppgave 1.1, til en generisk implementasjon av en prioritetskø i oppgave 1.2.

Oppgave 1

1.1 Implementasjon av ikke-generisk heap

Skriv et Java program for en spesialisert heap hvor elementene består kun av nøkler som er positive heltall. Det binære treet til din Heap skal implementeres vha en tabell, og du skal bruke din implementasjon fra forrige ukes oppgave 1.1

 I tillegg til eventuelle støttemetoder skal du implementere:

Din metode settInn(x) må anvende Upheap (se Javakode side 313 og figur side 307) og din fjernMin() må anvende Downheap (se Javakode side 313 og figur side 309).

 Bruk utskriftsmetodene for binærtre-implementasjonen og tegning av den tilhørende trestrukturen for hånd for å sjekke at din heap er korrekt.

 Sjekk også at implementasjonen er rask ved å bruke din heap til å sortere 10.000 tilfeldige tall:
 
 

for i=1 to 10.000 settInn(neste_tilfeldige_tall);
for i=1 to 10.000 SortertTabell[i]=fjernMin();
Bruk java.util.Random til å generere neste_tilfeldige_tall. Dokumentasjon finnes i API spesifikasjonen. F.eks kan du bruke metoden nextInt:
public int nextInt(int n): Returns a pseudorandom, uniformly distributed 
int value between 0 (inclusive) and n (exclusive).
Det betyr at følgende kode returnerer et tilfeldig tall mellom 0 og 10000
   Random randomGen = new Random();
   int tilfeldigTall = randomGen.nextInt(10000);

1.2 Implementasjon av Abstrakt DataType Prioritetskø (PQ) vha Heap

Implementer ADT PQ vha en heap med datastruktur tabell. ADT PQ skal inneholde tilsvarende metoder som i deloppgave 1.1, men vi skal nå lagre generelle objekter, og bruke en generisk Comparator for de aktuelle nøklene. For enkelhets skyld definerer vi vårt eget interface:
public interface PK{
   
    public Object fjernMin(); // returner og fjern et (element, key)-par med 
           // minste nøkkel.
    public void settInn(Object elm, Object key); // Sett inn paret (elm, key)
    public Object finnMin(); // Returner minste nøkkel.
Du skal altså gi en implementasjon
public class PKHeap implements PK{
som bl.a. skal ha en konstruktør:
   public PKHeap(Comparator c, int max)
hvor c skal kunne sammenlikne nøkkelobjektene som lagres.