EKSAMEN. Emne: Algoritmer og datastrukturer Eksamenstid: kl til kl. 1300

Like dokumenter
Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

EKSAMEN. Algoritmer og datastrukturer

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

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

EKSAMEN med løsningsforslag

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

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

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

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

EKSAMEN. Emne: Algoritmer og datastrukturer

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

EKSAMEN. Emne: Algoritmer og datastrukturer

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

EKSAMEN. Objektorientert programmering

Algoritmer og Datastrukturer

EKSAMEN ITF Webprogrammering 1 Dato: Eksamenstid: Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne)

Høgskoleni østfold NY/UTSATT EKSAMEN

Algoritmer og datastrukturer Eksamen

Oppgave 1. Sekvenser (20%)

Løsningsforslag EKSAMEN

Algoritmer og Datastrukturer

EKSAMEN. Oppgavesettet består av 16 oppgaver. Ved sensur vil alle oppgaver telle like mye med unntak av oppgave 6 som teller som to oppgaver.

Eksamen Objektorientert Programmering 2013

INF1010 Binære søketrær ++

Algoritmer og Datastrukturer

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

EKSAMEN. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

Løsningsforslag. Emnekode: Emne: Matematikk for IT ITF Eksamenstid: Dato: kl til kl desember Hjelpemidler: Faglærer:

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

EKSAMEN. Oppgavesettet består av 9 oppgaver med i alt 21 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Løsningsforslag

EKSAMEN. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

EKSAMEN (Konvertert fra en gammel PHPeksamen)

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

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen

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

EKSAMEN. Oppgavesettet består av 11 oppgaver med i alt 21 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

Høgskoleni østfold EKSAMEN. ITF10213 Innføring i programmering (Høst 2013)

Definisjon av binært søketre

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

København 20 Stockholm

Algoritmer og Datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 7

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Obligatorisk oppgave 1 INF1020 h2005

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

EKSAMEN. Evaluering av IT-systemer. Eksamenstid: kl 0900 til kl 1300

Algoritmer og datastrukturer Eksamen

Høgskoleni østfold EKSAMEN

Algoritmer og Datastrukturer

EKSAMEN. Bildebehandling og mønstergjenkjenning

EKSAMEN. Emne: Webprogrammering med PHP (kont.) Webprogrammering 1 (kont.) Eksamenstid:

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

Norges Informasjonsteknologiske Høgskole

Algoritmer og Datastrukturer IAI 21899

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

UNIVERSITETET I OSLO

Høgskoleni østfold EKSAMEN. ITD33506 Bildebehandling og monstergjenkjenning. Dato: Eksamenstid: kl 9.00 til kl 12.00

UNIVERSITETET I OSLO

Liste som abstrakt konsept/datatype

Eksamen IN1010/INF1010 våren 2018

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

Lars Vidar Magnusson

Løsningsforslag. Oppgavesettet består av 9 oppgaver med i alt 20 deloppgaver. Ved sensur vil alle deloppgaver telle omtrent like mye.

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

Algoritmer og datastrukturer Løsningsforslag

Emnenavn: Matematikk for IT. Eksamenstid: Faglærer: Christian F Heide

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

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Løsningsforslag

Definisjon: Et sortert tre

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

Emnenavn: Objektorientert programmering. Faglærer: Lars Emil Knudsen

Eksamen Objektorientert Programmering 2011

UNIVERSITETET I OSLO

Høgskoleni østfold EKSAMEN

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Løsningsforslag til eksamen i PG4200 Algoritmer og datastrukturer 10. desember 2014

UNIVERSITETET I OSLO

EKSAMEN (Konvertert fra en gammel PHP-eksamen)

EKSAMEN (Del 1, høsten 2015)

Objektorientert Programmering Ekstraordinær eksamen 2014

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen 22. februar 2011

Kap 9 Tre Sist oppdatert 15.03

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

Transkript:

