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

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

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

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

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

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

Algoritmer og datastrukturer Eksamen

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

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

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

Algoritmer og datastrukturer Løsningsforslag

EKSAMEN. Algoritmer og datastrukturer

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

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

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

EKSAMEN med løsningsforslag

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

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

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

Algoritmer og datastrukturer Løsningsforslag

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

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

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

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

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

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

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

UNIVERSITETET I OSLO

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

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

Definisjon av binært søketre

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

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

Lars Vidar Magnusson

Binære trær: Noen algoritmer og anvendelser

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

EKSAMEN. Emne: Algoritmer og datastrukturer

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

København 20 Stockholm

INF1010 Binære søketrær ++

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

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

Oppgave 1. Sekvenser (20%)

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.1

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Kapittel 4 Delkapittel 4.2

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

Eksamen IN1010/INF1010 våren 2018

Algoritmer og datastrukturer Binære søketrær

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

UNIVERSITETET I OSLO

Object [] element. array. int [] tall

PG4200 Algoritmer og datastrukturer Forelesning 7

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

EKSAMEN. Emne: Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

Stack. En enkel, lineær datastruktur

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Eksamensoppgaver 2014

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

Løsningsforslag til INF110 h2001

Innledning. IN2010/INF Algoritmer og datastrukturer. Tirsdag 27. november 2018 Kl (4 timer)

Transkript:

G høgskolen i oslo I Emne: Emnekode: ~ I Faglig veileder: Algoritmer og datastrukturer LO 140 A UlfUttersrud I Gruppe(r): I Eksamensoppgaven IbestAr av: - l Tillatte hjelpemidler: - - Antall sider (inkl. forside og vedlegg): 5 I-Dato: I Eksamenstid: 08.12.2005 9-14 ~ Antall oppgaver: I 3 r--xn tan -y ed1 e gg: l -- - - I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer lommekalkulatorer, er tillatt Kandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle uklarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger til grunn I for løsningen. Avdeling for Ingeniørutdanning. Con Adelersgote 30.0254 Oslo. tlf: 22 45 32 00. faks: 22 4532 05. iu@hio.no

RAd og tips: Bruk ikke for lang tid pa 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 far 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 lurt A la noen punkter st~ helt blanke. TIl og med det ~ demonstrere i en eller annen form at du har forstatt 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. Alle de 10 bokstavpunktene teller liktl 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 m~tte lage det selv. Men du bør kommentere at du gjør det! Oppgave 1 I denne oppgaven skal det lages en prloritetskø ved hjelp aven stakk. Vedlegget inneholder grensesnittene Stakk<T> og Priori tetskø<t>. De viser hvilke metoder en stakk har og hvilke metoder en prioritetskø skal ha. Det er ogsa satt opp et skjelett for klassen StakkPrioritetsKø<T>. Den har en komparator c og en stakk 5 som private InstansvarIabler. Det skal Ikke legges Inn flere Instansvariabler I denne klassen. Verdiene I prioritetskøen er rett og slett de verdiene som stakken 5 Inneholder. Verdiene skal ligge sortert pa stakken 5 med størst verdi øverst. Det skal vi benytte I metodene kikk og taut I klassen StakkPrioritetsKø<T>. En StakkPrioritetsKø<T> er tom hvis stakken 5 er tom og antallet verdier I prioritetskøen er Ilk antallet verdier pa stakken s. Metoden legginn I klassen StakkPrioritetsKø<T> ma kodes slik at stakken 5 er sortert med den største øverst, etter at Innleggingen er ferdig. Dette kan vi f~ til ved ~ ta ut en og en verdi fra stakken 5 og fortløpende lagre dem p~ en lokal hjelpestakk. Vi gjør dette inntil vi finner stedet der den nye verdien skal inn. S~ legges den p~ 5 o~ de verdiene som er lagret p~ hjelpestakken, flyttes tilbake til s. Dermed vil verdiene pa 5 bli sortert. A. Lag kode for metodene kikk, taut, antall og torn I klassen StakkPrioritetsKø<T>. I metodene kikk og taut skal det kastes et unntak hvis det er tomt. B. Lag kode for metoden legginn i klassen StakkPrioritetsKø<T>. Lag gjerne tegninger og kommentarer som viser hvordan du har tenkt at din legglnn-metode skal virke. Oppgave 2 Denne oppgaven handler om generelle binære trær av den typen som diskuteres I kompendiets De/kapitte/5.1. Klassen BinTre<T> er den som er satt opp I Avsnitt 5.1.5. A. Flg. kodebit bygger opp et binærtre. Tabellen p inneholder posisjonstallog tabellen v inneholder verdier (bokstaver/tegn): BinTre<Character> tre - new BinTre<Character>(); o int[ char p = 1,3,6,2,13,7,S,26,27,11,12,lO,21,42}; v - "ABCDEFGHIJKLHNw. tochararray () ; / posisjoner / verdier for int i - O; i < v.length; i++ tre.legginn(p[i),v[i Tegn det ~reet som kodebiten lager. Skriv for hver node nodeverdien Inne I noden og posisjonstallet ved siden av noden. Skriv s~ ut treets nodeverdier i preorden, inorden, postorden og niv~orden. ~-

