Oppgavesettet består av 6 (seks) sider. Norges Informasjonsteknologiske Høgskole PG4200 Algoritmer og datastrukturer Side 1 av 6 Tillatte hjelpemidler: Ingen Varighet: 3 timer Dato: 4. juni 2014 Fagansvarlig: Lars Sydnes lars.sydnes@nith.no 93 03 56 85 Oppgavesettet består av 5 oppgaver. Husk å lese oppgavene nøye. En god begrunnelse av et dårlig svar er ikke å forakte. Alle punktene vektes likt. Oppgave 1 a) Bruk O-notasjon til å angi ordenen til de følgende vekstfunksjonene uten å begrunne svaret. (i) f(n) = 31.4 + 15n 9 + 2 n (ii) g(n) = (n + 1) log n + 4n b) Estimer hvordan kjøretiden til funksjonene f og g i kodesnutten nedenfor avhenger av n. Svaret skal begrunnes og uttrykkes med O-notasjon. 1 void f(int n){ 2 for(int i = 0; i < n; i+=3) 3 dosomething(i); 4 } 5 6 void g(int n){ 7 int i = 1; 8 while(i < n){ 9 f(i); 10 i*=2; 11 } 12 } 13 14 void dosomething(int n){ 15 // Something O(1) 16 }
Side 2 av 6 Oppgave 2 a) Forestill deg et binært søketre uten balanseringsmekanisme som kun aksepterer ett eksemplar av hvert objekt. Lag en skisse av treet etter innsetting av følgende sekvens: 3, 1, 4, 1, 5, 9, 2, 6. b) Hva er fordelen med balanserte trær? c) Forklar hva Red-Black-trær er. d) Når bruker vi køer i forbindelse med traversering av trær og grafer? Når bruker vi stakker til det samme? e) Skriv en ikke-rekursiv metode for sekvensielt søk i en lenket liste der nodene tilhører klassen Node: class Node<T> { T data; Node<T> next; } f) Skriv en rekursiv metode for sekvensielt søk i en lenket liste der nodene tilhører klassen Node definert i forrige punkt. g) Forklar hva det betyr at java.util.hashset benytter strategien chaining? I hvilken situasjon forekommer rehashing av hash-tabeller?
Side 3 av 6 Oppgave 3 Tabell 1 nedenfor illustrerer to ulike sorteringsalgoritmer. De to sorteringsalgoritmene som er brukt befinner seg i denne oversikten: (i) Quick sort (ii) Insertion sort (iii) Bubble sort (iv) Selection sort (v) Merge sort 3 1 4 1 5 9 2 6 1 3 4 1 5 9 2 6 1 1 4 3 5 9 2 6 1 1 2 3 5 9 4 6 1 1 2 3 5 9 4 6 1 1 2 3 4 9 5 6 1 1 2 3 4 5 9 6 1 1 2 3 4 5 6 9 3 1 4 1 5 9 2 6 1 3 1 4 5 9 2 6 1 1 3 4 2 5 6 9 1 1 2 3 4 5 6 9 (b) (a) Tabell 1: Illustrasjon av to ulike sorteringsmetoder. a) Hvilken av sorteringsalgoritmene (i-v) er illustrert i tabell 1a? Hvilken av sorteringsalgoritmene (i-v) er illustrert i tabell 1b? Du behøver ikke å begrunne svaret. På neste side ser du grafiske fremstillinger av måling av kjøretiden til tre sorteringsalgoritmer anvendt på sorterte og usorterte lister. De tre algoritmene er: (i) Insertion sort. (ii) Selection sort. (iii) En algoritme hentet fra java.util.arrays som hovedsaklig bygger på Quick sort.
Side 4 av 6 kjøretid (millisekunder) 1200 1000 800 600 400 200 Metode A 0 0 2000 4000 6000 8000 10000 Antall elementer Tilfeldige data Sorterte data Metode B kjøretid (millisekunder) 14000 12000 10000 8000 6000 4000 2000 0 0 2000 4000 6000 8000 10000 Antall elementer Tilfeldige data Sorterte data Metode C kjøretid (millisekunder) 14000 12000 10000 8000 6000 4000 2000 0 0 2000 4000 6000 8000 10000 Antall elementer Tilfeldige data Sorterte data b) Angi hvilken algoritme (i, ii, iii) som er brukt i hver av figurene (A, B, C). Begrunn svaret i to av tilfellene. Oppgave 4 import java.util.priorityqueue;
Side 5 av 6 /*...*/ public static <T extends Comparable<T>> void metode(t[] data){ int n = data.length; PriorityQueue<T> pq = new PriorityQueue<T>(); for (int i = 0; i < n; i++) pq.offer(data[i]); } for (int i = 0; i < n; i++) data[i] = pq.poll(); Hva kan vi bruke metoden metode ovenfor til? Estimer hvordan kjøretiden (T ) til metoden metode avhenger av antall elementer (n). Begrunnelsen skal være forankret i koden ovenfor samt det du vet om egenskapene til PriorityQueue. Oppgave 5 Studentene i et studieprogram ved NITH skal arrangere semesteravslutningsfest. Studentene vil gjerne sitte rundt ett langbord, men dessverre ligger mange studentene i fiendskap med hverandre, og arrangørene har derfor kartlagt hvem som er fiender med hvem. Resultatet er fremstilt i denne tabellen: Person Eva Ove Ulf Are Ada Ole Liv Fiender Ole, Are Ada, Liv Are, Ada, Ole, Liv Eva, Ulf, Ada Ove, Liv, Ulf, Are Eva, Ulf Ove, Ulf, Ada Vi skal her se på hvordan dataene i denne tabellen kan presenteres som en graf der nodene representerer personer og kantene representerer fiendskap mellom personer. La oss kalle dette fiendskapsgrafen. Vi kan også definere en vennskapsgraf, der kantene representerer ikke-fiendtlige relasjoner. a) Skisser fiendskapsgrafen og vennskapsgrafen til denne studentgruppen.
Side 6 av 6 Eva og Are ønsker å slutte fred, men ønsker kun å kommunisere gjennom venner, venners venner og så videre. b) Hjelp Eva og Are ved å beskrive en algoritme de kan bruke til å finne en kortest mulig kjede av venner de kan kommunisere gjennom. c) Hjelp Eva og Are ved å gå gjennom den algoritmen du beskrev i forrige punkt. Få fram de viktigste stegene samt sluttresultatet. Ada redder studentfesten ved å lage en algoritme som raskt finner frem til en bordplassering der ingen fiender sitter ved siden av hverandre. Året etter planlegges det en fest der hele NITH skal sitte rundt ett stort langbord i gallerigaten. Ada tilbyr å hindre en fullstendig katastrofe ved å bruke algoritmen sin til å finne fram til en levelig bordplassering. d) Bedøm muligheten for at Ada lykkes også denne gangen. Slutt på oppgavesettet