UNIVERSITETET I OSLO



Like dokumenter
Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

København 20 Stockholm

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Algoritmer og Datastrukturer

A 1 B 1 D 1 H 1 H 2 D 2 B 2 E 1 E 2 I 1 I 2...

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen 22. februar 2011

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

EKSAMEN med løsningsforslag

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Løsningsforslag til INF110 h2001

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

Definisjon av binært søketre

UNIVERSITETET I OSLO

Oppgave 1. Sekvenser (20%)

EKSAMEN. Algoritmer og datastrukturer

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

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

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

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

UNIVERSITETET I OSLO

TDT4100 Objektorientert programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Definisjon: Et sortert tre

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:

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 Binære søketrær ++

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Obligatorisk oppgave 1 INF1020 h2005

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

Eksamen IN1010/INF1010 våren 2018

UNIVERSITETET I OSLO

Del 1(8%) 5 h. Del 2(42%)

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

INF2220: Forelesning 1

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

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

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

Ordliste. Obligatorisk oppgave 1 - Inf 1020

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

KONTINUASJONSEKSAMEN

Transkript:

1 UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : IN 115 Eksamensdag : Lørdag 20 mai, 2000 Tid for eksamen : 09.00-15.00 Oppgavesettet er på : 5 sider Vedlegg : Intet. Tillatte hjelpemidler : Alle trykte og skrevne Kontroller at oppgavesettet er komplett før du begynner å besvare det. Les gjennom hele settet før du begynner med besvarelsen. Oppgavesettet består av 3 oppgaver som kan løses uavhengig av hverandre. Oppgavene innen hver del er tenkt løst i den rekkefølge de står, men dette er selvsagt ikke noe krav til din besvarelse. Prosenten angitt på hver del antyder hvor mye vekt det vil bli lagt på denne delen under sensureringen. I oppgave 1-g står kan puffes og det betyr at du i verste fall får 4.0 på dette punktet hvis du ikke besvarer det punktet. Programmer skal skrives i Java (men hvis du har fått godkjent obligatoriske oppgaver ett tidligere år, kan du også besvare oppgaven i Simula, selv om vi anbefaler at du også da nytter Java). Du behøver ikke gi noen fullstendig dokumentasjon av programmene, men du kan skrive noen få linjer som gir leseren nøkkelen til forståelse av programmet. Du kan anta at leseren kjenner problemstillingen i oppgaven meget godt. Alle steder der det er spørsmål etter et program (eller en programbit) skal du skrive dette helt ut, og ikke bare henvise til liknende programmer, f.eks. i læreboka eller i et bibliotek. Les oppgavene nøye, og lykke til! Arne Maus og Almira Karabeg Oppgave 1 (40 %) I denne oppgaven skal vi se på trinære trær. I et trinært tre har hver node en eller to verdier, v1 og eventuelt v2. Hvis noden har to verdier, er v1 < v2. Noden har tre pekere, vsub, msub og hsub som peker på hvert sitt subtre til noden. Subtreet som pekes på av vsub har verdier < v1. Enhver verdi v i subtreet som pekes ut av msub, er alle slik at v1 < v < v2. Subtreet som pekes ut av hsub har verdier > v2. Vi antar at bare ulike verdier er representert i treet. Alle interne noder dvs. alle noder med minst ett ikketomt subtre, har to verdier. Det er bladnoder dvs noder med bare tomme subtrær, som kan ha bare én verdi. Eksempel på et trinært tre:

2 20 40 7 10 22 35 50 60 1 2 8 9 14 41 42 52 1023 For å implementere et trinærtre, definerer vi klassen TriNode og interfacen TritreI: class TriNode{ public int v1, v2; public Boolean v2filled; // true hvis v2 har en verdi public TriNode vsub, msub, hsub; TriNode (int v) { v1 = v; v2filled = false; public void settv2 (int val) { se oppgave a).; interface TriTreI { TriNode rota (); void settinn (int val); TriNode finn (int val); boolean fjern (int val); void skrivsortert (); Oppgave 1a) Skriv metoden settv2(int v) i TriNode som gjør alt som er nødvendig for å sette den andre verdien v2 i en bladnode; Forklar hvilke forutsetninger du tenker er oppfylt når denne metoden kalles. Vi skal nå implementerer interfacen TriTreI i en class TriTre: class TriTre implements TriTreI{ protected TriNode rot; public TriNode rota () { return rot; TriTre (int val) { rot = new TriNode(val); Oppgave 1b) Skriv metoden settinn (int val). Husk at denne og noen av de andre metodene lettest implementeres rekursivt, slik at det kan hende at du her også vil lage en settinn metode med flere parametre.

3 Oppgave 1c) Skriv metoden finn(int val); Oppgave 1d) Skriv metoden skrivsortert(); som traverserer treet og ved hjelp av System.out.println(..); skriver ut verdiene i stigende sortert rekkefølge, Oppgave 1e) Hva blir høyden på et velballansert trinærtre med n noder? Oppgave 1f) Hvordan ville du implementere et trinærtre med verdiene representert i en heltalls-array a? Skriv ikke kode, men bare angi hvor du ville plassere verdiene og subtrærne. Oppgave 1g) Kan puffes. Skriv metoden fjern (int val). Her blir det mange spesialtilfeller, og du kan se bort fra spesialtilfellet at alle verdiene i treet fjernes. Hvis du ikke har tid til å skrive kode, får du 2.5 i karakter hvis du korrekt greier å skissere alternativene for hvilken verdi som evt. skal skyves opp i treet og skal erstatte den verdien som fjernes, samt logikken når du skal fjerne en node. Oppgave 2 (45 %) I denne delen av eksamen skal vi bruke to av de grunnleggende teknikkene vi har til å lage algoritmer. Disse skal vi bruke til å løse problemet med å flislegge (dvs dekke) et defekt sjekkbrett med fargete triminoer (figur 2), og vi skal analysere algoritmene. Et defekt sjakkbrett er et 2 k x2 k brett av kvadratiske ruter med eksakt én defekt rute. Defekt betyr at vi ikke kan bruke denne ruten og den er farget sort. Fig. 1 viser noen defekte sjakkbrett. Det er opplagt at for k = 0 er det bare en rute, men for enhver annen verdi av k, er det eksakt 2 2k ulike defekte sjekkbrett: k=0 k=1 k=2 k=2 Figur 1. I det defekte sjekkbrettproblemet, blir vi bedt om å flislegge (dvs. dekke til) sjakkbrettet med triminoer. Triminoer og de måter de kan orienteres på, er vist i Figur 2. Hvert trimino (alle tre rutene det består av) er farget og fargene nummereres 1,2,3,...osv. I en flislegging kan triminoene ikke ligge oppå hverandre, og de må dekke hele sjekkbrettet med unntak av den defekte ruten. To triminoer som har felles grense, må ikke ha samme farge (men hvis de bare ligger hjørne mot hjørne, kan de godt ha samme farge).

