Facit Tentamen TDDC kl (6)

Relevanta dokument
Försättsblad till skriftlig tentamen vid Linköpings Universitet

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Facit Tentamen TDDC (7)

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6)

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC Terminologi Uppdaterad Fö #1

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 12 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Seminarium 13 Innehåll

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

Tentamen Datastrukturer (DAT037)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 10 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Föreläsning 13 Innehåll

Träd Hierarkiska strukturer

TDDC30 Programmering i Java, datastrukturer och algoritmer

Tentamen i Algoritmer & Datastrukturer i Java

TDDC30 Programmering i Java, datastrukturer och algoritmer

Tentamen, Algoritmer och datastrukturer

Tentamen i Algoritmer & Datastrukturer i Java

::= HIHI HIHIHI ::= HAHA HAHAHA

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Exempeltenta GruDat 2002/2003

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning 9. Sortering

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen Datastrukturer (DAT036)

TDDI16 Datastrukturer och algoritmer. Prioritetsköer, heapar, Union/Find

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Tentamen Datastrukturer för D2 DAT 035

Föreläsning Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

13 Prioritetsköer, heapar

Tentamen TEN1 HI

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Föreläsning 14 Innehåll

Tentamen Datastrukturer D DAT 035/INN960

Länkade strukturer, parametriserade typer och undantag

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Tildatenta Lösningsskiss

Föreläsning 13 Datastrukturer (DAT037)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Föreläsning 4 Datastrukturer (DAT037)

Datastrukturer, algoritmer och programkonstruktion (DVA104, HT 2014) Föreläsning 5

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen kl Uppgift 4. Uppgift 5

Trädstrukturer och grafer

Föreläsning 11. ADT:er och datastrukturer

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Sätt att skriva ut binärträd

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Föreläsning 1 Datastrukturer (DAT037)

Tentamen TEN1 HI

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Föreläsning 5 Innehåll

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Datastrukturer och Algoritmer D0041D

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer. föreläsning 3. Stacks 1

ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

Tentamen Datastrukturer D DAT 035/INN960

Tommy Färnqvist, IDA, Linköpings universitet

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 13 Innehåll

Sökning och sortering

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Transkript:

Facit Tentamen TDDC30 2015-03-19 kl 14-18 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Ge ett exempel på ett kodstycke som orsakar ett NullPointerException. (1p) Svar:Animal x = null; x.introduceyourself(); b) Vad är syftet med en konstruktor? (1p) Svar: Att säkerställa att instanser av klasser byggs på rätt sätt, t.ex. att alla variabler initieras korrekt och för att kontrollera att alla värden som skickas in som parametrar till konstruktorn har korrekta värden. c) Vad innebär det att en metod är överlagrad? (1p) Svar:Att en metod är överlagrad innebär att den skrivits över i en underklass. Om Animal har metoden void introduceyourself() och underklassen Cat har en egen void introduceyourself() så har Cat-klassen överlagrat Animals introduceyourself-metod. d) Varför används Ordo-notationen för att jämföra tidskomplexitet hos algoritmer, istället för att t.ex. jämföra tiden de olika algoritmerna tar att köra? (1p) Svar:Olika datorer kan vara olika snabba, vilket gör tidsmätningar opålitliga. Det är också svårt att dra slutsatser om hur lång tid det kommer ta för dubbelt så mycket indata, baserat bara på hur lång tid en algoritm tagit tidigare. Ordo ger oss ett mer abstrakt, generaliserat värde som förvisso inte kan användas för att förutsäga den exakta tiden det kommer ta, men som istället kan användas för att lätt jämföra hur snabbt olika algoritmers tidskonsumption kommer att växa när mängden indata ökar. e) Vad är syftet med UML? (1p) Svar:Målet med Unified Modelling Language är att ge ett gemensamt bildspråk för att visualisera system och hur de olika komponenterna inom det hänger ihop. Det kan användas för att förmedla mer eller mindre detaljer, beroende på behov. f) Vad är skillnaden mellan en abstrakt datatyp (ADT) och dess implementation? (1p) Svar:Den abstrakta datatypen beskriver vad som ska göras, men inte hur det görs. Implementationen går steget längre och bestämmer även hur det ska göras.

