Oppgavesettet består av 7 (syv) sider. NORGES INFORMASJONSTEKNOLOGISKE HØGSKOLE PG4200 Algoritmer og datastrukturer Tillatte hjelpemidler: Ingen Side av 7 Varighet: 3 timer Dato:.august 203 Fagansvarlig: Lars Sydnes lars.sydnes@nith.no 93 03 56 85 Oppgavesettet består av 7 oppgaver. Husk å lese oppgavene nøye. Oppgi hvilke forutsetninger du bruker. Oppgave a) Angi orden til de følgende vekstfunksjonene. Bruk O-notasjon. Det er ikke nødvendig å begrunne svaret. (i) f(n) = 3 n 2 log n + 45n 2 (ii) g(n) = n(n + ) + 3 2n 2 b) I det følgende refererer vi til Kodesnutt på side. Vi antar at dosomething har konstant kjøretid. (i) Bruk O-notasjon til å beskrive hvordan kjøretiden til F avhenger av n. Det er ikke nødvendig å begrunne svaret. (ii) Bruk O-notasjon til å beskrive hvordan kjøretiden til G avhenger av n. Det er ikke nødvendig å begrunne svaret. Kodesnutt : Java-kode tilhørende Oppgave. public static void F(int n) { for (int i = ; i < n ; i*=2) dosomething(); // O() public static void G(int n) { for (int i = ; i < n; i+=2) F(i); // OBS: tidligere fua(i) dosomething();// O()
Side 2 av 7 Oppgave 2 a) Hva er forskjellen på en stakk og en kø? b) Forklar problemet med følgende kodesnutt: public static void print(list<object> list) { for (int i = 0; i < list.size(); i++) System.out.println(list.get(i)); Her er List javas liste-grensesnitt. De mest kjente implementasjonene av dette grensesnittet er ArrayList, LinkedList og Vector. c) Hva er en rekursiv funksjon? Angi de viktigste bestanddelene i rekursive funksjoner. d) Beskriv typiske bruksområder for hash-tabeller. e) Hva er rehashing? f) Figuren nedenfor representerer et AVL-tre. Legg tallet 3 inn i treet, skriv opp balansefaktorene og rebalanser treet. Svaret skal bestå av flere figurer som viser de ulike stadiene treet går gjennom. 0 4 2 5
Side 3 av 7 Oppgave 3 Her skal vi se på fem ulike sorteringsalgoritmer: (i) Quick sort (ii) Insertion sort (iii) Bubble sort (iv) Selection sort (v) Merge sort Tabell a og Tabell b på side 3 viser en liste under sortering. a) Hvilken av sorteringsalgoritmene (i-v) er brukt i Tabell a? b) Hvilken av sorteringsalgoritmene (i-v) er brukt i Tabell b? 4 9 2 6 5 3 7 4 9 2 6 5 3 7 4 9 2 5 6 3 7 2 4 9 3 5 6 7 (a) 4 2 6 5 3 7 9 2 4 5 3 6 7 9 2 4 3 5 6 7 9 (b) Tabell : Utvalgte sorteringsstadier.
Side 4 av 7 Oppgave 4 I denne oppgaven skal vi studere følgende nettverk: A 3 C D 3 B a) Skriv opp en mulig naboskapsmatrise (adjacency matrix) for dette nettverket. b) Angi et minimum spanning tree for denne grafen. c) Finnes det en Hamiltonsk rundreise i denne grafen? d) Anta at vi bruker Dijkstras algoritme til å lete etter den korteste veien fra A til B i nettverket over. Dijkstras algoritme benytter seg av en min-heap som holder styr på alle de mulige veivalgene. Skissér hvordan denne min-heapen utvikler seg. Tips: Mulige veier i grafen kan representeres ved lister av typen (A, D, C; 4). (Besøkte noder; total lengde). Oppgave 5 I denne oppgaven ser vi på klassen BinarySearchTree som er implementert i Kodesnutt 2 på side 5. a) Hvilken type tre-traversering møter vi i metoden BinarySearchTree.print()? b) Hva blir output om vi legger tallene 3, 4, 2, 5, inn i søketreet og deretter kaller BinarySearchTree.print()? c) Skriv ferdig metoden BinarySearchTree.contains.
Side 5 av 7 Kodesnutt 2: BinarySearchTree, tilhørende oppgave 5 public class BinarySearchTree { private Node root; /* Implementasjon av add,remove,... */ public boolean contains(comparable thetarget) { /* TODO */ public void print(){ root.print(); private class Node { Node left; Node right; Comparable element; Node(Comparable theelement) { element = theelement; void print() { if (left!= null) left.print(); System.out.println(node.element); if (right!= null) right.print();
Side 6 av 7 Oppgave 6 En funksjon usequeue tar n objekter inn og ut av et PriorityQueue-objekt. Klassen PriorityQueue er implementert slik: public class PriorityQueue { private T[] data; private int count; public PriorityQueue() { data = (T[]) new Object[0]; public void enqueue(t element) { ensurecapacity(); data[count++] = element; sort(data,0,count); public T dequeue() { if (count == 0) return null; return data[--count]; private void expandcapacity(){ if (count < data.length) return; data = Arrays.copyOf(data,data.length*2); a) Drøft kjøretiden til usequeue i tilfellet der sort implementerer Merge sort. b) Drøft kjøretiden til usequeue i tilfellet der sort implementerer Insertion sort. c) Hvorfor bør vi foretrekke å strukturere arrayen data som en heap fremfor som en sortert liste?
Side 7 av 7 Oppgave 7 Anta at vi skal arbeide med tabeller som er for store til å lagres i datamaskinens minne. Mesteparten av en slik tabell må altså til enhver tid lagres på harddisken. Foreslå en algoritme for sortering av slike tabeller og drøft ressursbruken. Du kan gjerne beskrive algoritmen på en relativt uformell måte, men det bør ikke være tvil om hva algoritmen faktisk gjør. Tips: (i) Slike algoritmer er ikke en del av pensum. Spørsmålet her er om du kan bruke kunnskapen din i en ny sammenheng. (ii) Her finnes det mange gode svar, og det er like viktig å drøfte løsningen som å finne fram til den raskeste algoritmen. Slutt på oppgavesettet