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

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

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

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

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: 5. januar 2018 Eksamenstid: 09:00 13:00

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN med løsningsforslag

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

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

EKSAMEN. Emne: Algoritmer og datastrukturer

Definisjon av binært søketre

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Eksamen

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

Binære trær: Noen algoritmer og anvendelser

Oppgave 1. Sekvenser (20%)

Algoritmer og Datastrukturer

Løsningsforslag EKSAMEN

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

UNIVERSITETET I OSLO

Definisjon: Et sortert tre

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Eksamen

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

Algoritmer og Datastrukturer

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

København 20 Stockholm

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

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

Løsningsforslag til INF110 h2001

KONTINUASJONSEKSAMEN

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Eksamen 22. februar 2011

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

EKSAMEN. Bildebehandling og mønstergjenkjenning

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

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

Algoritmer og Datastrukturer

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

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

Algoritmer og Datastrukturer IAI 21899

PG4200 Algoritmer og datastrukturer Forelesning 7

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

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Oppgave 1. Stabler og Køer (30%)

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

Vi skal se på grafalgoritmer for:

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

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

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Løsningsforslag

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

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

Stack. En enkel, lineær datastruktur

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

Liste som abstrakt konsept/datatype

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Løsningsforslag

Et eksempel: Åtterspillet

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

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Vi skal se på grafalgoritmer for:

Høgskoleni østfold EKSAMEN. 4 dobbeltsidige ark med notater Lars Magnusson

KONTINUASJONSEKSAMEN

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

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

Obligatorisk oppgave 1 INF1020 h2005

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

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

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

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

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

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

UNIVERSITETET I OSLO

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Transkript:

EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Kalkulator Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet består av i alt 10 sider, inkludert denne forsiden og de 4 vedleggene. Kontrollér at oppgaven er komplett før du begynner å besvare spørsmålene. Oppgavesettet består av 4 oppgaver med i alt 20 deloppgaver. Innen hver oppgave vektes alle deloppgaver likt. Les oppgavetekstene nøye før du begynner på besvarelsen. Legg vekt på å skrive en ryddig og lett forståelig besvarelse. Sensurfrist: 9. juni 2017 Karakterene er tilgjengelige for studenter på studentweb senest 2 virkedager etter oppgitt sensurfrist. www.hiof.no/studentweb Side 1 av 10

Oppgave 1: Algoritmeanalyse, rekursjon, stack og kø (25%) I deloppgavene a) e) nedenfor skal du lage fem ulike versjoner av denne Java-metoden: void snu(int A[]) Metoden snu skal snu om på (reversere) rekkefølgen av innholdet i arrayen (tabellen) A. F.eks. skal kjøring av denne Java-koden: int A[] = 1, 2, 3, 4, 5, 6, 7, 8, 9; snu(a); for (int i = 0; i < A.length; i++) System.out.print(A[i] + " "); System.out.println(); resultere i denne utskriften: 9 8 7 6 5 4 3 2 1 a) Lag en iterativ versjon av metoden snu som bruker en ekstra array B. Metoden skal først kopiere innholdet i A over i B, og deretter legge innholdet tilbake i A i reversert rekkefølge. b) Lag en iterativ versjon av metoden snu som ikke bruker noen ekstra array til å utføre reverseringen. c) Lag en versjon av metoden snu som bruker en rekursiv metode snurek for å utføre reverseringen av innholdet i A. Du skal programmere begge metodene, og må selv bestemme hvilke parametre metoden snurek skal ha. d) Lag en versjon av metoden snu som bruker en stack til å utføre reverseringen. Innholdet i A skal først kopieres over på stacken og deretter legges tilbake i reversert rekkefølge. Bruk metoder fra klassen intstack som er gitt i vedlegg 1 til å håndtere stacken. e) Lag en versjon av metoden snu som bruker en vanlig kø til å utføre reverseringen. Innholdet i A skal først legges inn i køen og deretter legges tilbake i reversert rekkefølge. Bruk metoder fra klassen intqueue som er gitt i vedlegg 2 til å håndtere køen. I oppgavene f) og g) nedenfor kan du la verdien n betegne antall elementer i arrayen A. f) Alle metodene i deloppgavene a) e) har arbeidsmengde av samme størrelsesorden. Hva er arbeidsmengden, uttrykt med n og O-notasjon? Gi en kort begrunnelse for svaret. g) Hvor mye ekstra primærminne (RAM), i tillegg til det som trengs for å lagre arrayen A, krever hver av metodene du har laget i deloppgavene a) e), uttrykt med n og O- notasjon? Gi en kort begrunnelse for svarene. (Slutt på oppgave 1) Side 2 av 10

