09.12.2003 9-14. ~ta11 oppgaver: 4. Nle skriftlige hjelpemidler-både trykte og håndskrevne, er tillatt



Like dokumenter
G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen 22. februar 2011

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Fagnr: A. Ant. vedlegg: 1 (2 sider)

Fagnr: SO 131 A. Ant. vedlegg: 1 (2 sider)

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Eksamen

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN med løsningsforslag

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Løsningsforslag

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og Datastrukturer

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

INF1010 Binære søketrær ++

UNIVERSITETET I OSLO

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 11 sider inklusiv vedlegg og denne forsiden.

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

Algoritmer og Datastrukturer

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

TDT4100 Objektorientert programmering

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Eksamen IN1010/INF1010 våren 2018

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

Løsningsforslag til eksamen i INF1000 våren 2006

Algoritmer og Datastrukturer

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Oppgave 1. Sekvenser (20%)

PG4200 Algoritmer og datastrukturer Forelesning 7

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Algoritmer og Datastrukturer

Løsnings forslag i java In115, Våren 1998

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

Løsnings forslag i java In115, Våren 1996

UNIVERSITETET I OSLO

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Binære trær: Noen algoritmer og anvendelser

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Algoritmer og Datastrukturer

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Løsningsforslag til INF110 h2001

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

UNIVERSITETET I OSLO

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Algoritmer og datastrukturer Binære søketrær

EKSAMEN. Emne: Algoritmer og datastrukturer

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

KONTINUASJONSEKSAMEN

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

UNIVERSITETET I OSLO

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Object [] element. array. int [] tall

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

INF1010 Sortering. Marit Nybakken 1. mars 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

HØGSKOLEN I SØR-TRØNDELAG

TOD063 Datastrukturer og algoritmer

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'"j(jent kalkulator

Transkript:

I Kontrollert I høgskolen i oslo Emne Emnekode: Faglig veileder: Algoritmer og datastrukturer 80 131A UlUttersrud ppe(r): Dato: Eksamenstid:- 09.12.2003 9-14 Eksamensoppgaven består av: ta11 sider (inkl orsiden): 4 ta11 oppgaver: 4 Antall vedlegg 1 (3 sider) TiIiitte hjelpemidler Nle skritlige hjelpemidler-både trykte og håndskrevne, er tillatt Kandidaten må selv kontrollere at oppgavesettet er ullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre or de orutsetninger du legger til grunn or løsningen. I Utarbeidet av av (en av disse): Studieledersl (aglærer): I Fagkoordinators underskrit: --?' Avdeling or ingeniørutdanning. Con Adelersgate 30. 0254 Oslo. tl: 22 45 32 00. aks: 22 45 32 05. iu@hio.no

