LINKÖPINGS UNIVERSITET Institutionen för datavetenskap Jonas Wallgren Tentamen i TDDC30 Programmering i Java, datastrukturer och algoritmer För I3, Ii3 Datum: 2009-04-17 Klockan: 14-18 Jour: Jonas Wallgren, 013-28 2682 (Fredrik Berntsson, 013-28 2860) Administratör: Madeleine Häger Dahlqvist, tel. 28 2360 Hjälpmedel: Anvisningar: Inga Omotiverade svar ger noll poäng! Börja varje uppgift på nytt papper och skriv namn och personnummer på varje inlämnat blad. Tentamen består av två delar: en teoretisk och en praktisk. Den teoretiska delen löses med papper och penna som en traditionell tentamen. Den praktiska delen löses på datorer, anvisade vid tentamenstillfället. Efter tentamen lämnas alla filer som ska examineras kvar på kontot. Poäng: Totalt kan 22 poäng erhållas, fördelade på 6 uppgifter. För godkänt krävs minst 11 poäng, för betyg 4 minst 15 poäng och för betyg 5 minst 19 poäng.
Tentamen TDDC30 2009-04-17 2 (7) 1. (3p) Sortering Teoretisk del a) Sortera följande array i stigande ordning med Bucketsort. Tillåtna nycklar är talen 0, 1,..., 9. Beskriv varje steg i sorteringen. Varje element i arrayen nedan är skrivet på formen nyckel:data. 5:A 3:B 9:C 6:D 1:E 3:F 6:G 6:H 5:I b) Hur snabbt (komplexitetsmässigt) kan man sortera en array med en jämförelsebaserad sorteringsalgoritm? Förklara varför Bucketsort kan ha en lägre komplexitet än denna undre gräns. c) Vad innebär det att en sorteringsalgoritm är stabil? Nämn 1 stabil sorteringsalgoritm som vi gått igenom i kursen och förklara varför den är stabil. 2. (3p) Komplexitet a) Ange den matematiska definitionen av f O( g). Om du ej kan den eftersökta definitionen, beskriv den med ord (ger ej full poäng). b) Bevisa eller motbevisa matematiskt 2 n Ω( n 2 ) c) Betrakta två algoritmer A och B, med respektive tidskomplexitet T A ( n) On ( 2 ) och T B ( n) On ( ). Är det under några omständigheter möjligt att A exekverar snabbare än B? Motivera! 3. (4p) Objektorientering Betrakta nedanstående klassdiagram (Observera att "A" och ett "met3" är kursiva): A met1() met2() met3() D met5() met6() B met3() met4() C met2() met3() a) Vilka metoder har klassen B? Förklara! b) Vad innebär det att klass C implementerar en likadan metod som klass A (t.ex. met2())?
Tentamen TDDC30 2009-04-17 3 (7) c) Klass A är abstrakt och metoden met3() likaså. Vad innebär det och när är det användbart? d) Vilken relation har klasserna C och D? Vad innebär den relationen? 4. (2p) Träd a) Ange för vart och ett av följande binära träd om det är fullt, perfekt eller fullständigt. Träd R Träd S Träd T b) Sätt in följande element i ett från början tomt binärt sökträd. Visa det resulterande trädet. 8, 12, 15, 4, 9, 5, 2, 11, 10 c) Ta bort 8 ur det resulterande trädet ovan. Förklara operationen och visa hur trädet ser ut efteråt. d) Traversera trädet från deluppgift b) i pre-ordning och därefter i in-ordning. Skriv ut elementen vid besök.
Tentamen TDDC30 2009-04-17 4 (7) Praktisk del Anvisningar: Uppgifterna i denna del ska lösas på dator. När alla uppgifter är lösta ska alla filer som ska examineras lämnas kvar på kontot. Uppgifterna ska alltså inte skickas in via tentamenssystemet. Försök att lösa alla uppgifter så långt som möjligt. Om du inte kan lösa en uppgift, förenkla uppgiften. Glöm i så fall inte att beskriva förenklingen. Poängavdrag följer beroende på förenklingens storlek. Tänk på läsbarhet och namngivning, och även på attributs och metoders synlighet. Skapa ett nytt projekt för varje uppgift. Benämn dessa Uppg5 resp Uppg6. För att mata in givna filer i Eclipse rekommenderas att du först öppnar filen i en vanligt texteditor varifrån texten kopieras och klistras in i Eclipse. Vid oklarheter och frågor om detaljerad Java-syntax, fråga tentajour/ examinator. Bilagd finns även en lista över vanliga unixkommandon. 5. (5p) Köer I denna uppgift ska du definiera en klass för att representera ADT Kö av heltal (int). Kalla denna klass RingBufferQueue. Använd ringbuffer-implementation av kön. I denna uppgift får du endast använda de standardklasser som återfinns i java.lang (t.ex. String, Integer, System.out och System.err) samt klassen Exception (API i bilaga). Filen QueueTester.java i katalogen Given_files innehåller ett litet testprogram. Du kan använda detta för att testa din kö. Denna klass kommer ej att examineras. a) Definiera klassen RingBufferQueue inklusive de variabler som behövs för din köimplementation. Lägg till en konstruktor, som tar ett heltalsargument. Detta argument anger storleken på den underliggande bufferten (max storlek på kön). Om du ej klarar av att skriva en sådan konstruktor, skriv då en standardkonstruktor (utan argument) och anta att max antal samtidiga element i stacken är 3. Detta ger ej full poäng. b) Implementera operationen void enqueue(int elt) c) Implementera operationen int dequeue() d) Lägg till undantagshantering för operationerna enqueue och dequeue. Definiera och kasta undantaget QueueException då bufferten blir full respektive tom.
Tentamen TDDC30 2009-04-17 5 (7) 6. (5p) Sorterade länkade listor Skriv ett program som lagrar heltal i ordnade, länkade listor enligt följande: Den ena listan innehåller positiva heltal, den andra negativa. I båda listorna är talen ordnade efter stigande absolutbelopp. 1 -> 3 -> 4 -> 10 -> 4711-2 -> -5 -> -7 -> -1000 -> -4711 Listorna ska sedan slås ihop (merge) till en lista efter stigande absolutbelopp. 1 -> -2 -> 3 -> 4 -> -5 -> -7 -> 10 -> -100 -> -4711 -> 4711 a) Definiera en egen klass LinkList. Varje nod ska innehålla ett heltal. En nod ska konstrueras med talet och resten av listan som argument. b) Definiera en metod insert för att sätta in en nod på rätt plats i en lista. Den ska anropas med insert(element,list) eller med list.insert(element) - välj själv - där element alltså är ett tal som ska sättas in i listan. Du får själv bestämma om insert ska returnera en ny lista eller void. c) Definiera en metod print som skriver ut alla element i en lista - separerade av mellanslag och med en radframmatning på slutet. d) Skriv ett huvudprogram som Läser in en följd av heltal från tangentbordet och skapar två listor mha insert - en med positiva heltal och en med negativa. Inlästa 0:or lagras inte alls. Skriver ut bägge listorna mer print. Slår ihop listorna så att resultatet blir en lista med elementen ökande efter absolutbelopp. Om både -n och n finns i listan ska -n komma före n, t.ex. -17 före 17. Skriver ut den sammanslagna listan.
Tentamen TDDC30 2009-04-17 6 (7) Class java.lang.exception java.lang.object extended by java.lang.throwable extended by java.lang.exception All Implemented Interfaces: Serializable Utdrag ur Java API public Exception(String message) Constructs a new exception with the specified detail message. Parameters: message - the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method. public String getmessage() Returns the detail message string of this throwable.
Tentamen TDDC30 2009-04-17 7 (7) Vanliga unixkommandon mkdir katalognamn rmdir katalognamn cd katalognamn cp källfil målfil mv källfil målkatalog mv orgnamn nyttnamn ls cat filnamn Skapa katalog Ta bort katalog Sätt aktuell katalog Kopiera fil från källfil till målfil Flytta källfil till målkatalog Byt namn på filen orgnamn till nyttnamn Skriver ut alla filer i aktuell katalog Skriver ut innehållet i filen filnamn