B. En ny node legges alltid Inn p~ en bestemt posisjon I treet. Da m~ det Ikke finnes noen node med den posisjonen fra før og den nye nodens forelder m~ allerede ligge I treet. Det betyr at det må stilles bestemte krav til posisjonstallenes rekkefølge I posisjonstabellen p. Det første tallet m~ alltid være 1 og for hvert nytt posisjonstall k m~ vi ha at k er større enn 1 og at posisjonstallet til forelderen til k må ligge et sted til venstre for k i tabellen. Lag metoden public static boolean sjekkposisjoner (int [] p). Den skal returnere true hvis tallene I tabellen p oppfyller kravene over og returnere false ellers. Du kan ta som gitt at alle verdiene I posisjonstabellen p er forskjellige. Husk at hvis en node har posisjonstall k der k er større enn 1, så har foreldernoden posisjonstall k/2. De nodene som ligger p~ veien fra (og med) rotnoden og ned til (og med) en bladnode, kalles en hovedgren i treet. Det betyr at et binærtre har like mange hovedgrener som det er bladnoder. Den venstre hovedgrenen er den hovedgrenen som g~r ned til den bladnoden som ligger lengst til venstre av bladnodene. C. Lag metoden public void skrivvenstregren (). Den hører hjemme I klassen BinTre<T>. Den skal skrive ut til konsollet nodeverdiene I den venstre hovedgrenen med en blank mellom hver verdi. Hvis treet er tomt, skal det Ikke skrives ut noe. Hvis en bruker denne metoden pa treet fra oppgavens punkt A, vil utskriften bli: A D G L M N. I resten av Oppgave 2 skal det for hver node utføres en oppgave, dvs. det skal gjøres et kall p~ metoden utføroppgave fra grensesnittet Oppgave<T>, med nodens verdi som parameter. Dvs. hvis p er en node, skal kallet utføroppgave (p. verdi) Inng~. Grensesnittet Oppgave<T> er satt opp i vedlegget. D. lag metoden private void traversernoder (int k, Oppgave<T> o). Den hører hjemme I klassen BinTre<T>. Metoden skal utføre oppgaven p~ alle noder p~ veien fra og med rotnoden og ned til og med den node n som har posisjonstall k. Du kan ta som gitt at det er en node I treet med posisjonstall k. E. Lag metoden public vold traversergrener (Oppgave<T> o). Den hører hjemme i klassen BinTre<T>. Den skal utføre oppgaven p~ alle hovedgrenene i treet. For hver hovedgren skal oppgaven utføres pa alle nodene fra og med rotnoden og ned til og med grenens bladnode. Det er ønskelig at nodene pa den korteste hovedgrenen behandles først, deretter nodene pa den nest korteste hovedgrenen, osv. Hvis det er flere hovedgrener med samme lengde, er det ønskelig at de behandles I rekkefølge fra venstre mot høyre. Hvis treet er tomt, skal det ikke uføres noe. Denne m~ten ~ ga gjennom treet pa vii føre til at oppgaven utføres mange ganger p~ samme node. F.eks. vii oppgaven utføres pa rotnoden like mange ganger som det er bladnoder. Men det skal være slik. Oppgave 3 A. I vedlegget st&r metodene sparter og parter. De hører hjemme i samleklassen Tabell. Metoden parter er den som kalles fra metoden sparter. Metoden sparter brukes blant annet I kvikksortering. Hva blir utskriften n&r flg. programbit utføres: int a = 6,1,9,4,7,15,3,8,5,12,2,11,14,10,13)1 int k - (O + a.length)/2; / midten av tabellen Tabell.sParter(a, k) i Tabell.skriv(a); B. Tegn et komplett binært søketre som inneholder verdiene 7, 2, 15, 3, 12, 5, 20, 17, 8, 4, 14, 10 og 6. Her kan det være lurt ~ tegne et komplett tre uten verdier først. Det m~ ha 3-

