Facit Tentamen TDDC (7)

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.

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

Facit Tentamen TDDC kl (6)

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

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

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

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 Programmering i Java, datastrukturer och algoritmer

TDDC Terminologi Uppdaterad Fö #1

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 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

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

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

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

Föreläsning 14 Innehåll

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

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

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

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

Sökning och sortering

Tentamen Datastrukturer för D2 DAT 035

Tentamen, Algoritmer och datastrukturer

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 1 Datastrukturer (DAT037)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Tentamen Datastrukturer D DAT 035/INN960

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Seminarium 13 Innehåll

Föreläsning Datastrukturer (DAT037)

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

Tentamen Datastrukturer, DAT037 (DAT036)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

TDDD78 Objektorientering: Lagring och livstid

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Föreläsning 9 Innehåll

Träd Hierarkiska strukturer

Programmering för språkteknologer II, HT2011. Rum

Föreläsning 9. Sortering

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

::= HIHI HIHIHI ::= HAHA HAHAHA

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.

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

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

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

Föreläsning 4 Innehåll

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

Föreläsning 9 Innehåll

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning REPETITION & EXTENTA

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

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

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

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

Föreläsning 3 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Länkade strukturer, parametriserade typer och undantag

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Lösningar Datastrukturer TDA

Datastrukturer. föreläsning 6. Maps 1

Föreläsning 3 Datastrukturer (DAT037)

Tillämpad Programmering (ID1218) :00-13:00

Programmering för språkteknologer II, HT2014. Rum

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Föreläsning 13 Datastrukturer (DAT037)

Trädstrukturer och grafer

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

DAI2 (TIDAL) + I2 (TKIEK)

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

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

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

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 11 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Transkript:

Facit Tentamen TDDC30 2014-03-18 1 (7) Teoretisk del 1. (3p) "Snabba frågor" a) Varför kan man tänkas vilja dölja metoder och variabler med private? (0.5p) Svar:För att skydda interna variabler från ändringar utifrån, och/eller för att dölja vissa implementationsdetaljer för den kod eller de användare som använder sig av klassen. b) Vad är syftet med undantag/exceptions? (0.5p) Svar:Att kunna signalera när något har gått fel och vad som har fått fel, samt kunna bolla vidare ansvaret till rätt nivå av programmet, dvs. rätt nivå i metodanropskedjan. c) Vad är skillnaden mellan en abstrakt datatyp (ADT) och dess implementation? (0.5p) 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. d) Om en algoritm har tidskomplexiteten O(n) och en annan O(n 2 ), vad innebär det här för skillnad mellan algoritmerna? (0.5p) Svar:För stora n kommer den värsta möjliga tidsförbrukningen växa linjärt med n för O(n)-algoritmen, men O(n 2 )-algoritmen växer istället kvadratisk. Om n blir dubbelt så stor så kommer den värst tidsförbrukningen för O(n)-algoritmen också bli dubbelt så stor, till skillnad från O(n 2 )-algoritmen där tidsförbrukningen skulle bli fyra gånger så stor. e) I Animal myanimal = new Animal() sker två separata saker. Vad innebär Animal myanimal och vad innebär new Animal()? (0.5p) Svar: Animal myanimal skapar en variabel som är en referens till ett Animal-instans, men skapar inte den tillhörande Animal-instansen. new Animal() skapar en Animal-instans, som det måste lagras en referens till i någon slags variabel för att den ska forsätta existera. f) Vad skiljer en statisk variabel (dvs. en klass-variabel) från en icke-statisk? (0.5p) Svar:En statisk variabel är associerad till klassen, och kan kommas åt utan en instans av klassen. En icke-statisk variabel är å andra sidan associerad med en viss instans av klassen, och kan bara kommas åt via en sådan instans. Klass-variabeln blir alltså delad av alla instanser av klassen, eftersom det bara finns en variabel för klassen, snarare än en per instans.