EKSAMEN Emnekode: ITF 20006 Dato: 16. mai 2006 Hjelpemidler: Emne: Algoritmer og datastrukturer Eksamenstid: kl. 0900 til kl. 1300 8 A4 sider (4 ark) med valgfritt innhold. Det er ikke tillatt å dele arkene inn i flere rader/kolonner. Eksamensoppgaven: Faglærer: Mari Ann Akerjord Oppgavesettet består av 10 sider inklusiv denne forsiden. I tillegg kommer vedleggene. Oppgavesettet består av 3 oppgaver med henholdsvis 6, 4 og 3 deloppgaver. Alle oppgavene skal besvares. Ved sensur teller hver deloppgave omtrent like mye. Karakter fastsettes dog på basis av en helhetsvurdering av besvarelsen. Vedlegg: Oppgavesettet har to vedlegg: Vedlegg A, 3 sider Vedlegg B, 14 sider Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene. Sensurdato: 6. juni 2006 Karakterene er tilgjengelige for studenter på studentweb senest dagen etter oppgitt sensurfrist. Følg instruksjoner gitt på: http://www.hiof.no/index.php?id=7027 1

Oppgave 1 Lønningskontoret i en bedrift vil lage et register over sine lønnstagere. Følgende data skal registreres for hver person: ID Etternavn Fornavn Fødselsår Inntekt De bestemmer seg for å legge inn data for hver person i et binært søketre. Søketreet skal være sortert på personenes ID, som er unik. Oppgave 1.1 Nedenfor ser du en liste med personer. Tegn treet du får når du legger disse personene inn i den rekkefølgen de står i et på forhånd tomt binært søketre. Søketreet skal være sortert etter personenes ID. Når du tegner treet trenger du kun å angi personenes ID i treets noder. ID Etternavn Fornavn Fødselsår Inntekt (kr) 7 Tommysen Nils 1978 153300 4 Arildsen Trond 1969 189200 10 Franksen Dag 1972 182800 2 Grodatter Laila 1947 336100 12 Ivarsen Øyvind 1979 970002 9 Trinedatter Grete 1940 603600 8 Catrinedatter Sissel 1982 1473000 14 Tonedatter Eva 1946 241000 13 Jennydatter Sigrid 1973 159100 1 Frodesen Frank 1970 144000 3 Johannesen Kåre 1963 208500 5 Torilldatter Grete 1944 283500 6 Thomassen Geir 1952 133500 11 Alfsen Oddvar 1986 1001300 2

Oppgave 1.2 Skriv nodene i treet fra forrige deloppgave i inorden rekkefølge. Du trenger kun å skrive personenes ID. Denne oppgaven skal altså utføres manuelt, det vil si du skal ikke skrive noen programkode. De tre neste deloppgavene går ut på å implementere metoder for å utføre operasjoner på søketreet. I vedlegg A finner du klassen Person, samt utkast til en klasse PersonSoketre. Klassen Person representerer en person. Klassen PersonSoketre representer selve treet, og inneholder blant annet en privat klasse Node som representerer en node i søketreet. En node har i tillegg til data om en person referanser til nodens barn i treet. Metodene som skal lages i de neste tre deloppgavene er plassert i klassen PersonSoketre. Oppgave 1.3 Skriv metoden public Node settinn(person ny, Node rot) som setter inn person objektet ny på riktig plass i det binære søketreet som har rot i noden rot. Metoden skal returnere roten i treet. Du kan selv velge om du vil implementere metoden settinn rekursivt eller iterativt. Oppgave 1.4 Skriv metoden public Node finnperson(int id, Node rot) som finner og returnerer noden som inneholder person objektet med ID = id i det binære søketreet som har rot i noden rot. Hvis det ikke finnes en person med angitt ID i treet, returneres null. Velg selv om du vil implementere metoden finnperson rekursivt eller iterativt. 3

Oppgave 1.5 Skriv metoden public void skrivmillioninntekter(node rot) som skriver til skjerm alle personer som har inntekt større enn en million. Utskriften skal være sortert på ID. Parameteren rot er roten i søketreet. Oppgave 1.6 Anta at det er N noder i søketreet. Hva er arbeidsmengden, uttrykt med O notasjon, til hver av metodene fra oppgavene 1.3, 1.4 og 1.5? Hvis du ikke har fått til en eller flere av disse deloppgavene, kan du likevel besvare denne oppgaven ut fra din kjennskap til binære søketrær. Slutt oppgave 1 4

