UNIVERSITETET I OSLO

Like dokumenter
UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag 2017 eksamen

IN2010: Algoritmer og Datastrukturer Series 2

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

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

Notater til INF2220 Eksamen

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

UNIVERSITETET I OSLO

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

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

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

UNIVERSITETET I OSLO

København 20 Stockholm

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

IN Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

Oppgave 1. Sekvenser (20%)

Algoritmer og Datastrukturer

INF1010 notat: Binærsøking og quicksort

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

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

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

UNIVERSITETET I OSLO

INF2220: Forelesning 1

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Sensorveiledning/løsningsforslag IN2010/INF2220 Algoritmer og datastrukturer H2018 Ragnhild Kobro Runde, Stein Michael Storleer, Ingrid Chieh Yu

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

UNIVERSITETET I OSLO

LØSNINGSFORSLAG, EKSAMEN I ALGORITMER OG DATASTRUKTURER (IT1105)

IN Algoritmer og datastrukturer

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

Generelle Tips. INF Algoritmer og datastrukturer. Åpen og Lukket Hashing. Hashfunksjoner. Du blir bedømt etter hva du viser at du kan

UNIVERSITETET I OSLO

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

UNIVERSITETET I OSLO

INF2220: Forelesning 1

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

EKSAMEN med løsningsforslag

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

KONTINUASJONSEKSAMEN

Løsningsforslag til INF110 h2001

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

UNIVERSITETET I OSLO

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

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

UNIVERSITETET I OSLO

NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer

Object [] element. array. int [] tall

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

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Innhold. Innledning 1

ALGORITMER OG DATASTRUKTURER

INF Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer

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

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

UNIVERSITETET I OSLO

Eksamen i fag SIF8010 Algoritmer og datastrukturer Lørdag 9. august 2003, kl

EKSAMEN. Emne: Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

ALGORITMER OG DATASTRUKTURER

Transkript:

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF2220 Algoritmer og datastrukturer Eksamensdag: 16. desember 2013 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 8 sider. Vedlegg: Ingen Tillatte hjelpemidler: Alle trykte eller skrevne Kontroller at oppgavesettet er komplett før du begynner å besvare spørsmålene. Innhold 1 Tidskompleksitet (vekt 10%) side 2 2 Binære søketrær (vekt 15%) side 2 3 Grafer (vekt 26%) side 4 4 Utvidbar hashing (vekt 10%) side 5 5 Tekstalgoritmer (vekt 9%) side 5 6 Sortering (vekt 20%) side 6 7 Diverse oppgaver (vekt 10%) side 8 Generelle råd: Skriv leselig (uleselige svar er alltid feil... ) Husk å begrunne svar og hold kommentarene dine korte og presise. Hvis du bruker kjente datastrukturer som (list, set, map, binær-tre) trenger du ikke forklare hvordan de fungerer. Generelt: hvis du bruker abstrakte datatyper fra biblioteket kan du bruke disse uten å forklare hva de gjør. Hvis skriver pseudokode, må den være detaljert. Det må komme klart fram hvilken datastruktur du bruker, hva initialiseringen består av og hva hovedløkkene gjør. Vekten til en oppgave indikerer vanskelighetsgraden og tidsbruken du bør bruke på den oppgaven. Dette kan være greit å benytte for å disponere tiden best mulig. I Oppgave 6b.3 står det (kan puffes) og det betyr at du får karakter E og ikke F, dersom du ikke svarer på denne deloppgaven. Lykke til! Dino Karabeg, Arne Maus og Ingrid Chieh Yu (Fortsettes på side 2.)

