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

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

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

Algoritmer og datastrukturer Løsningsforslag

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

Algoritmer og datastrukturer Løsningsforslag

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

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

EKSAMEN med løsningsforslag

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og Datastrukturer

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

Algoritmer og datastrukturer Eksamen

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

Det matematisk-naturvitenskapelige fakultet

Algoritmer og datastrukturer Løsningsforslag

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

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

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

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

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Løsningsforslag EKSAMEN

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

INF1010 notat: Binærsøking og quicksort

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Eksamen

Binære trær: Noen algoritmer og anvendelser

UNIVERSITETET I OSLO

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

EKSAMEN. Emne: Algoritmer og datastrukturer

Algoritmer og Datastrukturer IAI 21899

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

Oppgave 1. Sekvenser (20%)

Liste som abstrakt konsept/datatype

PG4200 Algoritmer og datastrukturer Forelesning 7

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

Algoritmer og Datastrukturer

Trær. En datastruktur (og abstrakt datatype ADT)

Object [] element. array. int [] tall

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

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

Definisjon av binært søketre

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; }

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Programmering i C++ Løsningsforslag Eksamen høsten 2005

INF2220: Forelesning 2

Binær heap. En heap er et komplett binært tre:

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

København 20 Stockholm

IN 115 Fasitforslag til Eksamen 1997 Omskrevet til Java. 1. april 2000

UNIVERSITETET I OSLO

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

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

Algoritmer og datastrukturer Eksamen

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

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

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

INF1010 Sortering. Marit Nybakken 1. mars 2004

UNIVERSITETET I OSLO

INF2220: Forelesning 2

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

TOD063 Datastrukturer og algoritmer

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

INF1020 Algoritmer og datastrukturer. Dagens plan

KONTINUASJONSEKSAMEN

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

Algoritmer og Datastrukturer

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

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

Løsningsforslag til INF110 h2001

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

Løsningsforslag eksamen INF1020 høsten 2005

OPPGAVE 5b og 8b Java Kode

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

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.4

Definisjon: Et sortert tre

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

UNIVERSITETET I OSLO

Notater til INF2220 Eksamen

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

... Dagens plan. Prioritetskø ADT

Quicksort. Fra idé til algoritme.

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

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Transkript:

Høgskolen i Østfold Avdeling for informasjonsteknologi Løsningsforslag til ny/utsatt eksamen i ITF20006 Algoritmer og datastrukturer 05.01.2018 Oppgave 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 b d b b a d d b d c c a b a c d d d a b Oppgave 2 a) public void addfirst(int value) // Sett inn først i kø head = new node(value, head); numnodes++; public int removefirst() // Ta ut først i kø if (numnodes!= 0) int v = head.value; head = head.next; // Feil, forsøk på fjerning fra tom kø // Håndterer ikke feilen på noen fornuftig måte b) public void addlast(int value) // Sett inn sist i kø if (numnodes == 0) head = new node(value, null); node p = head; while (p.next!= null) p = p.next; p.next = new node(value, null); numnodes++;

public int removelast() // Ta ut sist i kø if (numnodes == 1) int v = head.value; head = null; if (numnodes!= 0) node p = head; while (p.next.next!= null) p = p.next; int v = p.next.value; p.next = null; // Feil, forsøk på fjerning fra tom kø // Håndterer ikke feilen på noen fornuftig måte Oppgave 3 a) b)

c) d) Oppgave 4 a) Her holder det med bare å legge inn en if test som stopper whileløkken som går nedover i treet, med en gang vi finner ut at verdien som skal legges inn finnes fra før: public boolean insert(int value) node p = root, q = null; int cmp = 0; q = p; cmp = value p.value; // Oppgave 4 a): Stopper hvis verdi finnes fra før if (cmp == 0) return false; p = cmp < 0? p.left : p.right; p = new node(value);

if (empty()) root = p; if (cmp < 0) q.left = p; q.right = p; n++; return true; b) Dette blir relativt likt første del av insert metoden ovenfor. Vi trenger bare å bruke en ekstra variabel D som holder rede på dybden etterhvert som vi søker nedover i treet, og så terminere og returnere verdien av D når den søkte verdien finnes. I løsningen nedenfor er det litt mer kode enn det som oppgaven egentlig ber om. Det er først laget en public metode som finner dybden til en verdi i hele treet. Denne metoden kaller en privat metode som finner dybden til en verdi i et subtre med en gitt rot. Denne private metoden skal senere brukes i løsningen av oppgave 4 c). public int depth(int value) return depth(value, root); private int depth(int value, node p) int cmp = 0, D = 0; cmp = value p.value; if (cmp == 0) return D; p = cmp < 0? p.left : p.right; D++; c) Denne oppgaven kan løses på mange måter, men uansett teknikk må vi finne den nærmeste felles forgjengeren til noden til v1 og noden til v2. En måte kunne være å legge alle nodene på veien nedover (til v1 og til v2) inn i en kø og så sammenligne de to køene. En annen måte er å søke og stoppe der veien skiller seg. Vi velger den siste måten i løsningen nedenfor, med bruk av den private metoden depth fra oppgave 4 b). Merk at hvis de to nodene ligger på samme gren i treet, definerer vi den noden som ligger lengst opp (nærmest roten) som nærmeste felles forgjenger.

public int distance(int v1, int v2) // Bytter evt. om verdiene slik at v1 alltid vil være mindre // eller lik v2 if (v1 > v2) int tmp = v2; v2 = v1; v1 = tmp; // Finner nærmeste felles forgjenger node p = root; if (v2 < p.value ) // v1 og v2 ligger til venstre p = p.left; if (v1 > p.value) // v1 og v2 ligger til høyre p = p.right; break; // Veien deler seg i p if (p == null) // Ingen av verdiene finnes i treet // Finner dybden til hver node i subtreet med rot i nærmeste // forgjenger int D1 = depth(v1, p), D2 = depth(v2, p); if (D1 == 1 D2 == 1) // En av verdiene finnes ikke // Avstanden er summen av avstandene til nærmeste forgjenger return D1 + D2;