Algoritmer og datastrukturer Eksamen

Like dokumenter
Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

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

Algoritmer og datastrukturer Løsningsforslag

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

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Algoritmer og datastrukturer Løsningsforslag

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

Algoritmer og datastrukturer Kapittel 9 Delkapittel 9.2

Algoritmer og datastrukturer Binære søketrær

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 Kapittel 9 - Delkapittel 9.2

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

EKSAMEN med løsningsforslag

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Definisjon av binært søketre

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.3

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

Algoritmer og Datastrukturer

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

INF1010 Binære søketrær ++

Algoritmer og Datastrukturer

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

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

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

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

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

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.4

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

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.1

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

Algoritmer og datastrukturer Kapittel 4 Delkapittel 4.2

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

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

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

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

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 4 - Delkapittel 4.2

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

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

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

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

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

UNIVERSITETET I OSLO

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

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

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

Binære trær: Noen algoritmer og anvendelser

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

Lars Vidar Magnusson

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.3

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Løsningsforslag til INF110 h2001

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

INF2220: Forelesning 2

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

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

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

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

INF1010 Sortering. Marit Nybakken 1. mars 2004

Object [] element. array. int [] tall

Algoritmer og Datastrukturer IAI 21899

Generelle trær BINÆRTRÆR. Binærtrær

København 20 Stockholm

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

Rekursjon. Binærsøk. Hanois tårn.