Eksamen i INF2220, 16. desember 2013 Side 2 Oppgave 1 Tidskompleksitet (vekt 10%) Hva er worst case-tidskompleksiteten til følgende implementasjoner, som en funksjon av parameteren n: 1a For-løkker (vekt 5%) int s = 0; for ( int i = 1; i <= n ; i ++) { for ( int j = 1; j <= i ; j ++) { for ( int k = i ; k <= j ; k++) { s = s + k ; 1b Rekursjon (vekt 5%) int proc ( int n ) { int x = 1; i f ( n > 1) { for ( int i = 1; i <= n 1; i ++) { x = x + proc ( i ) ; return x ; for correction: all or nothing 1. O(n 2 ) (uttrykket s =s+k utføres bare O(n 2 ) ganger - faktisk vel ca. n 2 /2 ganger, fordi innerste løkke (k) bare enten går null ganger(j<i) eller 1 gang (når j = i) 2. O(2 n ) (antall kall dobler seg når vi går fra k til k+1) Oppgave 2 Binære søketrær (vekt 15%) Fullfør de to programsegmentene under slik at de implementerer følgende oppgaver korrekt: 2a Finn noder i søketrær (vekt 5%) Gitt et binært søketre og et heltall x. Metoden find skal returnere noden V som har verdi lik x (du kan forutsette at den finnes). Fullfør de tre kodelinjene som (Fortsettes på side 3.)

Eksamen i INF2220, 16. desember 2013 Side 3 starter med return. class BinNode { int value ; BinNode l e f t C h i l d ; BinNode rightchild ; BinNode find ( int x ) { i f ( value == x ) { return........ ; else i f ( value < x ) { return........ ; else { return........ ; class BinNode { int value ; BinNode l e f t C h i l d ; BinNode rightchild ; BinNode find ( int x ) { i f ( value == x ) { return this ; else i f ( value < x ) { return rightchild. find ( x ) ; else { return l e f t C h i l d. find ( x ) ; 2b Rotering i søketrær (vekt 6%) Under er koden til en del av et program som skal gjøre en node V til den nye rotnoden av et binært søketre ved gjentatte ganger å bytte V med foreldrenoden sin (se eksempelet i Figur 1). Koden nedenfor utfører kun et enkelt bytte. Du skal fullføre koden og sørge for at søketre-egenskapen opprettholdes. Du kan anta at V er den noden vi ønsker å bytte, og at P er foreldrenoden til V. i f (V == P. l e f t C h i l d ) { P. l e f t =.................. ;................ ;................ ; (Fortsettes på side 4.)

Eksamen i INF2220, 16. desember 2013 Side 4 else { // V i s the right child of i t s parent P................ ;................ ;................ ; Figur 1: Noden med verdi 5 i figur a blir den nye rotnoden i figur b i f (V == P. l e f t ) { P. l e f t = V. right ; V. right = P ; else { P. right = V. l e f t V. l e f t = P 2c Resultat av kjøring av algoritmen (vekt 4%) La x = 4 og T rotnoden i et binært søketre som avbildet i Figur 2. Anta at rotasjonsalgoritmen fra 2b er utvidet til å hensynta ev. forfedrenoder til P. Hva blir resultatet av å utføre denne fullstendige algoritmen på disse parameterene? Dvs. en algoritme som finner noden med verdi 4 under T (ved å kalle T.find(4)) og deretter utfører en serier av bytter til denne noden blir den nye rotnoden. Tegn det nye treet. Oppgave 3 Grafer (vekt 26%) 3a Biconnectivity (vekt 4%) Finn alle articulation points for grafen under. Vis et dybde først-spenntre som starter fra node A samt Num- og Low- numrene for hver node. (Fortsettes på side 5.)

Eksamen i INF2220, 16. desember 2013 Side 5 Figur 2: Et binært søketre B F G E D H A C I J E, F, D. Note that A is not an articulation point. The test of A as root would mark it correctly. 3b Løkker i ikke-sammenhengende grafer (vekt 10%) La G være en graf med følgende engenskaper: den er urettet. den kan være ikke-sammenhengende. den kan inneholde løkker. 1. Anta at G har n noder og m sammenhengende komponenter. Hvor mange kanter kan G maksimalt inneholde dersom grafen skal være asyklisk? 2. Skriv en metode som finner minimum antall kanter som må fjernes fra G for at den resulterende grafen skal bli asyklisk. I tillegg til at metoden skal returnere antall kanter som må fjernes fra G for å gjøre den asyklisk, skal metoden også identifisere hvilke kanter som kan fjernes (det holder at disse skrives ut til skjerm). Det er tillatt å bruke hjelpemetoder hvis du ønsker det. (Fortsettes på side 6.)

Eksamen i INF2220, 16. desember 2013 Side 6 3,2 B F 4,2 6,6 G 2,1 D E 5,2 H 7,4 1,1 A C I J 10,1 9,4 8,4 For correction: 3 points + 7 points 1. The answer is based on the observation that a connected component, having k vertices, must have at most k-1 edges to be acyclic (and at least k-1 to be connected). If there are n vertices in the graph and if there are m connected components, then there must be at most n-m edges remaining in the graph to make it acyclic. 2. Run a DFS based algo to number the vertices in the order in which they are visited during DFS (like done in class). Use this visiting info to detect back edges (as in the algo for articulation points seen in class) and keep count of them. The total number of back edges is the minimum number of edges to be removed to eliminate cycles in the graph. Removing the back edges will eliminate the cycles. There must be an outer loop for the basic DFS algorithm to ensure every vertex, and hence every connected component, is visisted). This algorithm also identify the edges to be removed. int backedgesincomp ( v ) { int backedges = 0; v.num = counter ++; v. status = v i s i t e d ; for each Vertex w adjacent t o v i f (w. status =/= v i s i t e d ) { w. parent = v ; backedges+=backedgesincomp (w) ; else i f ( v. parent =/= w && w.num <= v.num) { // i d e n t i f y the back edge backedges = backedges +1; print (w, v ) // f o r simplicity, j u s t print out the edge return backedges ; int minedgesing (G) { int totaledgestoremove = 0; For each v in G { //must v i s i t every connected component i f ( v. status =/= v i s i t e d ) { int edges = backedgesincomp ( v ) ; (Fortsettes på side 7.)

Eksamen i INF2220, 16. desember 2013 Side 7 totaledgestoremove = totaledgestoremove + edges ; return totaledgestoremove ; 3c Hamiltonsk sti (vekt 12%) En Hamiltonsk sti er en sti gjennom en graf som besøker alle nodene i grafen en gang. La grafen G = (V, E) være en rettet asyklisk graf (DAG). Skriv en metode HamiltonskSti slik at den, gitt grafen G, returnerer true hvis G inneholder en Hamiltonsk sti og ellers returnerer false. Algoritmen skal ha lineær tidskompleksitet. Begrunn hvorfor algoritmen din tilfredstiller tidskravet. topsort O( V + E ) + edge test O( V ) (adjacency matrix O(1) for each test) //modify t o p s o r t from M.A. Weiss //the t o p s o r t part i s the same from M.A. Weiss Bool hamilstonsksti (G) { b o o l ishamiltonsksti = true ; Queue<Vertex > q = new Queue<Vertex > ( ) ; int counter = 0; Vertex [ ] topsort = new Vertex [ V ] ; for each Vertex v i f ( v. indegree == 0) q. enqueue ( v ) ; while (! q. isempty ( ) ) { Vertex v = q. dequeue ( ) ; topsort [ counter ++] = v ; for each Vertex w adjacent i f ( w. indegree == 0) q. enqueue (w) ; t o v //her comes the new part i f ( counter!= V ) ishamilstonsksti = false else { for ( int i ; i < V 1; i ++) { i f (! ( topsort [ i ], topsort [ i +1]) in G) { ishamilstonsksti = false ; break ; (Fortsettes på side 8.)

Eksamen i INF2220, 16. desember 2013 Side 8 return ishamilstonsksti ; Oppgave 4 Utvidbar hashing (vekt 10%) Figuren under viser en utvidbar hashtabell Figur 3: En utvidbar hashtabell 1. Vis hashtabellen du får ved å sette inn 00000 i Figur 3? 2. Vis hashtabellen du får ved å sette inn 11111 i Figur 3? Solution should be obvious: a) splits the first block, b) splits the index and then the block accordingly. Oppgave 5 Tekstalgoritmer (vekt 9%) 5a Boyer Moore (vekt 5%) La nålen være: cdfcfcfc 1. Beregn good suffix shift til nålen. 2. La bad character shift bestå av bl.a.: (f,1) (d,6) (c,2) (v,8). Det er funnet en mismatch mellom nål og høystakk: c d f c f v f c c d f c f c f c Hvor langt vil Boyer Moore-algoritmen flytte nålen? Begrunn!

Eksamen i INF2220, 16. desember 2013 Side 9 1. good suffix shift: 7 7 7 2 7 4 7 1 0!c 1 1!fc 7 2!cf c 4 3!fcfc 7 4!cfcfc 2 5!fcfcfc 7 6!dfcfcfc 7 7!cdfcfcfc 7 2. 4 using good suffix shift as bad character shift gives 2. 5b Huffman koding (vekt 4%) La de 8 første alfabetene ha følgende frekvenstabell basert på de 8 første fibonaccitallene: a:1 b:1 c:2 d:3 e:5 f:8 g:13 h:21 1. Hva er Huffmankoden for disse alfabetene? Du må vise Huffmantreet basert på frekvenstabellen. 2. Generaliser ditt svar for å finne den optimale koden når frekvensene er de første n Fibonacci-tallene. 1. a = 1111110 b = 1111111 c = 111110 d = 11110 e = 1110 f = 110 g = 10 h = 0 (Fortsettes på side 10.)

Eksamen i INF2220, 16. desember 2013 Side 10 54 h 33 g 20 f 12 e 7 d 4 c 2 a b 2. a, 1 n 2 0 b, 1 n 2 1 c, 1 n 3 0... nth alfabet,0 Oppgave 6 Sortering (vekt 20%) 6a Innstikksortering (vekt 6%) Her er en versjon av innstikksortering: /** * I n n s t i k k s o r t e r a [ i ] fra og med plass v t i l og med plass h * dvs. a [ v.. h ] *********************************** */ void insertsort ( int [ ] a, int v, int h ) { int i, t ; for ( int k = v ; k < h ; k++) { i f ( a [ k ] > a [ k+1]) { // KAN FJERNES 1 t = a [ k + 1 ] ; i = k ; while ( i >= v && a [ i ] > t ) { a [ i +1] = a [ i ] ; i ; a [ i +1] = t ; // KAN FJERNES 2 // end i n s e r t S o r t To av linjene er merket med kommentar // KAN FJERNES. Begrunn hvorfor begge disse to linjene kan fjernes samtidig, og at metoden fortsatt vil virke som innstikk-sortering. Gi også en kort vurdering om dette er (Fortsettes på side 11.)

Eksamen i INF2220, 16. desember 2013 Side 11 en fornuftig endring av koden. 6b Flettesortering (vekt 14%) Du skal nå skrive en rekursiv versjon av flettesortering, som består av to metoder (omtrent som quicksort). Her er den første oppgitt: void f l e t t e S o r t ( int [ ] a ) { i f ( a. length <= 50) insertsort ( a, 0, a. length 1); else { int [ ] b = new int [ a. length ] ; f l e t t e ( a, b, 0, a. length 1); // end f l e t t e S o r t Du skal skrive den rekursive metoden flette: void f l e t t e ( int [ ] a, int [ ] b, int v, int h ) { <... din kode her... > // end f l e t t e som sorterer en del av en heltallsarray fra og med element a[v] til og med element a[h] - dvs: a[v..h] som følger: 1. Du skal bruke insertsort fra Oppgave 6a som sub-algoritme, dele arrayen a[] i to på hvert nivå og gå rekursivt ned i hver halvdel til lengden av det du skal sortere er 50. Da skal du sortere den delen med insertsort. 2. På backtrack (etter retur av de to rekursive kallene i flette), skal du flette de to sorterte delene av a[v..h] ved: i. Flette-sortere dem over i sin del av arrayen b - dvs. i b[v..h]. ii. Kopiere den sorterte (nå dobbelt så lange) sekvensen fra b[] tilbake til samme plasser i a[]. iii. Når da det opprinnelige, første kallet på flette returnerer, er hele a[] sortert. 3. (kan puffes) Forklar hvordan alle kopieringene fra b[] tilbake til a[] kan unngås ved å endre på de aktuelle (kall-) parametrene på de rekursive kallene på flette samt legge til én parameter i metoden flette: int dybde, som er dybden i rekursjonstreet (dvs. økes med 1 for hvert kall). Her skal du ikke skrive kode, bare forklare hvilke endringer du vil gjøre med koden du skrev på punkt 2 for å få til flettesortering uten kopiering. Oppgave 7 Diverse oppgaver (vekt 10%) Gi et kort svar, ikke mer enn 3 setninger, til hver av følgende spørsmål. Hvert spørsmål teller 2%. (Fortsettes på side 12.)

Eksamen i INF2220, 16. desember 2013 Side 12 1. Hvorfor bruker vi Big-O (O(f(n))) for å estimere kompleksitet av algoritmer? Hvorfor ikke bruke eksakte funksjoner, eller faktiske kjøretid? 2. Hva oppnår vi ved å dele problemer i kompleksitetsklasser? 3. Er uavgjørbarheten av Stoppe-problemet (Halting problem, det første problemet bevist å være uløsbart) bevist ved hjelp av reduksjon? 4. I hvilke situasjoner er det best å bruke utvidbar hashing? 5. Når sier vi at et problem er intractable? 2% for each sub questions 1. Big-O shows what is essential, how fast the complexity grows when n increases; exact time depends on the machine. 2. Classes reflect the complexity of problems, and what solutions are appropriate / efficient. 3. False. the proof is by diagonalization. To use reduction, we need a problem that is already proven undecidable. 4. When the disk is used for storing data, and the time to read a disk block dominates the running time. 5. Intractable problems have no efficient algorithms; while in principle solvable, the exact solutions take forbiddingly long time (years, or centuries) in the worst case (Fortsettes på side 13.)