Oppgave 2 Et vanlig bruksområde for grafer er å finne ruter mellom posisjoner. I denne oppgaven er et system for å angi veier og knutepunkter angitt. Et knutepunkt er ett sted der en vei deler seg i flere veier (eller flere veier møtes). En vei angis av veinavn, lengde, start og slutt. Merk at en vei her egnetlig er en etappe på en vei. Det vil si at for eksempel E6 vil bli modellert av flere veier, der alle har navn E6, og går mellom ulike knutepunkter. Oppgave 2.1 Nedenfor ser du et utsnitt av et kart hvor markerte veier og knutepunkter tilsammen danner en graf. Bruk Dijkstras algoritme på denne grafen til å finne korteste vei mellom Sarpsborg og Halden med hensyn på avstand. Denne oppgaven skal ikke kodes, men du skal manuelt vise hvordan algoritmen virker. 5

Studer klassene Vei og Knutepunkt som ligger i vedlegg B. Under brukes disse klassene til å sette opp grafen fra veikartet over. Knutepunkt sarpsborg = new Knutepunkt( Sarpsborg ); Knutepunkt lokkeberg = new Knutepunkt("Løkkeberg"); Knutepunkt sandbakken = new Knutepunkt("Sandbakken"); Knutepunkt rahaugen = new Knutepunkt("Rahaugen"); Knutepunkt halden = new Knutepunkt("Halden"); Knutepunkt fredrikstad = new Knutepunkt("Fredrikstad"); Knutepunkt stasjonsbyen = new Knutepunkt("Stasjonsbyen"); sarpsborg.settoppforbindelse("rv118",6.5,sandbakken); sandbakken.settoppforbindelse ("rv118",3.9,stasjonsbyen); sarpsborg.settoppforbindelse ("rv109",16.8,fredrikstad); fredrikstad.settoppforbindelse ("rv110",16.6,stasjonsbyen); stasjonsbyen.settoppforbindelse ("rv118",12.4,lokkeberg); lokkeberg.settoppforbindelse ("rv21",7.1,halden); sandbakken.settoppforbindelse ("rokkeveien",15.6,rahaugen); rahaugen.settoppforbindelse ("rv22",6.3,halden); Oppgave 2.2 Metoden hentveier() i klassen Knutepunkt returnerer en VeiIterator, som skal kunne brukes til å iterere over veiene fra et knutepunkt. Så langt finnes imidlertid ikke klassen VeiIterator. Lag klassen VeiIterator slik at den implementerer interfacet Iterator. Javadoc til interfacet Iterator og til klassen ArrayList ligger i vedlegg B. Du skal ikke bruke ArrayList sin innebyggede iterator. Du trenger ikke implementere metoden remove(), men kan la metoden kaste et unntak av typen UnsupportedOperationException. 6

De to neste deloppgavene går ut på å implementere metoder som bruker en ferdig oppsatt graf til å finne bestemte relasjoner mellom knutepunkter. Du kan anta at oppsett av graf og metodene som er beskrevet nedenfor er samlet i en egen klasse. Oppgave 2.3 Skriv en metode naboknutepunkt, public static void naboknutepunkt(knutepunkt k) som finner og skriver ut alle naboer til ett knutepunkt. For hver nabo skal knutepunktets navn, samt navn på vei frem til dette knutepunktet og avstand i kilometer skrives til skjerm. Brukt på grafen i eksemplet over, skal metodekallet naboknutepunkt(sarpsborg) ; gi følgende utskrift til skjerm: Sandbakken: rv118, 6.5 km Fredrikstad: rv109, 16.8 km Bruk iteratoren fra oppgave 2.2. Hvis du ikke fikk til den deloppgaven, kan du likevel anta at du har en fungerende iterator. Legg ellers merke til metoden motsattende(knutepunkt k), som befinner seg i klassen Vei. Oppgave 2.4 Lag en metode som skriver ut alle mulige destinasjoner fra et knutepunkt, det vil si hvilke andre knutepunkter det er mulig å komme til fra et gitt knutepunkt. public static void muligedestinasjoner(knutepunkt k) Du trenger kun å skrive ut navnet på hver destinasjon. Brukt på grafen i eksemplet over, kan metodekallet 7

muligedestinasjoner(sarpsborg); gi følgende utskrift til skjerm: Sandbakken Stasjonsbyen Fredrikstad Løkkeberg Halden Rahaugen Velg selv om du vil løse oppgaven rekursivt eller ikke rekursivt. Velger du en ikkerekursiv løsning kan du for eksempel benytte en kø. Du finner javadoc til en køimplementasjon i vedlegg B. For en rekursiv løsning er et tips å lage en annen metode til bruk i drivermetoden over. private static void muligedestinasjoner(knutepunkt k, ArrayList<Knutepunkt> besokt) Slutt oppgave 2 8