plass til de oppgitte verdiene. Deretter legger du Inn verdiene slik at treet blir et binært søketre, dvs. en Inorden traversering vii gl verdiene I sortert rekkefølge. Den minste verdien m~ komme først i inorden, osv. Sett s~ de samme verdiene opp i en rekkefølge slik at hvis vi legger Inn en og en av verdiene i et p~ forh~nd tomt binært søktre, vii treet til slutt bli nøyaktig slik som det komplette treet du tegnet. C. Gitt flg. tegnsekvens: "ABAABBAAABBBC". Den skal komprimeres ved hjelp av LZWteknikken der første ledige tallkode er 256. Hvilke tallkoder vil bil skrevet ut? Slutt pa oppgavesettet! Vedlegg - Algoritmer og datastrukturer - 08.12.2005 / / Grense8ni tt og klasser for Oppgave l public interface Stakk<T> public void legglnn(t t); public T kikk(); public T taut(); public int antall(); public boolean tom(); public void nullstill(); I1 eng: push I1 eng: peek I1 eng: pop I1 eng: slze I1 eng: empty I1 eng: clear public interface prioritetsk0<t> l public void legglnn(t t); public T kikk()i public T taut()i public int antall()i public boolean tom()i public void nullstill() i ) II eng: offer I1 eng: peek II eng: poll II eng: s~ze I1 eng: isempty II eng: clear public class StakkPrioritetsKø<T> implements PrioritetsKø<T> private Stakk<T> s; II en stakk private Comparator<? super T> c; II en komparator public StakkPrioritetsKø(Comparator<? super T> c) this.c ~ Ci s - new TabellStakk<T>() i II konstruktør public void leqqinn(t verdi) public T kikk() ( II kode mangler - akal lages public T taut() public int antall() II kode mangler -.kal lages tf-

public boolean tom) \ public void nullstiut) s. nullstill O, /1 slutt p,f class StakkPrioritetsKø II Et grensesnitt for Oppgave 2 public interface Oppgave<T> public void utføroppgave(t t); r / / Metoder til Oppqave 3A I/verdien i po.slsjon/indeks k brukes som skilleverdi return Pi I returnerer posisjon- til skilleverdien public static int sparter(int[] a, int k) f / bruker hele tabellen return sparter(a,o,a.length-l,k); 'v - o og h - a.lenght-l while (v <- h && arv] < skilleverdi) v++; while (v <- h && skilleverdi <- arb]) h--; J ~ile... (t%i.1e) it (v < h) Tabell.bytt;(a,v++,h--)i else return Vi while (arv] < skilleverdi) V++i while (skilleverdi <- arb]) h--i return parter(a,o"a.lencjth-l,skilleverdi); I. kaller metoden ø~.r Slutt på vedlegget! - -!J