Exempeltenta GruDat 2002/2003 Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ ger noll poäng på uppgiften. Obs: Den riktiga tentan kommer att bestå av 50 uppgifter av liknande typ. Preliminära betygsgränser: U: 0 29 poäng 3: 30 37 poäng 4: 38 44 poäng 5: 45 50 poäng Uppgift 1 Vilken av följande Java-satser är korrekt: A) if 17==b foo(); else bar(); B) if 17=b foo(); else bar(); C) if (17==b) foo(); else bar(); D) if (17=b) foo(); else bar(); Uppgift 2 Antag att vi vill lagra n namn i en hashtabell där kollisionerna hanteras med enkellänkade listor ( separate chaining ). Hur många jämförelser behövs det i värsta fall för att hitta ett givet namn? A) O(1) B) O(log n) C) O(n) D) O(n 2 ) 1
Uppgift 3 Givet en enkellänkad lista bestående av noder med följande deklaration: class Node { Node next; Node head; Vilket av följande kodavsnitt vänder listan, som variabeln head refererar till, baklänges? A) { B) { C) { D) { Node previous = null; for (Node x=head; x!=null; x=x.next) { x.next = previous; previous = x; int n = head.length(); for (int i=0; i<n; i++) { x[i].next = x[i-1]; Node foo = null; Node bar = head; while (bar!= null) { Node temp = bar.next; bar.next = foo; foo = bar; bar = temp; foo = foo.next; Node foo = null; while (head!= null) { Node bar = head.next; head.next = foo; foo = head; head = bar; head = foo; 2
Uppgift 4 Hur snabb är mergesort i medelfallet när man sorterar n element? A) O(log n) B) O(n) C) O(n log n) D) O(n 2 ) Uppgift 5 Vi har beskrivit två algoritmer för att snabbt kunna söka efter en delsträng i en lång sträng: Knuth-Morris-Pratt s algoritm (KMP) samt Boyer-Moore s algoritm (BM). Kräver någon av dessa att man förbehandlar den givna delsträngen innan själva sökningen kan sätta igång? A) Nej, ingen. B) Ja, båda. C) KMP kräver detta, men inte BM. D) BM kräver detta, men inte KMP. Uppgift 6 Vilket eller vilka av följande påståenden är korrekta: 1. Vid användning av O-notationen bortser man från konstanta skalfaktorer. 2. O-notationen är ett mått som i första hand är relevant för små datamängder. A) Varken alternativ 1 eller 2 är rätt. B) Endast alternativ 1 är rätt. C) Endast Alternativ 2 är rätt. D) Både alternativ 1 och 2 är rätt. 3
Uppgift 7 Vilken av följande beteckningar används normalt inte för operationer på en abstrakt datatyp? A) Reduktorer B) Destruktorer C) Mutatorer D) Getters Uppgift 8 I vilken ordning behandlar man noderna vid en preorder-genomgång av följande träd? A B C D E F A) A, B, D, E, C, F B) D, B, E, A, C, F C) D, E, B, F, C, A D) D, E, F, B, C, A Uppgift 9 När sker själva sorteringen (den tidskrävande delen) ifall man implementerar en prioritetskö med hjälp av en heap? A) Vid skapandet av prioritetskön B) Vid insättningen av nya element C) Vid utplockningen av det mest prioriterade elementet D) Både vid insättningen och utplockningen. 4
Uppgift 10 Antag att ett Java-program innehåller följande definitioner: interface Foo { void hej(); class Bar implements Foo { public void hej() { System.out.println("Hej"); Vilka av dessa satser är korrekta? Bar x = new Foo(); Foo y = new Bar(); A) Ingen. B) Endast den första. C) Endast den andra. D) Båda. Uppgift 11 Vad är körtiden (värsta fallet) för denna algoritm? algoritm Mysko(v): In: vektor v med längden n done = false while not done: done = true for i=1..n-1: if v[i-1] > v[i]: swap(v[i-1], v[i]) done = false A) O(log n) B) O(n) C) O(n log n) D) O(n 2 ) 5
Uppgift 12 Vilken datastruktur är lämplig att använda i en algoritm som ska avgöra ifall parenteserna matchar varandra i en sträng med blandade parentestyper. Exempel: strängen "ab([c(d)])" har matchande parenteser, men "(ab(v[d)])" har det inte. A) En stack. B) En kö. C) En hashtabell. D) En skiplista. Uppgift 13 Vad är den totala vikten (summan av väglängderna) i det minsta träd som spänner upp grafen beskriven av denna kantmatris? 0 4 5 7 8 4 0 2 2 5 5 2 0 3 6 7 2 3 0 5 8 5 6 5 0 A) 12 B) 13 C) 16 D) 24 6