Facit Tentamen TDDC30 2014-03-18 2 (7) 2. (3p) "Datastrukturer" a) Ett binärt sökträd har skrivits ut med en preorder-traversering, vilket resulterade i [ 4 2 1 3 7 6 5 9 8 ]. Rita upp hur det binära sökträdet såg ut. (1.5p) Svar: 4 2 7 1 3 6 9 5 8 b) Är trädet nedan en heap av något slag? Ange svar samt motivera varför/varför inte med minst en heap-egenskap. (0.5p) 2 3 1 5 6 8 7 4 Svar:Nej, eftersom barn inte alltid är större eller mindre än sina föräldrar, t.ex. 2 1 8. c) Ange i vilken ordning värdena i trädet ovan skulle lagras i fältet, om hela trädet representerades som ett fält. Markera odefinierade värden i fältet med ett frågetecken. (1p) Svar:[ 2 3 1 5 6 8 7 4??????? ]

Facit Tentamen TDDC30 2014-03-18 3 (7) 3. (3p) "Tidskomplexitet" a) Förenkla följande tre uttryck för tidskomplexitet: (1p) 1) O(2n) + O(n 2 ) 2) O(n) O(2n + n) 3) O(2) O(3n 3 ) + O(n) Svar:1) O(n 2 ) 2) O(n 2 ) 3) O(n 3 ) b) Ange tidskomplexiteten i värsta fallet, med avseende på n, för följande metoder. (n är alltid ett positivt heltal.) (1p) void foo(int n) { for (int i = 0; i < n; i = i+1) { for (int j = 0; j < 2*n; j = j+1) { System.out.println(i + " x " + j); void branch(int n) { // is n evenly divisible by 2? if (n % 2 == 0) { bar(n * n * n); void bar(int n) { foo(n); for (int i = 0; i < 5; i = i+1) { foo(i); Svar:foo) O(n 2 ) bar) O(n 2 ) branch) O(n 6 ) c) Ange tidskomplexiteten i bästa fallet, med avseende på n, för metoderna ovan. (n är alltid ett positivt heltal.) (1p) Svar:foo) Ω(n 2 ) bar) Ω(n 2 ) branch) Ω(1)

Facit Tentamen TDDC30 2014-03-18 4 (7) 4. (3p) "Algoritmer" a) Sortera värdena [ 5 1 2 7 6 2 4 ] med insertionsort. 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. (1p) Svar:[ 5 1 2 7 6 2 4 ] [ 1 5 2 7 6 2 4 ] [ 1 2 5 7 6 2 4 ] [ 1 2 5 6 7 2 4 ] [ 1 2 5 6 2 7 4 ] [ 1 2 5 2 6 7 4 ] [ 1 2 2 5 6 7 4 ] [ 1 2 2 5 6 4 7 ] [ 1 2 2 5 4 6 7 ] [ 1 2 2 4 5 6 7 ] b) Sortera värdena [ 4 0 1 6 5 1 3 ] med countsort. Var noga med att ange vad som sker i varje steg, så att det går att följa processen från början till slut. Sorteringen ska leda till stigande ordning, dvs 1, 2, 3, osv. (1p) Svar: c) Vad innebär det att en sorteringsalgoritm är stabil? Ge exempel på en sorteringsalgoritm som kan implementeras stabil, och en som inte kan implementeras stabil. (1p) Svar:Att den inte byter inbördes ordning mellan två värden av samma storlek. Exempelvis insertionsort ovan kan implementeras stabil då den ej behöver byta plats på 2'orna som ett steg i sorteringen. T.ex. shellsort kan dock ej implementeras stabil.

Facit Tentamen TDDC30 2014-03-18 5 (7) Praktisk del 5. (4p) Jobb-högen Snart är sommaren här, och denna sommar har Stefan bestämt sig för att han ska ut i arbetslivet och börja arbeta på kontakterna. Det vore trevligt med lite extra pengar i fickan efter sommarens slut, men att få in en fot på rätt företag vore inte heller en dålig idé. Efter en stunds sökande inser Stefan att det finns väldigt många möjliga arbetsplatser att ta ställning till, och han kan ju inte söka jobb hos alla, det skulle ta för lång tid. Han måste prioritera! För att lösa detta tar Stefan alla potentiella arbetsplatser han kan tänka sig och representerar dem som en klass i Java, med de egenskaper han anser relevanta som attribut. Tanken är att han därefter kan använda sig av en väl vald datastruktur för att sortera dessa jobb, och plocka fram de som han bör prioritera när det väl är dags att söka jobb! Importera Stefans projekt från given_files, och hjälp honom med programmet enligt nedan. a) Stefan har nästan skrivit klart sin JobOpportunity-klass, och nu vill han berätta för en kompis om sina planer och hur han har lagt upp sin kod. Det är dock svårt att förklara upplägget med ord och kompisen är inte intresserad nog att vilja läsa Stefans kod. För att kunna glänsa här behöver Stefan något som underlättar förklarandet, han behöver ett UML-diagram som beskriver upplägget! Rita ett klassdiagram för klasserna i data-paketet som anger attribut, metoder och relationer. (1p) (Denna uppgift besvaras skriftligt tillsammans med övriga skriftliga svar.) Svar:

Facit Tentamen TDDC30 2014-03-18 6 (7) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 5c. Stefan har en implementation av en heap sen tidigare som han vill använda för att prioritera de arbetsplatser han väljer mellan. Dock kräver den existerande koden att Stefans JobOpportunity implementerar ett särskilt interface, MyComparable, så att heapen vet hur den ska sortera de här objekten. Gör de förändringar som krävs i JobOpportunity så att heapen sorterar arbetsplatserna i första hand efter lön (sjunkande) och i andra hand prestige (sjunkande). Detta ska göras utan att ändra något i heap-paketet. (2p) c) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 5c. Vid närmare eftertanke inser Stefan att det vore trevligt att lägga till en depth-metod till heapen. Lägg till metoden depth, och låt den returnera ett heltal som är det maximala djupet i trädet. (1p) (Då djupet är avståndet från roten har roten alltså djup 0. Träd med mindre än ett element anses ha det maximala djupet 0.)

Facit Tentamen TDDC30 2014-03-18 7 (7) 6. (5p) De ordnade jobben Anna är inne på samma spår som Stefan med att organisera sommarens arbetsmöjligheter, men hon har valt att lägga upp det på ett lite annat sätt. Istället för en heap så har Anna skrivit en cirkulärt dubbellänkad listan för att lagra arbetsplatserna. Hon har kommit en bit på vägen, men är inte riktigt klar än. Importera Annas projekt från given_files, och hjälp henne med programmet enligt nedan. En cirkulärt dubbellänkad lista: a) En annan tanke Anna har är att det vore trevligt om hon kunde använda sin lista till annat än bara JobOpportunity, som nu är fallet. Gör de ändringar som behövs för att göra Annas lista och relaterade delar generisk, så att testprogrammet för del b fungerar. Inga varningar ska finnas kvar. (1p) Obs: Rätt testprogram för den här deluppgiften var TestPartB.java. b) Anna har redan en removefirst-metod för att ta bort det första värdet ur listan, men det vore även bra med en removelast-metod, resonerar Anna. Lägg till den metoden, så att testprogrammet för del c fungerar. (1p) Obs: Rätt testprogram för den här deluppgiften var TestPartA.java. c) Anna har sin add-metod sen tidigare, men den stoppar bara in det nya värdet först i listan för tillfället. Anna vill istället att det JobOpportunity som ska stoppas in läggs till på rätt plats direkt i listan, vid instoppningstillfället. Hon vill sortera arbetsplatserna på möjlig lön, så rätt plats är ordnad på lön (sjunkande). När allt är sagt och gjort ska alltså arbetsplatserna som tas ur listan komma med högst lön först, i testprogrammet för del c. (3p) (Lös denna uppgift som ett separat projekt, då det finns en potentiell konflikt mellan denna deluppgift och deluppgift a.)