Oppgave 2: Søking og sortering (15%) a) I denne oppgaven skal du lage følgende Java-metode: int finn(int A[], int verdi) Parameteren A er en array med heltall som er sortert i stigende rekkefølge. Metoden skal søke i A etter verdien angitt i parameteren verdi. Merk at det kan være flere like verdier i A. Metoden finn skal virke på denne måten: Hvis verdi finnes i arrayen A, skal metoden returnere indeksen i A der denne verdien ligger lagret. Indeksen er heltall større eller lik null og mindre enn antall elementer i arrayen. Hvis A inneholder flere forekomster av verdi, skal metoden returnere indeksen til første forekomst. Hvis verdi ikke finnes i A, skal metoden returnere et negativt tall som er lik: (index + 1) der index er indeksen i A der verdien ville ha ligget dersom den hadde vært lagret i array. Her er et Java-eksempel som viser hvorledes metoden finn skal fungere: int A[] = 2, 3, 5, 7, 10, 11, 12, 12, 18, 20; System.out.println( finn(a, 1) ); // Utskrift: 1 System.out.println( finn(a, 3) ); // Utskrift: 1 System.out.println( finn(a, 12) ); // Utskrift: 6 System.out.println( finn(a, 16) ); // Utskrift: 9 System.out.println( finn(a, 21) ); // Utskrift: 11 Den beste løsningen her er å lage metoden finn med en algoritme som ligner på binærsøk, men det kan også brukes andre og enklere teknikker. b) I vedlegg 3 er det gitt en Java-metode: int metode_2b(int A[]) 1. Hva utføres av denne metoden? 2. La n betegne antall elementer i arrayen A. Hva er arbeidsmengden til metode_2b, angitt med n og O-notasjon? (Slutt på oppgave 2) Side 3 av 10

Oppgave 3: Binære søketrær (35%) Følgende 14 heltall er gitt i denne rekkefølgen: 10 5 9 1 15 13 4 6 8 2 14 11 12 3 a) Tallene skal settes inn i et vanlig binært søketre som i utgangspunktet er tomt. Tegn en figur som viser hvorledes søketreet ser ut etter at alle de 14 verdiene er satt inn i treet. b) Den vanlige algoritmen for fjerning av en node med en gitt verdi i et søketre, skal brukes på treet du tegnet i deloppgave a). Verdien 1 fjernes først fra dette treet, deretter fjernes verdien 10. Tegn en figur som viser hvorledes treet ser ut etter at begge disse to verdiene er fjernet. I vedlegg 4 er det gitt en Java-klasse intsearchtree for binære søketrær, der dataene i hver node er et enkelt, positivt heltall. I deloppgavene nedenfor skal du bl.a. programmere noen metoder for denne klassen. c) Forklar kort hvor du alltid finner den minste verdien i et binært søketre. d) Lag en Java-metode: public int min() i klassen intsearchtree, som returnerer den minste verdien i treet. Hvis treet er tomt, returneres verdien 0 (null). Vi definerer høyden av et binært tre som lengden av den lengste veien i treet, fra roten og ut til en bladnode. Dette er det samme som antall nivåer i treet, minus én. Det betyr f.eks. at et binært tre med bare én (rot)node har høyde lik 0 (null) og et tre med to noder har høyde lik 1. e) Hva er høyden av søketreet som du tegnet i deloppgave a)? f) Metoden insert i klassen intsearchtree setter inn en ny verdi i søketreet på vanlig måte. Klassen inneholder en variabel height som lagrer høyden av søketreet. Skriv om metoden insert slik at verdien til height settes riktig ved innsetting av nye verdier. I de to siste deloppgavene i oppgave 3, skal vi se på nodene på det nederste nivået i søketreet. g) Hvilke verdier ligger på nederste nivå i de to søketrærne du tegnet i hhv. deloppgave a) og deloppgave b)? h) Lag en Java-metode: public void lowestlevel() i klassen intsearchtree, som skriver ut alle verdiene på nederste nivå i søketreet, i sortert rekkefølge. Ingen andre verdier i treet skal skrives ut. Løsningen din skal bruke rekursjon og skal ikke bruke noen ekstra array eller kø. (Slutt på oppgave 3) Side 4 av 10

