Løsningsforslag 2017 eksamen

Like dokumenter
IN2010: Algoritmer og Datastrukturer Series 2

7) Radix-sortering sekvensielt kode og effekten av cache

UNIVERSITETET I OSLO

Object [] element. array. int [] tall

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk

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

Algoritmer og datastrukturer Løsningsforslag

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

INF1010 notat: Binærsøking og quicksort

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

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

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

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

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

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

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

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

Algoritmer og datastrukturer Eksamen

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

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

Quicksort. Fra idé til algoritme.

Binære trær: Noen algoritmer og anvendelser

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

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer

INF1010. Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene 0, 1 og 2: Sekvensgenerering. Generalisering. n n n! INF1010 INF1010 INF1010

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

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

UNIVERSITETET I OSLO

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Del 3: Evaluere uttrykk

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

INF1010 Sortering. Marit Nybakken 1. mars 2004

EKSAMEN. Emne: Algoritmer og datastrukturer

En algoritme for permutasjonsgenerering

UNIVERSITETET I OSLO

Forelesning inf Java 4

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Eksamen 22. februar 2011

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

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

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

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

INF2220: Forelesning 2

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

Kapittel 8: Sortering og søking

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

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

Løsningsforslag til eksamen i INF1000 våren 2006

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

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

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

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

Om å lete gjennom «alle muligheter» Eller: Kombinatorisk søking, rekursjon og avskjæring 1 Innledning Problemer, instanser og løsningsalgoritmer

Programmering Høst 2017

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

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

INF1000 (Uke 12) Sortering

Øvingsforelesning 4. Topologisk sortering, Strongly Connected Components og Minimale spenntrær. Magnus Botnan

Slope-Intercept Formula

Løsningsforslag til INF110 h2001

INF1010 Rekursjon. Marit Nybakken 1. mars 2004

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

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

Algoritmer og datastrukturer Eksamen

Kapittel 9: Sortering og søking Kort versjon

INF1000 Metoder. Marit Nybakken 16. februar 2004