Facit Tentamen TDDC30 2015-03-19 kl 14-18 2 (6) 2. (6p) "Datastrukturer" a) Ett binärt sökträd har skrivits ut med en postorder-traversering, vilket resulterade i [ 2 4 3 6 5 1 ]. Rita upp hur det binära sökträdet såg ut. (3p) Svar:(Det finns flera möjliga svar.) 1 5 3 6 2 4 b) Fältet [ 9 2 7? 4 1 3?? 6??? 5 8 ] representerar ett träd. Frågetecken representerar ett odefinierat värde. Rita upp hur det motsvarande trädet ser ut. (2p) Svar: 9 52 57 4 1 3 6 5 8 c) Ange i vilken ordning noderna i trädet nedan besöks av en levelorder-traversering och en inorder-traversering. (1p) 1 5 4 2 Svar:Levelorder-traversering: 5 1 4 2 3 Inorder-traversering: 4 1 3 2 5 3

Facit Tentamen TDDC30 2015-03-19 kl 14-18 3 (6) 3. (6p) "Tidskomplexitet" a) Sortera följande sorteringsalgoritmer med avseende på deras tidskomplexitet i värsta fallet: Selectionsort, Mergesort, Shakersort, Countsort, Heapsort. Svara ordnat med lägst tidskomplexitet först. (2p) Svar: Countsort, Heapsort, Mergesort, Selectionsort, Shakersort (Några av dessa har samma värsta fall och kan byta plats utan att svaret för den del blir fel.) b) Ange tidskomplexiteten i värsta fallet, med avseende på n, för följande metoder. (n är alltid ett positivt heltal.) (2p) void foo(int n) { for (int i = 0; i < n; ++i) { System.out.println( Foo! + n); void bar(int n) { if (n % 5 == 0) { for (int i = 0; i < n; ++i) { foo(i); void extrabar(int n) { for (int i = n; i > 0; --i) { bar(i); Svar:foo) O(n) bar) O(n²) extrabar) O(n³) c) Förenkla följande tre uttryck för tidskomplexitet: (2p) Svar: 1) O(nlog(n)) O(10n²) => O(n³log(n)) 2) O(n² + 10n + 2) O(3n ⁷) => O(n ⁹) 3) O(n³) + O(167n²) => O(n³)

Facit Tentamen TDDC30 2015-03-19 kl 14-18 4 (6) 4. (6p) "Algoritmer" a) Sortera värdena [ 6 1 2 7 5 4 3 ] med shellsort, med lucktalen [ 4 2 1 ]. Gör detta genom att byta plats på värden inom fältet, dvs. in-place. Sorteringen ska leda till stigande ordning, dvs 1, 2, 3, osv. Ange tydligt i svaret hur hela fältet ser ut innan varje platsbyte, samt vilka index som är på väg att byta plats, med maximalt ett byte per steg. (2p) Svar:[ 6 1 2 7 5 4 3 ] [ 5 1 2 7 6 4 3 ] [ 2 1 5 7 6 4 3 ] [ 2 1 5 4 6 7 3 ] [ 2 1 5 4 3 7 6 ] [ 2 1 3 4 5 7 6 ] [ 1 2 3 4 5 7 6 ] [ 1 2 3 4 5 6 7 ] (Obs, det finns andra implementationer av shellsort än den som använts ovan, t.ex. att låta startindex stega framåt och sedan kontrollera ett hopp framåt. Den som användes ovan sorterar istället klart alla värden som väljs ut av en steglängd från ett visst startindex, och går sedan vidare till den grupp som väljs av nästa startindex. De leder båda till att samma värden byter plats och samma tidskomplexitet.) b) Sortera värdena [ 5 4 3 2 1 ] med shakersort. Gör detta genom att byta plats på värden inom fältet, dvs. in-place. Sorteringen ska leda till stigande ordning, dvs 1, 2, 3, osv. Ange tydligt i svaret hur hela fältet ser ut innan varje platsbyte, samt vilka index som är på väg att byta plats, med maximalt ett byte per steg. (2p) Svar:[ 5 4 3 2 1 ] [ 5 4 3 1 2 ] [ 5 4 1 3 2 ] [ 5 1 4 3 2 ] [ 1 5 4 3 2 ] [ 1 4 5 3 2 ] [ 1 4 3 5 2 ] [ 1 4 3 2 5 ] [ 1 4 2 3 5 ] [ 1 2 4 3 5 ] [ 1 2 3 4 5 ] c) Kan de två sorteringsalgoritmerna ovan implementeras stabila? Ange separat svar för varje algoritm, samt motivera varför. (2p) Svar:Shakersort Ja, så länge som den inte byter plats på värden av samma storlek så kommer den inbördes ordningen mellan lika stora värden ej kunna ändras, eftersom värden bara byter plats med intilliggande värden. Shellsort Nej, eftersom byten här sker med värden som ligger långt ifrån varandra, där avståndet bestäms av det aktuella lucktalet, kan det hända att värden av samma storlek byter inbördes ordning då de mellanliggande värdena ignoreras för det enskilda bytet. Exempel:[ 2 2 2 1 5 4 7 ], Lucktal 4

