Algoritmer og datastrukturer Løsningsforslag

Like dokumenter
Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og datastrukturer Eksamen

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

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

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

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

Algoritmer og datastrukturer Eksamen

EKSAMEN med løsningsforslag

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

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

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

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

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

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

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

Quicksort. Fra idé til algoritme.

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer IAI 21899

INF1010 Binære søketrær ++

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

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Definisjon av binært søketre

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

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

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

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

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

Algoritmer og Datastrukturer

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

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

Algoritmer og Datastrukturer

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

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

Algoritmer og Datastrukturer

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

Algoritmer og datastrukturer Binære søketrær

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

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

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

Løsningsforslag til INF110 h2001

INF1010 notat: Binærsøking og quicksort

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.4

Binære trær: Noen algoritmer og anvendelser

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

Kapittel 8: Sortering og søking

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

UNIVERSITETET I OSLO

Obligatorisk oppgave 1 INF1020 h2005

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

UNIVERSITETET I OSLO

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

Object [] element. array. int [] tall

UNIVERSITETET I OSLO

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

8NH )RUHOHVQLQJ 'HSDUWPHQWÃRIÃ,QIRUPDWLFVÃ8QLYHUVLW\ÃRIÃ2VORÃ1RUZD\,1) ± $OJRULWKPVÃÉÃ'DWDÃ6WUXFWXUHV

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Norsk informatikkolympiade runde

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

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

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

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

Løsningsforslag til eksamen i INF1000 våren 2006

Kapittel 9: Sortering og søking Kort versjon

KONTINUASJONSEKSAMEN

Løsningsforslag 2017 eksamen

UNIVERSITETET I OSLO

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.

UNIVERSITETET I OSLO

Kapittel 9: Sortering og søking Kort versjon

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

UNIVERSITETET I OSLO

Lars Vidar Magnusson

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3

UNIVERSITETET I OSLO

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

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

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Kapittel 9: Sortering og søking Kort versjon

EKSAMEN. Emne: Algoritmer og datastrukturer

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Transkript:

Algoritmer og datastrukturer ved Høgskolen i OsloSide 1 av 6 Algoritmer og datastrukturer Løsningsforslag Eksamen 24. februar 2010 Oppgave 1A 1. Komparatoren sammenligner først lengdene til de to strengene. Variablen k vil dermed få verdien 1 siden "Per" er «kortere» enn "Kari". 2. Strengene sammenlignes først med hensyn på lengde (kortest er minst) og alfabetisk hvis de har samme lengde. Dermed blir utskriften slik: Ali Liv Per Kari Nils Jasmin Oppgave 1B Oppgave 1C Oppgave 1D Det er gitt at parametertabellen c kun inneholder bokstavene 'U', 'L' eller 'F'. Oppgaven kan løses på mange forskjellige måter. Her er noen forslag: 1. Gå gjennom tabellen og tell opp hvor mange det er av hver av de tre bokstavene. Skriv så ut i tabellen c så mange 'U'-er som antallet sier, deretter så mange 'L'-er som antallet sier og til slutt 'F'-ene.

Algoritmer og datastrukturer ved Høgskolen i Oslo Side 2 av 6 2. Sorter tabellen ved hjelp av en ferdig sorteringsmetode (da kommer bokstavene i motsatt rekkefølge av det vi ønsker) og snu deretter tabellen. Dette vil fungere, men er egentlig ineffektivt: public static void bytt(char[] a, int i, int j) char temp = a[i]; a[i] = a[j]; a[j] = temp; public static void snu(char[] c) for (int v = 0, h = c.length -1; v < h; v++, h--) bytt(c, v, h); public static void omorganiser(char[] c) Arrays.sort(c); snu(c); 3. Det finnes en effektiv måte å løse dette på. Det kalles tredelt partisjonering: public static void omorganiser(char[] c) int v = 0, h = c.length-1, k = h; // v forrest, h og k bakerst while (v <= h) if (c[h] == 'U') Tabell.bytt(c,v++,h); else if (c[h] == 'L') h--; else Tabell.bytt(c,h--,k--); Oppgave 2A public void legginnførst(t verdi) hode = new Node<T>(verdi,hode); antall++; public T tautførst() if (antall == 0) throw new NoSuchElementException(); T temp = hode.verdi; hode = hode.neste; hode.verdi = null; antall--; return temp;