4 Figur 2. Et defekt sjakkbrett med k = 0, er trivielt flislagt, fordi det ikke har noen ikke-defekte ruter. Hvis k = 1 er det eksakt 3 ikke-defekte ruter på sjakkbrettet, og dette kan da opplagt flislegges med en av triminoene fra figur 2, og det er da også opplagt at det bare brukes en farge. Oppgave 2a) 1. Hvor mange triomoner trengs for å fullstendig flislegge et defekt sjakkbrett når k > 1? Kall dette tallet N. 2. Det viser seg at N alltid et heltall. Hvis du skulle vise det formelt, hvilken bevisteknikk ville du da bruke? Oppgave 2b) Vi skal i denne oppgaven drøfte hvilke kjente teknikker som er best egnet til å både flislegge et defekt sjakkbrett med triminoer og få farger på disse slik at triminoener som ligger inntil hverandre, har ulike farger. 1. Se først på flislegginga og se på figur 3 for å få en idé om hvordan man legger den første triminoen. Ut fra dette, forslå en kjent teknikk til å foreta flisleggingen. Gi navnet på teknikken og skissert hvordan den ville bli anvendt på dette spesielle problemet. 2. Vi skal nå se på fargeleggingen av de triminoene du brukte til å flislegge i pkt. 1. Det finnes en berømt setning som sier at man maksimalt trenger 4 farger til en slik fargelegging, men vi skal her ikke nødvendigvis prøve å oppnå denne optimale løsningen, men igjen bruke en fundamental teknikk fra kurset som vil prøve å bruke så få farger som mulig. Gi navnet på denne teknikken og skisser hvordan du ville bruke den på dette spesielle problemet. 2 k 2 k Figur 3.

5 Oppgave 2c) Du skal nå skrive en Javametode tileandcolourboard(..) for å flislegge og fargelegge et slikt defekt sjakkbrett. Metoden er inne i en klasse ChessBoard som har to int arrayer board [][] og tilecolour []. Arrayen board representerer de 2 k x2 k rutene på sjakkbrettet og board[0][0] er øvre, venstre rute på brettet. Vi skal nummerere de N stk. triminoene vi bruker til flisleggingen (jfr. oppgave 2a) fra 1 og opp til og med N, og når du er ferdig med flislegginga, skal board[i][j] inneholde nummeret til den triminoen som dekker rute(i,j) på sjakkbrettet. Likeledes skal tilecolour[i] etter fargeleggingen inneholde nummeret på fargen til den i te triminoen du bruker i flisleggingen. Vi nummererer de fargene vi bruker fra 1 og oppover. I tillegg kan det være det nyttig at klassen inneholder et heltall nexttile som inneholder nummeret til neste trimino du vil bruke i flislegginga. Parametre er : public void tileandcolourboard (int toprow, int topcol, int defectrow, int defectcol, int size) og det første kallet er: tileandcolourboard (0,0, dr, dc, size) hvorsize=2 k og dr og dc er indeksene til den defekte ruten. Skriv ut det antall farger du trengte for å fargelegge alle timinoene på brettet. Oppgave 2d) Analyser kompleksiteten til din algoritme som funksjon av k. Bruk stor O()ellerTheta-notasjon θ() i svaret. Oppgave 3 (15 %) I denne oppgaven skal vi se på Huffman-koding av symboler. Oppgave 3a) Betrakt teksten isismispi. Konstruer Huffmantreet for de fire symbolene : i, m, p, s. Når du lager treet, start med et tre med ett symbol i hver bladnode og symbolene i alfabetisk rekkefølge fra venstre mot høyre. Bestem Huffman-koder for symbolene. Oppgave 3b) For at det skal være mulig å dekode og kode med bruk av variabel lengde på koden for symbolene, må man lagre en tabell over symbolene og deres korresponderende koder. Til å begynne med skal du bruke koden du fant i oppgave 3a til å dekode stringen: 1000110111101010. Gi så en pseudokode for dekodings-algoritmen. Forklar hvorfor den alltid vil virke.