Oppgave01.java class Bongo { 2 public static void main(string[] args){ 3 int[][][]bongo = new int[2][3][4]; 4 5 // SVAR: 24 6 } 7 } 8

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

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

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

Forelesning inf Java 5

Norsk informatikkolympiade runde

Transkript:

Løsningsforslag 2017 eksamen Oppgave 1: O-notasjon (maks 8 poeng) 1. (i) O(n) gir 2 poeng, O(100n) gir 1 poeng (ii) O(n^2) gir 1 poeng (iii) O(n log n) gir 2 poeng 2. (i) er mest effektiv i henhold til O-notasjon. 1 poeng. 3. Ja. For små n er både (ii) og (iii) mer effektiv enn (iii). Hadde innmaten i løkken vært lik, ville vi forventet at (iii) er mer effektiv for n < 2^100, dvs så lenge log n er mindre enn 100. 2 poeng for riktig svar med noenlunde begrunnelse. 0 poeng for «Ja» uten begrunnelse. Oppgave 2: Binære søketrær 2a (maks 5 poeng) boolean sjekkstruktur(binnode r, BinNode s) { if (r == null && s == null) return true; if (r!= null && s!= null) { return (sjekkstruktur(r.venstre, s.venstre) && sjekkstruktur(r.hoyre, s.hoyre); return false; Hovedpoenget med denne oppgaven er å vise at man behersker traversering av trær. Det er ikke noe krav om at oppgaven løses rekursivt, selv om det helt klart er enklest. Trekk max 2 poeng for feil/manglende håndtering av null. Det står tydelig i oppgaveteksten at man skal se bort fra verdiene (elementene) i nodene, så det trekkes 1 poeng hvis det likevel gjøres noen sammenligninger her.

2b (maks 5 poeng) boolean sjekkavl(binnode n) { // Bruker -2 som feilverdi i hjelpemetoden. return (sjekkhoyde(n)!= -2); int sjekkhoyde(binnode n) { if (n == null) return -1; int v = sjekkhoyde(n.venstre); if (v == -2) return v; int h = sjekkhoyde(n.hoyre); if (h == -2) return h; if (Math.abs(v-h) > 1) return -2; return (Math.max(v,h) + 1); 2c (maks 4 poeng) 2 poeng for et korrekt rød-svart tre, 2 poeng dersom det i tillegg IKKE er et AVLtre. Kan gi totalt 2 poeng dersom det bare er 1-2 små feil i det rød-svarte treet, men studenten viser å ha forstått hovedpoenget. Oppgave 3: Huffman

3a (maks 8 poeng) A er ikke fordi node med vekt 17 har bare et barn og vektene er feil. B er ikke fordi nodene med vekter 8 og 12 burde være kombinert først. - 4 poeng for hvert tre. 2 poeng for riktig forklaring. 2 poeng for riktig tre. Ingen poeng for endring av vektene på alfabetet. 3b (maks 5 poeng) Oppgave 4: CIA operasjon

4a (maks 4 poeng) Use depth first search on graphs. Nodes are Spies and edges are channels. It is an undirected graph. The edges are marked/weighted as secure or not secure. The problem is equivalent to finding the number of connected components where a component is connected in the sense of only having edges marked as secure. 4b (maks 9 poeng) class Channel{ Spy a; Spy b; boolean secure; // true if this is a secure channel between a and b, false otherwise Channel(Spy a, Spy b, boolean secure) { this.a = a; this.b = b; this.secure = secure; Spy destination(spy source) { return (source == a)? b : (source == b)? a : null; class Spy{ List <Channel> channels; Boolean visited = false;.. int numberofspies {List <Spy> spies { int counter = 0; for (Spy spy:spies) { if (spy.visited == false){ spy.visited = true; counter ++; dfs(spy); return counter;

void dfs(spy spy){ for (Channel channel: spy.channels){ spy candidate = channel.desitination(spy); if (!candidate.visited && channel.secure){ candidate.visited = true; dfs (candidate); 4c (maks 5 poeng) Assign the secure edges weight 0 and the unsecure edges weight 1 and run an algorithm to compute MST. The MST will be a spanning tree, and minimizing the total weight is equivalent to minimizing the heavier unsecure channels. The sum of the MST corresponds to the number of unsecure channels. 3 poeng for riktig svar her. Note that the text says utvalgte andre spioner / selected spies (also the example graph given to the student is not connected), so the graph can be disconnected. The most correct answer is to use Kruskal algorithm to compute a minimal spanning forest. 2 poeng for Kruskal. If Prim is used then one must remember to start Prim selveral times, once for each connected component, to cover all nodes. 1 poeng for Prim. 4d (maks 4 poeng) Use Kruskal. The CIA operator must use minimal 3 unsecure channels either (G, H, false), (D, F, false), and (C, E, false) Or (C, E, false), (B, C, false), and (G, H, false) 2 poeng for riktig identifisering. Removing one unsecure channel from a MST will result in a disconnected component, hence will require one more direct communication to a spy. Hence the unsecure channel is neccessary inorder to minimize number of direct communications. There is no need to prove that Kruskal or Prim computes MST. 2 poeng for riktig svar her. Oppgave 5 (maks 15 poeng)

Den naturlige løsningen er å ta utgangspunkt i programmet fra kompendiet/forelesning. I stedet for en boolsk brukt-array, kan det brukes en int-array over hvor mange ganger det fortsatt er mulig å bruke et siffer, initialisert til 2. I stedet for å teste!brukt[siffer] blir testen da brukt[siffer] > 0. I tillegg må det testes at det ikke kommer to like på rad. class Gen2 { int n; int[] array = new int[2*n]; int[] brukt = new int[n]; int antall = 0; public static void main(string[] args) { Gen2 g = new Gen2(); g.init(integer.parseint(args[0]); g.gen(0); public void init(int antall) { n = antall; for (int i = 0; i < n; i++) { brukt[i] = 2; public void gen(int i) { if (i < 2*n) { for (int tall = 0; tall < n; tall++) { if (brukt[tall]>0) { if (i == 0 array[i-1]!= tall) { brukt[tall]--; array[i] = tall; gen(i+1); brukt[tall]++; else { for (int j = 0; j < array.length; j++) { System.out.print(array[j] + " "); System.out.println(" ");

Det viktigste her er sekvensgenereringen, men studentene skal også vise at de kan lage dette til et komplett program. Ren kopi av forelesening/kompendium uten reelle forsøk på tilpasninger gis 0 poeng. Bruk ellers skjønn, med utgangspunkt i følgende poengfordeling: Hvert siffer kan komme max to ganger 7 poeng. Avskjæring slik at to like sifre ikke kommer rett etter hverandre 4 poeng. Komplett program med main, initialisering osv 4 poeng. En fullgod alternativ løsning vil være å tilpasse den andre permutasjonsteknikken som står skrevet i kompendiet, men den er ikke forelest så vi forventer ikke at så mange studenter vil bruke den. Andre løsninger aksepteres også, men trekk for unødvendig komplisert kode eller ineffektive løsninger (for eksempel å lete gjennom hele arrayen for å finne ut om man kan bruke et siffer eller ikke). Oppgave 6: Sortering 6a (maks 13 poeng) Viktige poeng for løsningen a) Vi må også sortere over til b[] lengder == 1 ( dvs. >= tegn: if (right-left >= 0) { Trekk på 3punkter for ikke å se det b) Vi leser fra a[] ( t = a[k];) og kopierer denne inn i b[]) Viktig bare å lese a[] uten det er oppgaven ikke løst c) Første element i a[] kopieres over i b[] ( b[left] = a[left]; Trekk 2 punkter for ikke å gjøre det // sort a[left..right] over to b[left..right]. b might be a void insertabsort(int a[],int [] b,int left, int right){ if (right-left >= 0) { int i, t; b[left] = a[left]; for (int k = left+1 ; k <= right ; k++){ t = a[k]; i = k-1; while (i >= left && b[i] > t) { b[i+1] = b[i]; i--; b[i+1] = t; // end for k // end left <= right // end insertabsort 6b (maks 5 poeng)

Å bruke a på begge parametereplassene går BRA fordi vi leser bare fra første parameterplass og skriver I andre parametereplass nå a. Best ser vi at det går greit hvis vi setter inn a for b i løsningen på Deloppgave 1. Vi ser at koden bare da gjør bare en overflødig instrusjon ( a[left] = a[left];) ellers blir dette vanlig innstikk-sortering. Oppgave 7: Søking 7a (maks 6 poeng) Husk ingen poeng for å sortre først. Begge algoritmene er O(n*n), (men bruker vi innstikksortering først er den jo også O(n*n)). static double median1(int [] a) { int medianlen = a.length/2; // antar a.length er et oddetall int val=0, nummindre; for(int i =0; i < a.length; i++) { nummindre =0; val = a[i]; for (int j =0; j < a.length; j++) { if (a[j] < val) nummindre= nummindre+1; if (nummindre == medianlen) break; // end i return val; // end median1 7a (maks 4 poeng) int median2(int [] a) { int medianlen = a.length/2 +1; // antar a.length er et oddetall int nummindre, numstorre;; int val=0; for(int i =0; i < a.length; i++) { nummindre =0; numstorre =0; val = a[i]; for (int j =0; j < a.length; j++) { if (a[j] <= val) nummindre++; if (a[j] >= val ) numstorre++; if ((nummindre >= medianlen) && (numstorre >= medianlen)) break; // end i return val;