Algoritmer og datastrukturer ved Høgskolen i Oslo Side 3 av 6 Oppgave 2B public void legginnsist(t verdi) if (antall == 0) hode = new Node<T>(verdi,null); else Node<T> p = hode; while (p.neste!= null) p = p.neste; p.neste = new Node<T>(verdi,null); antall++; public T tautsist() if (antall == 0) throw new NoSuchElementException(); else if (antall == 1) T temp = hode.verdi; hode = null; antall--; return temp; else Node<T> p = hode; while (p.neste.neste!= null) p = p.neste; T temp = p.neste.verdi; p.neste = null; antall--; return temp; Oppgave 3A Inorden: C G I L R F H P O A B E S K N Q J D M Nivåorden: A F J C H E M I O B N D G L P K Q R S

Algoritmer og datastrukturer ved Høgskolen i Oslo Side 4 av 6 Oppgave 3B 3B, punkt 1. 3B, punkt 2. I metoden komplett lages først et tomt tre. Så legges det inn verdier med posisjoner slik at treet blir komplett. Til slutt returneres det ferdige treet: public static <T> BinTre<T> komplett(t[] a) BinTre<T> tre = new BinTre<T>(); for (int i = 1; i <= a.length; i++) tre.legginn(a[i - 1], i); return tre; En rekursiv teknikk vil gi en mer effektiv metode: private static <T> Node<T> komplett(t[] a, int k) if (k > a.length) return null; return new Node<T>(komplett(a,2*k), komplett(a,2*k+1), a[k-1],k); public static <T> BinTre<T> komplett(t[] a) BinTre<T> tre = new BinTre<T>(); tre.rot = komplett(a,1); tre.antall = a.length; return tre; Oppgave 3C Først en hjelpemetode som bytter om barna til en node: private static <T> void byttbarn(node<t> p) // hjelpemetode Node<T> q = p.venstre; p.venstre = p.høyre; p.høyre = q;

Algoritmer og datastrukturer ved Høgskolen i Oslo Side 5 av 6 Dette kan løses f.eks. ved hjelp av to rekursive metoder. Den første speilvender treet og den andre går gjennom treet og setter korrekte posisjoner: // rekursiv hjelpemetode private static <T> void speilvend(node<t> p) if (p == null) return; byttbarn(p); speilvend(p.venstre); speilvend(p.høyre); // rekursiv hjelpemetode private static <T> void settposisjoner(node<t> p, int pos) if (p == null) return; p.posisjon = pos; settposisjoner(p.venstre, 2*pos); settposisjoner(p.høyre, 2*pos + 1); public void speilvend() if (antall > 1) speilvend(rot); settposisjoner(rot, 1); Det blir imidlertid en bedre løsning hvis en speilvender og setter korrekte posisjoner i samme metode. Da traverseres treet bare én gang: // rekursiv hjelpemetode private static <T> void speilvend(node<t> p, int pos) if (p == null) return; p.posisjon = pos; byttbarn(p); speilvend(p.venstre, 2*pos); speilvend(p.høyre, 2*pos + 1); public void speilvend() if (antall > 1) speilvend(rot,1); Oppgave 3D Hvis noden p har et ikke-tomt høyre subtre, så er den neste i inorden den noden som ligger lengst ned til venstre i dette subtreet. Hvis ikke, må vi oppover i treet. Da finner vi først

Algoritmer og datastrukturer ved Høgskolen i Oslo Side 6 av 6 hvilken posisjon den neste må ha. Deretter kan vi starte i roten og lete oss ned til den posisjonen: private Node<T> nesteinorden(node<t> p) if (p.høyre!= null) p = p.høyre; while (p.venstre!= null) p = p.venstre; else int posisjon = p.posisjon; while (posisjon % 2!= 0) posisjon /= 2; if (posisjon == 0) return null; posisjon /= 2; // posisjonen til neste i inorden String s = Integer.toBinaryString(posisjon); p = rot; for (int i = 1; i < s.length(); i++) p = s.charat(i) == '0'? p.venstre : p.høyre; return p;