Kap 9 Tre Sist oppdatert 15.03

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF1010 siste begreper før oblig 2

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

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

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Transkript:

Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 1 av 6 Algoritmer og datastrukturer Eksamen 27.11.2012 Eksamensoppgaver Råd og tips: Bruk ikke for lang tid på et punkt i en oppgave hvis du ikke får det til innen rimelig tid. Gå isteden videre til neste punkt. Hvis du i et senere punkt får bruk for det du skulle ha laget i et tidligere punkt, 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 å la noen punkter stå helt blanke. Til og med det å demonstrere i en eller annen form at du har forstått hva det spørres etter og/eller at du har en idé 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 likt! Hvis du skulle ha bruk for en datastruktur fra java.util eller fra kompendiet, kan du fritt bruke det uten å måtte kode det selv. Men du bør kommentere at du gjør det. Oppgave 1 1A. Lag metoden public static void halvbytt(int[] a). Den skal gjøre at verdiene i første og andre halvdel av tabellen a bytter plass. Rekkefølgen internt i halvdelene skal ikke endres. Dette vil kun virke hvis lengden til a er et partall. Metoden skal derfor kaste en IllegalArgumentException hvis lengden til a ikke er et partall. Se flg. eksempel: int[] a = 1,2,3,4,5,6,7,8,9,10; halvbytt(a); System.out.println(Arrays.toString(a)); // Utskrift: [6, 7, 8, 9, 10, 1, 2, 3, 4, 5] 1B. De åtte navnene Per, Kari, Anton, Ali, Jasmin, Hansine, Knut og Anders skal sorteres etter flg. ordning: Hvis et navn x er kortere (har færre tegn) enn et navn y, skal x komme foran y. Hvis de er like lange, skal de ordnes alfabetisk. 1. 2. Sett opp de åtte navnene i sortert rekkefølge med hensyn på den gitte ordningen. Lag metoden compare i klassen StringKomparator (se vedlegget). Den skal ordne tegnstrenger etter samme type ordning som den som er satt opp for navn. Dvs. hvis en tegnstreng s er kortere enn en tegnstreng t, skal s komme foran t. Hvis de er like lange, skal de ordnes alfabetisk. 1C. Lag metoden public static <T> void kopier(stakk<t> A, Stakk<T> B). Metoden skal gjøre at stakken B, gitt at den på forhånd er tom, får de samme verdiene i samme rekkefølge som det A har. Stakken A skal etterpå være som den opprinnelig var. Grensesnittet Stakk står i vedlegget. Se flg. eksempel:

Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 2 av 6 Stakk<Integer> A = new TabellStakk<>(); // A er tom Stakk<Integer> B = new LenketStakk<>(); // B er tom int[] tall = 1,2,3,4,5; for (int k : tall) A.leggInn(k); kopier(a,b); B.leggInn(6); System.out.println(A + " " + B); // legger inn tallene i A // B blir en kopi av A // legger inn 6 i B // bruker tostring-metoden // Utskrift: [5, 4, 3, 2, 1] [6, 5, 4, 3, 2, 1] Oppgave 2 2A. La a være gitt ved int[] a = 5, 3, 4, 1, 2. Hvordan vil a se ut etterpå hvis koden under anvendes på a? Hva kalles denne teknikken? Hvilken orden har den? for (int i = 1; i < a.length; i++) int temp = a[i], j = i-1; while(j >= 0 && temp < a[j]) a[j+1] = a[j]; j--; a[j+1] = temp; 2B. Hva er et komplett binærtre? Tegn et komplett binærtre med plass til 10 verdier. Legg inn tallene fra 1 til 10 slik at de kommer i sortert rekkefølge i inorden. 2C. Definisjonen av et 2-3-4 tre og en algoritme for innlegging av verdier er gitt i vedlegget. Legg verdiene 7, 5 og 12 inn i et på forhånd tomt 2-3-4 tre. Lag en tegning av treet! Legg så inn 10 i treet. Lag en tegning av hvordan treet nå ser ut. Legg så inn 3, så 8 og til slutt 9. Lag en tegning av hvordan treet nå ser ut. Oppgave 3 3A. Gitt tallene: 7, 2, 9, 1, 5, 8, 10, 3, 6, 4. Legg dem inn, i den gitte rekkefølgen, i et på forhånd tomt binært søketre. Tegn treet. Skriv ut verdiene i nivåorden og preorden. Vedlegget inneholder et «skjelett» for klassen SBinTre - et binært søketre. Av de metodene som klassen inneholder, er noen ferdigkodet. Resten skal kodes. 3B. Lag metoden public boolean inneholder(t verdi). Den skal returnere true hvis treet inneholder parameterverdien verdi og returnere false ellers. 3C. Skriv opp første og andre verdi i postorden i treet fra Oppgave 3A. Lag metoden public T andrepostorden(). Den skal returnere den andre verdien (den som kommer som nummer to) i postorden. Hvis treet er tomt eller har kun én verdi, skal metoden kaste en NoSuchElementException med en passelig tekst. Lag metoden så effektiv som mulig.

Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 3 av 6 3D. Lag metoden public static <T> SBinTre<T> kopi(sbintre<t> tre). Den skal returnere en kopi av parametertreet tre, dvs. et nytt tre, men med samme form, innhold og komparator som tre. Du bestemmer selv om du vil bruke rekursjon eller iterasjon og om du vil bruke hjelpemetoder eller ikke. Flg. eksempel viser hvordan metoden skal virke: int[] a = 2,1,4,3,5; Comparator<Integer> c = Komparator.naturlig(); SBinTre<Integer> tre = new SBinTre<>(c); for (int k : a) tre.legginn(k); // bygger treet SBinTre<Integer> kopitre = SBinTre.kopi(tre); // lager en kopi tre.legginn(1); // legger inn 1 i treet kopitre.legginn(5); // legger inn 5 i kopitreet System.out.println(tre + " " + kopitre); // Utskrift: [1, 1, 2, 3, 4, 5] [1, 2, 3, 4, 5, 5] Vedlegg public class StringKomparator implements Comparator<String> public int compare(string s, String t) // class StringKomparator public interface Stakk<T> public void legginn(t verdi); public T kikk(); public T taut(); public int antall(); public boolean tom(); public void nullstill(); // legger verdi på toppen // ser på den øverste // tar ut den øverste // antall på stakken // er stakken tom? // tømmer stakken Et 2-3-4 tre har flg. egenskaper: En node kan ha 1, 2 eller 3 verdier. En indre node har 2, 3 eller 4 barn. Et 2-3-4 tre Antallet verdier i en indre node er alltid én mindre enn antallet barn som noden har. Alle bladnoder ligger på samme nivå i treet. Det tillates ikke duplikatverdier.

Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 4 a... Algoritme for innlegging av verdi i et 2-3-4 tre: 1. 2. 3. 4. 5. Hvis verdi er den første, legg den i rotnoden (som da blir en bladnode). Hvis ikke, legg verdi på rett sortert plass i den bladnoden som den hører til ut fra sorteringen. Hvis noden da får tre eller færre verdier, er innleggingen ferdig. Hvis noden får fire verdier, del den i to slik at de to første verdiene kommer i den ene (første) noden og den siste verdien i den andre noden. Flytt den tredje verdien (av de fire) oppover, dvs. legg den på rett sortert plass i foreldernoden. De to nodene blir venstre og høyre barn med hensyn på verdien som ble flyttet til foreldernoden. Hvis det ikke er noen foreldernode, må den opprettes først. Hvis foreldernoden får 3 eller færre verdier, er innleggingen ferdig. Hvis ikke, fortsett fra punkt 3. public class SBinTre<T> // et binært søketre private static final class Node<T> // en indre nodeklasse private T verdi; // nodens verdi private Node<T> venstre, høyre; // venstre og høyre barn private Node(T verdi) // konstruktør this.verdi = verdi; venstre = høyre = null; // class Node private Node<T> rot; private int antall; private final Comparator<? super T> comp; public SBinTre(Comparator<? super T> c) rot = null; antall = 0; // et tomt tre har 0 noder comp = c; // peker til rotnoden // antall noder // komparator // konstruktør public int antall() return antall; public boolean tom() return antall == 0; public void legginn(t verdi) if (verdi == null) throw new NullPointerException("Nullverdier er ulovlig!");

Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 5 av 6 Node<T> p = rot, q = null; int cmp = 0; // pekere // hjelpevariabel while (p!= null) // while-løkke q = p; // q skal være forelder til p cmp = comp.compare(verdi, p.verdi); // sammenligner if (cmp < 0) p = p.venstre; // går til venstre else p = p.høyre; // går til høyre p = new Node<>(verdi); if (q == null) rot = p; else if (cmp < 0) q.venstre = p; else q.høyre = p; antall++; // en ny node // tomt tre // blir venstre barn // blir høyre barn // en ny node i treet public String tostring() StringBuilder s = new StringBuilder(); // StringBuilder s.append('['); // starter med [ if (!tom()) tostring(rot,s); // den rekursive metoden s.append(']'); // avslutter med ] return s.tostring(); // returnerer private static <T> void tostring(node<t> p, StringBuilder s) if (p.venstre!= null) // p har et venstre subtre tostring(p.venstre, s); // komma og mellomrom etter s.append(',').append(' '); // den siste i det venstre // subtreet til p s.append(p.verdi); // verdien i p if (p.høyre!= null) // p har et høyre subtre s.append(',').append(' '); // komma og mellomrom etter p tostring(p.høyre, s); // siden p ikke er den siste // noden i inorden public boolean inneholder(t verdi) public T andrepostorden()

Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 6 a... public static <T> SBinTre<T> kopi(sbintre<t> tre) // class SBinTre