Algoritmer og datastrukturer - 09.12.2003 RAd og tips: Bruk ikke orjang tid pl et punkt i en oppgave hvis du ikke r det til innen rimelig tid. GI isteden videre til neste punkt. Hvis du i et senere punkt r bruk or det du skulle ha laget i et tidligere punkt, sl kan du ritt 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 lurt I la noen punkter sti helt blanke. Til og med det I demonstrere i en eller annen orm at du har orstltt hva det spørres etter og/eller at du har en ide om hvordan det kunne løses, er bedre enn ingenting. Det er heller ikke slik at et senere punkt i en oppgave nødvendigvis er vanskeligere enn et tidlig punkt. AI/e de 10 bokstavpunktene tel/er likt! Hvis du skulle trenge en datastruktur eller en metode som hører til java. uti! eller er laget i undervisningen, kan du ritt bruke det uten mtte lage det selv. Men du bør kommentere at du gjør det! Oppgave 1 A. Lag metoden public static void snustakk(stakk sy. Den skal snu rekkeølgen av elementene p stakken s. Flg. eksempel viser hvordan den skal virke: SFakk s - new TabellStakk(); "'A" ).,, : "B") ; "C") ; "O") ; Sl;luStakk(sl; stakken 6 snus ile s.tom System.out.print(s.taUt +.. "); r.ttskrit: A B C D B. Gitt en vilkrlig tegntabell ( char [] ) der elementene er bokstavene R, Wog B. En slik tabell kan or eksempel se slik ut: char[] c z 'R' 'B' 'R' 'W' 'B' 'R' 'W' 'B' 'W' 'B, ",,, ", Det kan hende at den inneholder bare en av bokstavene eller bare to av bokstavene. Lag metoden public static void omorganiser(char[] c). Den skal omorganisere tabellen c slik at alle R-ene (hvis den inneholder R-er) kommer ørst, s alle W-ene (hvis den inneholder W-er) og til slutt alle B-ene (hvis den inneholder B-er). Eksempel:. char t Rt ' B' ' R' ' W' ' B' ' R' 'W' ' B' 'W' ' B ' """, I1 omorganisertc); II omorganiserer tabellen.; int i - O; i<.length; i++ System. out.prlnt (c (1 + " "); ut$krit RRRWWWBBBB Bokstavene R, Wog B st r orøvrig or argene Red, White og Blue og oppgaven er kjent som the Dutch national lag problem. - I -

Oppgave 2 Tegningen under viser et binært søketre med heltall som nodeverdier. :/ '- '/,, '" / Figur 1 A. i) Skriv ut treets verdier, dvs. treet i igur 1, i nivaorden og i preorden. Angi s en rekkeølge som er slik at hvis verdiene legges inn i et binæ rt søketre i den rekkeølgen, vii treet bli maken til (samme innhold og samme orm) som treet i igur 1. ii) Legg inn verdiene 6 og 15 I treet. Slett s rotnoden og den siste noden (den siste i inorden). Slettingen skal ølge reglene or sletting i et binært søketre. Tegn s treet du har tt. I vedlegget er det satt opp et "skjelett" or class BinTre - et binært søketre der duplikater ikke er tillatt. Metoden public boolean legglnn(object verdi) er erdiglaget. Den returnerer alse hvis parameterverdien verdi allerede ligger i treet. Hvis ikke legger metoden verdien p rett sortert plass og returnerer true. Klassen har ogs en erdiglaget iterator som gir oss treets verdier i inorden og en erdiglaget metode som returnerer treets komparator. B. En nodes dybde er avstanden mellom rotnoden og noden, dvs. lengden ps veien mellom dem. Lag metoden (se vedlegget) Int dybde(object verdi) slik at den returnerer -1 hvis verdi ikke innes i treet, og ellers returnerer dybden til den noden som inneholder verdi. C. Den siste noden (siste i inorden) i et binært søketre har ikke høyre barn. Den kan deror slettes ved at pekeren dit blir omdirigert. Lag metoden (se vedlegget) public Object slettsisteverdi() slik at den sletter den siste noden (siste i inorden) og returnerer nodens verdi. Hvis treet er tomt returneres nu". La X og Y være to noder. Hvis X er en etterkommer av Y eller Y er en etterkommer av X, så er avstand(x, Y) lik lengden på veien mellom dem. Hvis verken X er en etterkommer av Y eller Y er en etterkommer av X, så må X og Y ha en nærmeste elles orgjenger Z. Da sier vi at avstand(x, Y) = avstand(z,x) + avstand(z, Y). Eksempel: i) Hvis X er 31-noden og Yer 17-noden i treet i igur 1, s& er Yen etterkommer av X. Da blir avstand(x,y) = 3. ii) Hvis X er 2-noden og Yer lo-noden, s& har de 3-noden som nærmeste elles orgjenger. Dermed blir avstand(x, Y) = 1 + 3 = 4. D. Lag metoden (se vedlegget) int avstand(object verdi1, Object verdi2). Den skal returnere -l hvis en eller ingen av verdiene verdi1 og verdi2 ligger i treet. Hvis begge ligger i treet skal metoden returnere avstanden mellom nodene som inneholder de to verdiene. -2-

Oppgave 3 Du bør ha sett p oppgave 2 ør du starter med oppgave 3. I vedlegget er det satt opp et "skjelett" or c/ass TreTest. Den inneholder de to indre klassene NodeDybde og DybdeKomparator. Klassen DybdeKomparator har en komparator som instansvariabel og den r verdi i konstruktøren. A. Lag compare-metoden i klassen DybdeKomparator. Den skal sammenligne to instanser av klassen NodeDybde. Den av de to instansene som har minst dybde ( int dybde) sies S være størst, og hvis de har samme dybde er den størst som har minst verdi ( Object verdi ). Verdiene sammenlignes ved hjelp av instansvariablen c i DybdeKomparator- klassen. B. Lag metoden (se vedlegget) public static BinTre kopi(bintre tre) i c/ass TreTest. Den skal returnere et tre. Treet som returneres skal være en ekte kopi av det treet som er parameter til metoden. En ekte kopi er et tre med samme orm og innhold. Siden kodingen n oregr i c/ass TreTest, og ikke i c/ass BinTre, er det kun de oentlige metoder ra c/ass BinTre som kan brukes or lage en kopi. I main-metoden i c/ass TreTest er det et eksempel p hvordan metoden kan brukes. Oppgave 4 A. Sett inn, i den gitte rekkeølgen, lg. verdier i et rød-svart binærtre: lo, 4, 7, 13, 11, 6, 8, 9. Lag tre tegninger, en når du har satt inn 4 verdier, en når du har satt inn 6 verdier og en tegning til slutt når de 8 verdiene er satt inn. Gjør så om det rød-svarte treet med de 8 verdiene til et 2-3-4 tre. Det vil si sett opp et 2-3-4 tre som er slik at når det omormes til et rød-svart tre ved hjelp av "omregningsormlene", vil det gi vrt rød-svarte tre. B. Tegnene A, B, C, D, E, F, G og H har rekvenser 8, 4, 1, 5, 16, 6, 2 og 9. Dette gir det Humantreet som tegningen nedenor viser. S oppdager vi at A skal ha en rekvens p 10 istedenor 8, og E en rekvens p 14 istedenor 16. Tegn det Humantreet vi da r. :,, c 8/ H "",/ Figur 2 Slutt pa oppgavesettet! -3-

Vedlegg til SO131A Algoritmer og datastrukturer 09.12.2003 import java.util..; public claes BinTre private static class Node en indre nodeklasse private Object verdi private Node venstre private Node høyre; private Node(Object verdi) this.verdi z verdi konstruktør class Node private Node rot; private Cornparator c; private int antall; public BinTre(Comparator c) konstruktør rot - null; this.c - c; antall = O; II returnerer treets komparator public Comparator komparator() return Ci } public int antall() return antall; public boolean tom return antall -- O; public boolean legg(object verdi) Node p = rot, q int cmp - Oi while (p - null q = Pi cmp - c.compare(verdi,p.verdi) i it (cmp - O) return alse; P = cmp < O? p.venstre : p.høyre it (rot -- null) rot = new Node(verdi); else it (cmp < O) q.venstre = new Node(verdi else q.høyre = new Node(verdi); antall++; return true; public int dybdecobject verdi kode mangler - skal lages _.4-

public Object slettsisteverdi(> / kode mangler - skal lages public int avstand(object verdil, Object verdi2) II kode mangler - skal lages private class Inordenlterator implements Iterator private Stakk s - new TabellStakk( private Node p; private Node ørst (Node p) II ørste node i treet til p ax' (.; p.venstre!= nulli p = p.venstre) s..legg(p)i rturn Pi c}, private Inordenlterator() i (rot -- null) return; lnn(null); p = ørst(rot); / konstruktør public boolean hasnext() return p..' ; 11., public Object next() II neste er m.h.p. inorden r Object verdi - p.verdi; i (p.høyre!- null) p = ørst(p.høyre); else p = (Node)s.taUt(); II henter ra stakken return verdi; public void remove(} throw new UnsupportedOperationException(); c '; } l Ir class InordenIterator public Iterator iterator return new Inordenlterator } II class BinTre lllll IiII IiII Il?IHIl. HrllltlllllVl1. publj.c class TreTest private static class NodeDybde, private Object verdi private int dybde; -5-

:o l) c private NodeDybde(Object verdi, int dybde) II konstruktør this.verdi - verdi; this.dybde = dybde; ) } I1 class NodeDybde private static class DybdeKomparator implements Comparator private Comparator c; II instansvariabel private DybdeKomparator(Comparator C) this.c - c; J. II konstruktør public int cornpare(object ol, Object 02) II kode mangler - skal lages.l / / class DybdeKompara tor public static BinTre kopi(bintre tre) II kode mangler - skal lages public static void main(string[) args) ( int a - 12,3,31,2,8,16,38,5,11,14,20;33,10,17,23,35}; BinTre tre - new BinTre(new ComparableComparator(»i II lager treet i igut 1 ra oppgave 2 or (int i - O; i < a.length; i++) tre.legglnn(new Integer(a[i BinTre kopitre - kopi(tre); lager en kopi av treet II sjekker at de to trærne har samme nodeantall System.out.println(tre.antall() +" "+ kopitre.antall(»; II sletter siste verdi 5 ganger i det gamle treet or (int i - O; i < 5; i++) tre.slettsisteverdi() II skriver ut det "gamle" treets verdier i inorden or (Iterator i - tre.iterator()i i.hasnext()i ) System.out.print(i.next() + " ")i System.out.println(""); II skriver ut det RnyeR treets verdier i inorden or (Iterator i - kopitre.iterator(); i.hasnext(); System.out.print(i.next() + R R); II Utskrit: II 16 16 II 2 3 5 8 10 11 12 14 16 17 20 II 2 358 10 11 12 14 16 17 20 23 31 33 35 38 } II class TreTest Slutt pa vedlegget -6-