Oppgave 4: Grafer (25%) I denne oppgaven brukes følgende rettede, vektede graf med 6 noder: Nodene nummereres fra 0 til 5 på denne måten: A 0 B 1 C 2 D 3 E 4 F 5 a) Tegn nabomatrisen med kantlengder for denne grafen. Ikke-eksisterende kanter mellom to noder kan markeres i matrisen enten som "blanke" (for å spare skriving) eller ved å bruke f.eks. symbolene * ("stjerne") eller ("uendelig"). b) Floyds algoritme løser problemet med å finne korteste vei mellom alle par av noder i en graf, ved å gjøre om nabomatrisen til en matrise med veilengder. Tegn løsningsmatrisen for Floyds algoritme for grafen gitt ovenfor. Merk at du ikke skal lage tegninger som viser de enkelte stegene i Floyds algoritme, men bare løsningen som inneholder lengden på de korteste veiene. c) Sett opp en oversiktlig tabell som viser de 6 hovedstegene som gjøres i Dijkstra's algoritme for grafen ovenfor, med start i node B, helt frem til vi har funnet korteste vei til alle de andre nodene i grafen. Hver rad i tabellen skal vise tilstanden etter én iterasjon i algoritmen, og skal angi: Hvilke noder som vi garantert kjenner korteste vei til, og hvor lang denne veien er. Hvilke andre noder som er oppsøkt og som vi kjenner en mulig korteste vei til, og hvor lang denne veien er. Hvilke noder som ennå ikke er oppsøkt. (Slutt på oppgave 4) Side 5 av 10

Vedlegg 1 Enkel implementasjon av stack med heltallsarray. Det gjøres ikke noen feilsjekking ved innsetting og fjerning av data. public class intstack private int top, max; private int stack[]; public intstack(int length) top = 0; max = length; stack = new int[max]; public void push(int value) stack[top] = value; top++; public int pop() top ; return(stack[top]); public int peek() return(stack[top 1]); public boolean isempty() return (top == 0); public int size() return top; Side 6 av 10

Vedlegg 2 Enkel liste-implementasjon av kø med heltall. Det gjøres ikke noen feilsjekking ved innsetting og fjerning av data. public class intqueue private class node private int value; private node next; private node(int v) value = v; next = null; private node head, tail; private int length; public intqueue() head = tail = null; length = 0; public void enqueue(int v) if (head == null) head = tail = new node(v); else tail.next = new node(v); tail = tail.next; length++; public int dequeue() int v = head.value; head = head.next; length ; return v; public boolean isempty() return (head == null); public int size() return length; Side 7 av 10

Vedlegg 3 public static void metode_2b(int A[]) int n = A.length; int step = n/2; while (step > 0) for (int i = step; i < n; i++) int j = i; int temp = A[i]; while (j >= step && A[j step] > temp) A[j] = A[j step]; j = j step; A[j] = temp; if (step == 2) step = 1; else step /= 2; Side 8 av 10

Vedlegg 4 Enkel implementasjon av binært søketre med heltall public class intsearchtree // Indre klasse for nodene i treet private class node private int value; private node left, right; private node(int v) value = v; left = right = null; private node root; // Roten i søketrett private int numnodes; // Antall noder lagret i hele treet private int height; // Høyden på hele søketreet // Konstruktør for å opprette et tomt søketre public intsearchtree() root = null; // Roten er null i et tomt tre numnodes = 0; // Et tomt tre har ingen noder height = 1; // Vi regner et tomt tre for å ha høyde lik 1 // Funksjoner for å hente ut data om søketreet public int numnodes() return numnodes; public int height() return height; public boolean isempty() return numnodes == 0; // Minste verdi i treet public int min() // Skal lages i oppgave 3 d) (Vedlegg 4 fortsetter på neste side) Side 9 av 10

// Innsetting av ny verdi i søketre, skal brukes i oppgave 3 f) public void insert(int value) numnodes++; if (root == null) root = new node(value); return; node current = root, parent = null; while (current!= null) parent = current; current = value < parent.value? parent.left : parent.right; current = new node(value); if (value < parent.value) parent.left = current; else parent.right = current; // Utskrift av nederste nivå i treet public void lowestlevel() // Skal lages i oppgave 3 h) Side 10 av 10