Fag: Algoritmer datastrukturer og Fagnr: 50 131 A Faglig ansv.: Ulf Uttersrud Sensor: Tor Lønnestad Ant. sider 3 Ant. oppgaver: 3 Ant. vedlegg: 1 (2 sider) Dato: 15.02.2002 Eksamenstid 9-14 c Råd og tips: Bruk ikke for lang tid p et punkt i en oppgave hvis du ikke far det til innen rimelig tid. G isteden videre til neste punkt. Hvis du i et senere punkt f r bruk for det du skulle ha laget i et tidligere punkt, s kan du fritt bruke resultatet som om det var løst og at løsningen virker slik som krevd i oppgaven. Prøv alle punktene. Det er ikke lutt la noen punkter sta helt blanke. Til og med det demonstrere i en eller annen form at du har forststt hva det spørres etter og/eller at du har en ide om hvordan det kunne løses, er bedre enn ingenting. Det er hel/er ikke slik at et senere punkt i en oppgave nødvendigvis er vanskeligere enn et tidlig punkt. Alle de lo bokstav punktene teller IIktl Hvis du skulle trenge en datastruktur eller en metode som hører til java. uti! eller er laget i undervisningen, kan du fritt bruke det uten mtte lage det selv. Oppgave 1 I vedlegget er det satt opp et "skjelett" for c/ass Mengde. En mengde skal her være en mengde av heltall ( int), og den skal internt være organisert som en sortert enkellenket liste uten duplikater. Det er satt opp en ferdigkodet indre nodeklasse for dette formålet. Det skal ikke legges inn flere variabler (instans- og klassevariabler) i c/ass Mengde og c/ass Node enn de som allerede ligger der. Flg. programbit lager den utskriften som er angitt nedenfor: int[] a - 3,9,7,2,5,3,S,lO} Menqde A - new Menqde(a); A.skriv() ; Ilutskrift: 2,3,5,7,9,lO} Her er (se vedlegget) konstruktøren Mengde(int[] a) og metoden vold skr/v() brukt. Konstruktøren skal lage en mengde ved hjelp av tallene fra en heltallstabeli og skriv-metoden skriver mengden ut p skjermen. A. Lag kode for metoden void skriv() slik at et kall pa den gir en utskrift av samme type som antydet ovenfor. Hvis mengden er tom skal det skrives ut J. B. Lag kode for konstruktøren Mengde(int[] a) slik at den lager en enkellenket sortert liste uten duplikater p grunnlag av elementene (tallene) fra tabellen a. Her bør du, der det er aktuelt, benytte deg av ferdige klasser/metoder. -1-
C. Gitt flg. programbit: int[] a - (3,9,7,2,5,3,5,lO}; int [] b (7,8, 9, 1,2, 3) ; int[] c - 4,5,6}; Mengde Mengde Mengde A = new Mengde(a); B = new Mengde(b); C = new Mengde(c); Mengde. SI System. 0\ Mengde. SI.tt(A,B).skriv(); :.print(" ");.tt(b,c).skriv(); /utskrift: (2,3,7,9) Metoden (se vedlegget) static public Mengde snitt(mengde A, Mengde 8) skal lage snittet av mengdene A og 8, d.v.s. den skal lage (og returnere) en ny mengde som bestr av de elementene (tallene) som A og 8 har felles. Mengdene A og 8 skal være som de var etter et kall p snittmetoden. Lag kode for denne metoden. Oppgave 2 A. Nedenfor er det satt opp et Huffmantre for tegnene A, B, C, D, E, F, G og H. Finn en frekvensfordeling for disse 8 tegnene som fører til at Huffmans metode gir nettopp dette treet.?, ;/ H,.\ I.,;( D c 'e B. Legg flg. verdier fortløpende inn i et ps forhsnd tomt rød-svart tre: 12, 2, 7, 10, 8, 15, 13,14. Tegn det ferdige treet. Oppgave 3 En node i et binærtre kalles venstreorientert hvis antall noder i nodens venstre subtre er større enn eller lik antall noder i nodens høyre subtre. Et subtre kan være tomt. Et tomt tre har O noder. Et binærtre kalles venstreorientert hvis hver node i treet er venstreorientert. Spesielt sier vi at et tomt tre er venstreorientert. Et binærtre kalles et maksimumstre enn eller lik foreidemodens verdi. hvis hver node (unntatt rotnoden) har en verdi som er mindre I vedlegget er det satt opp et "skjelett" for c/ass VMBinTre - et venstreorientert maksimumstre. 2,-
Klassen har en privat indre c/ass Node med ferdige konstruktører. I nodeklassen er det i tillegg til de vanlige variablene, en antall-variabel som skal inneholde som verdi antallet noder i det treet/subtreet som har denne noden som rotnode. Det skal ikke legges inn flere variabler (instans- og klassevariabler) i c/ass VMBinTre og c/ass Node enn de som allerede ligger der. Et venstreorientert maksimumstre brukes for implementere en prioritetskø. (OBS: Dette er ikke det samme som en binærheap). Fordelen er at to slike trær kan flettes sammen p en effektiv måte, d.v.s. med orden log2 n + log2 m hvis trærne har henholdsvis n og m noder. Nedenfor er det satt opp et eksempel p et venstreorientert maksimumstre med 15 noder: Nr en ny verdi skal legges inn i treet m vi passe p at treet opprettholdes som et venstreorientert maksimumstre. Vi kan se på treets høyre kant (på tegningen er det de tre nodene med verdier 20, 15 og 13) som en avtagende sortert liste (bundet sammen av høyre-pekere). En ny verdi legges inn (i en ny node med null som venstre-peker) p rett sortert plass i denne "listen". Dermed blir treet bevart som maksimumstre. Men fra og med den nye noden og oppover til roten, vil en eller flere noder ikke være venstreorientert. Dette repareres ved at venstre og høyre subtre bytter plass i slike noder. Variablen antall må ha rett verdi i hver node etter innleggingen. A. 1, 2. 3. Tegn treet (figuren over) og skriv opp ved siden av hver node det antallet noder det er i treetjsubtreet som har denne noden som rotnode (d.v.s. verdien til variablen antall). Skriv opp treets verdier i preorden. legg inn verdiene 14, 12 og 17 (i den gitte rekkefølgen) inn i treet og tegn deretter treet. B. I "skjelettet" av klassen (se vedlegget) er metodene Objectkikk(), intantall() og boo/ean tom() satt opp. Metoden Object kikk() skal returnere (og ikke fjerne) den største verdien i treet, int antall () skal returnere antallet noder i treet og boo/ean tom() skal returnere treets tilstand (et tomt tre eller ikke). Lag kode for disse tre metodene. C. Hjelpemetoden (se vedlegget) void byttbam(node p) skal bytte om p de to bamajsubtræme til noden p. D.v.s. venstre subtre blir høyre subtre og omvendt. Lag kode for denne metoden. D. Metoden boolean venstreorientelt() (se vedlegget) skal returnere true hvis treet er venstreorientert og false ellers. Metoden boolean makstre() (se vedlegget) skal returnere true hvis treet et maksimumstre og false ellers. Du skal kode en av disse to metodene. Du bestemmer selv hvilken. E. Metoden void legglnn(object verdi) (se vedlegget) skal legge inn en verdi i treet slik at det opprettholdes som et venstreorientert maksimumstre. Se beskrivelsen ovenfor. Lag kode for denne metoden. Slutt pl oppgavesettet! ':i- -3-
Vedlegg til SO131A Algoritmer og datastrukturer 15.02.2002 public class Mengde stetic private class Node II en indre nodeklasse l int element; I/et heltall Node neste; II peker til neste node i pekerkjeden public Node(int elem, Node n) II konstruktør element = elemi neste. n } Instansvariabellt/ff/tllll! private fil II Node hode; Konstruktøreillf/..1.1I-./1/.11 public Mengde) hode = null; public Menqde(int(t.> I kode mangler - 6kal lages! Offentlige metoder Y/lltflt public boolean tom() return hode -- null; public void skriv() l Jl kode mangler - kal lages! static public Mengde snitt(mengde A, Mengde AJ Fl kode mangler - skal lages! / slutt pl class Mengde public class VMBinTre f static.. private class Node '/ en indre nodeklasse Object verdi; II nødens verdi int antall; II antall nøder Node venstre; II peker til venstre barn Node høyre; II peker til høyre barn public Node(Object verdi, int ant) I1 konstruktør thia.verdi - verdi; antall - ant; venstre - høyre - null; -1.
public Node(Opject verdi, int ant, Node v, Node h) / konstruktør this.verdi = verdi; antall - ant; venstre-v; høyre - h; / / slutt pd class Node.lllil In.stan.svari.abler Iff/(Hf!!lJ private Node rot; I1 er til treet$ rot pritate Comparator; I1 en komparator IIIII Private hjelpemetoder ffl..c ff/i I. c static private void byttbarn(node p) II Kode mangler - skal lages! } Ill. Konstruktør for class VHBinTre ////1 I lill!.. public VMBinTre (Comparator c) rot - null; this.c - c; IIIII Ott'entlige metoder 'II(II/ public void legqlnn(object verdi I. Kode mangler -.kal lages! public Object kikk) t Kode mangler - økal lages! public Object taut( / Kode mangler - skal i.kk. lages! public int antall() / Kode mangler - økal l.ges! public boolean tom () I1 Kode mangler - skal lages! public boolean venstreorientert() II Kode mangler - skal lages! public boolean makstre ( ) Kode mangler -.kal 1.98.1 6lutt pa class VHBinTre Slutt p vedlegget -l
From: Organization: To: Date sent: Subject: Priority: "Helium Bente" <Bente.Hellum@iu.hio.no> Oslo College Faculty of Engineering agneter@iu.hio.no Fri, 19 Apr 2002 09:51 :27 +0200 (Fwd) bokkjøp normal From: Forwarded message Helium follows Bente <benteh@ca30fag.iu.hio.no> To: agneter@iu.hio.no Subject: Date sent: bokkjøp Wed, 17 Apr 2002 13:39:12 +0200 Hei Agnete Kan du prøve å skaffe meg "answer manual" til "Environmental chemisty" av Stanley Manahan. (Det er den siste boka du kjøpte for meg) Jeg burde vel få den gratis dersom jeg bruker boken i undervisningen! Nettsted for distribusjon av boka er her:. http://www.amazon.com/exec/obidos/asin/1566704928/qid=1 0190 43355/sr= 1-1 /ref=sr 1 1/102-4180897 -4564939 Trenger jeg underskrift fra Sturla får jeg vel få det! Vennlig End hilsen of forwarded message Bente.Hellum@iu.hio.no http://www.iu.hio.no/-benteh/ Tlf 22453346 Reenaas Agnete --1 -- Fri, 19 Apr 2002 09:54:35