Facit Tentamen TDDC30 2015-03-19 kl 14-18 5 (6) Praktisk del 5. (8p) Att organisera uppgifter Mitt bland alla planer för öde öar och annat kul har Stefan hamnat efter i sitt skolarbete och har nu en del att ta igen. Eftersom det är ganska tight med tid så måste han också prioritera det viktigaste först, så att han hinner med allt så gott det går. Dock finns det alltid tid för lite studieflykt i sista minuten, och ett välskrivet Java-program för att klura ut i vilken ordning han ska hantera sina uppgifter vore väl intressant? En heap vore nog bra, där de olika uppgifterna han har gett sig själv kan sorteras efter hur viktiga de är. En uppgift med större viktighet är viktigare än andra med mindre. Om han sedan använder en maxheap så kommer han ju alltid kunna hämta ut den mest viktiga uppgiften från den. Strålande! (Obs, beskrivningen ovan är inte tydlig med att viktigheten uttrycks i en siffra där en mindre siffra är viktigare, dvs uppgift 1, uppgift 2, etc. Information med förtydling gick ut under tentans gång.) En nod från Stefans heap: Värde Importera Stefans projekt från given_files, och hjälp honom med programmet enligt nedan. a) Att lägga till saker i heapen har Stefan redan ordnat, men att ta bort saker har han inte hunnit fixa. Hjälp Stefan skriva sin removetop-metod, och var noggrann med att den uppdaterar heapen i övrigt så att den fortsätter vara en korrekt heap. Vid borttagning så behöver du här inte bevara att heapen är ett fullständigt träd. (6p) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 6b. Just nu kan Stefans heap bara lagra strängar och dess viktighet. Det vore egentligen smidigt om den kunde lagra godtyckliga datatyper med viktighet, och det vore ju en lätt sak att fixa med hjälp av generiska typer. Hjälp Stefan med att uppdatera hans kod så att testprogrammet för del b fungerar. Var noga med att eliminera alla varningar som dyker upp när du gör konverteringen, så att allt blir som det ska! (2p)

Facit Tentamen TDDC30 2015-03-19 kl 14-18 6 (6) 6. (10p) Båt-listan Anna har hört om Stefans planer att köpa sin egen öde ö, och även om det verkar intressant verkar det också lite väl ambitiöst. Något mer realistiskt vore nog att ta en seglar-semester någonstans varmt i ett år eller så. Ju mer Anna tänker på det, desto intressantare verkar det. Men det är ganska mycket som måste ordnas för att det här ska gå vägen, hon måste hitta en båt, rusta upp den och köpa in all kringutrustning som behövs, diverse provision och ha pengar öronmärkta för framtida påfyllningar och reparationer. Det givna sättet att få struktur på situationen är så klart ett välskrivet Java-program! De inköp som måste göras är ju mer eller mindre viktiga, t.ex. så är ju en båt mycket viktigare än matprovisionerna, men matprovisionerna i sin tur mycket viktigare än de skönlitterära böckerna som sedan måste köpas in. Likaså kanske en del saker är lika viktiga för resan, men kostar olika mycket, och då vore det ju vettigast att prioritera den dyraste saken först, för att eliminera de stora hindren först. En prioritetskö borde kunna hjälpa här, tänker Anna.. Importera Annas projekt från given_files, och hjälp henne med programmet enligt nedan. a) Annas prioritetskö behöver en add-metod, som tar in en båtpryl och sorterar in den i kön enligt dess prioritet. Prylens prioritet bestäms i första hand av prioritetsattributet, där lägre är mer prioriterat, och i andra hand av prylens kostnad, där högre är mer prioriterat. När allt är sagt och gjort ska Anna kunna stoppa in saker i prioritetskön i godtycklig ordning och sedan plocka ut dom i prioritetsordningen, så hon vet vad hon måste fixa först. Hjälp henne skriva klart add-metoden. (6p) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 6b. Det här ser ju lovande ut, men det vore smidigt om Anna kunde återanvända den här koden i andra projekt. För att det ska bli riktigt bra borde koden var vettigt och konsekvent namngiven med rätt synligheter. För att strukturera upp hur hon har tänk sig ritar Anna ihop UML-diagrammen nedan, som representerar hur hon vill att hennes klasser ska se ut. Uppdatera Annas klasser så att de följer UML-diagrammen till punkt och pricka. (4p) PriorityQueue - Node first + int size() + void insert(...) + Item dequeue() + boolean isempty() Node - Item data # Node next # Node(...) + Item getdata()