Oppgave 3 Oppgave 3.1 Under er det beskrevet noen operasjoner på ulike datastrukturer. For hver av dem skal du angi arbeidsmengden i O notasjon. Begrunn svarene og gjør rede for eventuelle antakelser og presiseringer. A) Fjerne øverste elementet på en stakk. B) Skrive ut alle elementene som ligger på en stakk slik at det øverste elementet kommer først. C) Skrive ut alle elementene som ligger på en stakk slik at det nederste elementet kommer først. D) Skrive ut det femte siste elementet i en tabell. E) Skrive ut det femte siste elementet i en enkeltlenket liste. F) Finne det minste elementet i et binært søketre. G) Sette inn et nytt element på begynnelsen av en lenket liste. H) Fjerne elementet som ligger i begynnelsen (indeks 0) i en tabell. Oppgave 3.2 A) Forklar kort hva en prioritetskø er, og gi ett eksempel på anvendelse. B) Gitt at du skal implementere en prioritetskø. Hvilke fordeler og ulemper ser du ved å benytte følgende datastrukturer som intern struktur: 1. Lenket liste 2. Sortert lenket liste 3. Binært søketre C) Ofte benyttes en såkalt minimumsheap til å implementere prioritetskøer. Forklar kort hva en minimumsheap er, og hvorfor nettopp denne strukturen er gunstig med hensyn på implementasjon av prioritetskøer. 9

Oppgave 3.3 Nedenfor ser du et eksempel på et Huffman tre. Bruk dette til å dekode følgende bitsekvens: 10001010110111110101000001010010111 Forklar kort hvordan du gikk frem. m e o s _ d! G r Slutt oppgave 3 10

Vedlegg A Vedlegg til oppgave 1: 1. Klassen Person 2. Klassen PersonSoketre public class Person implements Comparable<Person> private int id; private String etternavn; private String fornavn; private int fodselsaar; private int inntekt; public Person( int id, String etternavn, String fornavn, int fodselsaar, int inntekt) this.id = id; this.etternavn = etternavn; this.fornavn = fornavn; this.fodselsaar = fodselsaar; this.inntekt = inntekt; public int compareto(person p) return id-p.id; public int hentid() return id; 11

public int hentinntekt() return inntekt; public String tostring() return // Slutt class Person id +", " + etternavn +", " + fornavn + ", " + fodselsaar + ", " + inntekt; public class PersonSokeTre private Node rot; // Oppgave 1.3 public Node settinn(person ny, Node rot) // Din kode her. // Oppgave 1.4 public Node finnperson(int id, Node rot) // Din kode her. // Oppgave 1.5 public void skrivmillioninntekter(node rot) // Din kode her private class Node private Person data; // Nodens data private Node venstre; // Venstre barn 12

private Node hoyre; // Hoyre barn public Node(Person p, Node v, Node h) data = p; venstre = v; hoyre = h; // Slutt class Node // Slutt class PersonSoketre 13

Vedlegg B Vedlegg til oppgave 2: 1. Klassen Vei 2. Klassen Knutepunkt 3. Javadoc til interfacet Iterator 4. Javadoc til klassen ArrayList 5. Javadoc til klassen ArrayQueue (kø implementasjon) public class Vei private Knutepunkt k1 = null; private Knutepunkt k2 = null; private String veinavn = ""; private double avstand = 0.0; k2) public Vei(String veinavn,double avstand,knutepunkt k1,knutepunkt this.veinavn=veinavn; this.avstand=avstand; this.k1=k1; this.k2=k2; public Knutepunkt motsattende(knutepunkt k) return (k==k1?k2:k1); public double hentavstand() return avstand; 14

public String hentnavn() return veinavn; // Slutt class Vei public class Knutepunkt private ArrayList<Vei> veier = new ArrayList<Vei>(); private String knutepunktnavn = ""; public Knutepunkt(String navn) knutepunktnavn = navn; private void leggtilvei(vei v) veier.add(v); public void settoppforbindelse(string veinavn,double km, Knutepunkt maal) Vei v = new Vei(veinavn,km,this,maal); this.leggtilvei(v); maal.leggtilvei(v); public Iterator<Vei> hentveier() 15

return new VeiIterator(); public String hentnavn() return knutepunktnavn; // Slutt class Knutepunkt 16