Teoretisk del. Facit Tentamen TDDC (6)

Relevanta dokument
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)

Facit Tentamen TDDC (7)

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.

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

Facit Tentamen TDDC kl (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. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

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

TDDC Terminologi Uppdaterad Fö #1

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

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

Tentamen Datastrukturer för D2 DAT 035

Seminarium 13 Innehåll

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

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

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

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

Algoritmer. Två gränssnitt

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

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

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Tentamen Datastrukturer (DAT037)

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

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

Föreläsning 13 Innehåll

Föreläsning 11 Datastrukturer (DAT037)

Magnus Nielsen, IDA, Linköpings universitet

Tentamen Datastrukturer D DAT 035/INN960

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

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

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

Föreläsning 14 Innehåll

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.

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

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

Föreläsning 9. Sortering

Sökning och sortering

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

Lösningar Datastrukturer TDA

Tommy Färnqvist, IDA, Linköpings universitet

Algoritmer och datastrukturer 2012, fo rela sning 8

Föreläsning 9 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen TEN1 HI

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

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

Tentamen, Algoritmer och datastrukturer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tildatenta Lösningsskiss

Tentamen Datastrukturer, DAT037 (DAT036)

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

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

Föreläsning 6: Introduktion av listor

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

Trädstrukturer och grafer

Tentamen Datastrukturer D DAT 035/INN960

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

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

Tentamen Datastrukturer D DAT 036/INN960

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

Övningen vill visa på vikten av valet av datastruktur, trots att de ofta erbjuder samma funktionalitet genom sina gränssnitt.

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Föreläsning Datastrukturer (DAT037)

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 11 Innehåll

TDDC91 & TDDE22 & 725G97 Datastrukturer och algoritmer Datortentamen (DAT1) , 08 12

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

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

Tentamen Datastrukturer D DAT 036/INN960

Tentamen TEN1 HI

F9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2 Datastrukturer (DAT037)

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer, DAT037 (DAT036)

Datastrukturer. föreläsning 6. Maps 1

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

Tentamen Datastrukturer (DAT036)

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Föreläsning 5 Innehåll

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

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

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

Fredag 10 juni 2016 kl 8 12

Transkript:

Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för alla klasser. private: Dold för alla klasser förutom andra av samma klass. protected: Endast nåbar för andra av samma klass, eller klasser som ligger i samma paket, eller klasser som ärver från klassen som innehåller variabeln eller metoden som är protected. b) Vad innebär det att en algoritm har tidskomplexitet O(n 2 ) och rymdskomplexitet O(n) i värsta fallet? (2p) Svar:Tidskomplexitet O(n 2 ) innebär att tiden algoritmen tar att köra i värsta fallet alltid är beroende av mängden indata n med förhållandet n 2, för alla n över en viss storlek. Algoritmen kommer alltså aldrig vara långsammare än så från och med det n. För rymdskomplexiteten O(n) är resonemanget detsamma, förutom att här är det mängden minnesutrymme algoritmen tar upp som är beroende av mängden indata n med förhållandet n, för alla n över en viss storlek. Algoritmen kommer alltså aldrig ta upp mer minnesutrymme än så från och med det n. c) Vad är skillnaden mellan en instansvariabel och en klassvariabel? (1p) Svar:En klass som innehåller en instansvariabel får en separat sådan variabel i varje instans. En klass som innehåller en klassvariabel(dvs. en statisk) har dock bara en sådan, som alla instanser av den klassen istället delar på. d) Vad är syftet med ett interface? (1p) Svar:Att ange vilka metoder klassen som implementerar detta interface måste tillhandahålla, utan att specificera den exakta koden för implementationen. Implementationen lämnas istället till klassen som implementerar interfacet. e) Vad innebär polymorfi? (1p) Svar:Att en gemensam typ kan representera flera olika undertyper, baserade på den gemensamma bastypen, och att man i undertyperna kan definiera eller omdefiniera('skriver över') metoder från bastypen för att ändra beteendet.

Facit Tentamen TDDC30 2014-08-29 2 (6) 2. (6p) "Datastrukturer" 3 4 1 5 6 9 8 a) Är trädet ovan ett binärt sökträd? Motivera svaret! (1p) Svar:Nej, då 3 ligger till vänster under 4, men 9 ligger till vänster under 8. Detta stämmer inte med någon form av binärt sökträd. b) Organisera om siffrorna i trädet ovan så att trädet utgör antingen en binär minheap eller en binär maxheap. Svara med en bild. Ange också vilken typ av heap du valde, och motivera varför trädet utgör antingen en maxheap eller minheap. (3p) ( Organisera om siffrorna innebär att pilarna och noderna förblir på samma plats, endast siffrorna får byta plats i bilden.) Svar:Trädet nedan är en maxheap. Detta kan motiveras av att samtliga föräldrar är mindre än sina respektive barn. (Obs: Trädet nedan saknar den fullständighet som binära heapar normalt har, pga. att strukturen från det första trädet följdes.) 3 9 1 5 6 4 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. (2p) Svar:[ 4 3 8 1? 5 6???? 9??? ] 8

Facit Tentamen TDDC30 2014-08-29 3 (6) 3. (6p) "Tidskomplexitet" a) Antag att det finns ett osorterat fält med tillhörande remove-metoder för att ta bort enskilda värden. Ange tidskomplexiteten för varje remove-metod, samt motivera varför, för: (4p) 1) En remove-metod som alltid tar bort det första värdet i fältet. Svar:O(n), då första värdet som tas bort måste skrivas över genom att flytta alla övriga värden ett steg till vänster, dvs. n-1 förflyttningar. 2) En remove-metod som alltid tar bort det sista värdet i fältet. Svar:O(1), då sista värdet kan hittas direkt och tas bort utan att övriga värden måste flyttas. (Antagande: Värden kan tas bort utan att skapa ett helt nytt fält och kopiera över värden, genom att hålla reda på antalet värden som finns lagrade i fältet i en separat int-variabel.) 3) En remove-metod som tar bort ett visst värde från fältet, värdet som ska tas bort angivet när metoden anropas. Finns flera kopior av det värdet, tas bara det första som hittas bort. Svar:O(n), då värdet först måste hittas genom en linjär sökning, och efter att det hittats, måste skrivas över genom att flytta övriga värden till vänster. (Om ditt svar bygger på något antagande som du är osäker på, ange även det antagandet.) b) Förenkla följande tre uttryck för tidskomplexitet: (2p) Svar: 1) O(7) + O(3n) => O(n) 2) O(7) O(1 + 3n + n) => O(n) 3) O(5n 3 ) O(5n 3 ) => O(n 6 )

Facit Tentamen TDDC30 2014-08-29 4 (6) 4. (6p) "Algoritmer" a) Sortera värdena [ 2 7 1 3 9 5 6 4 8 ] med selectionsort. 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:[ 2 7 1 3 9 5 6 4 8 ] [ 1 7 2 3 9 5 6 4 8 ] [ 1 2 7 3 9 5 6 4 8 ] [ 1 2 3 7 9 5 6 4 8 ] [ 1 2 3 4 9 5 6 7 8 ] [ 1 2 3 4 5 9 6 7 8 ] [ 1 2 3 4 5 6 9 7 8 ] [ 1 2 3 4 5 6 7 9 8 ] [ 1 2 3 4 5 6 7 8 9 ] b) Sortera värdena [ 4 1 7 6 2 5 ] med quicksort. 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. Förklara även hur pivot-strategin du använde väljer pivot-element. (2p) Svar:Pivot-strategi, välj alltid det högraste elementet bland de värden som sorteras. [ 4 1 7 6 2 5 ] [ 4 1 2 6 7 5 ] [ 4 1 2 5 7 6 ] [ 1 4 2 5 7 6 ] [ 1 2 4 5 7 6 ] [ 1 2 4 5 6 7 ] c) Kan de två sorteringsalgoritmerna ovan implementeras stabila? Ange separat svar för varje algoritm, samt motivera varför. (2p) Svar:Selectionsort Nej, då varje gång den flyttar in ett värde i rätt plats så måste den flytta ut det existerande värdet..vilket då kan leda till en flytt som bryter mot stabilitets-kriteriet. Exempel: [ 2 3 2 1 ] Quicksort Nej, då förflyttningar för att balansera värden kring pivot-elementet kan leda till förflyttningar som bryter mot stabilitets-kriteriet. Exempel: [ 3 3 3 1 2 ]

Facit Tentamen TDDC30 2014-08-29 5 (6) Praktisk del 5. (8p) Läxhögen Nu när skolan börjar dra igång på allvar har Anna börjat planera hur hon ska lägga upp sina studier. I år ska allt göras i tur och ordning, har hon bestämt. En sak i taget, ordning och reda. För att få lite struktur på det hela plockar hon fram sina programmeringsfärdigheter och sätter igång på ett litet program som ska lösa detta med hjälp av en stack! Importera Annas projekt från given_files, och hjälp henne med programmet enligt nedan. a) Anna minns något vagt om en speciell metod klasser bör ha och hur inkapsling innebär privata klassvariabler, men hon har inte riktigt hunnit fixa klart detta. Skriv klart Node-klassen åt Anna så att den är korrekt inkapslad, och uppdatera övrig kod så att den fortfarande fungerar. (3p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.) b) Några viktiga metoder saknas fortfarande i Stack-klassen. Skriv klart dessa åt Anna så att de följer specifikationen i kommentarerna. (5p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.)

Facit Tentamen TDDC30 2014-08-29 6 (6) 6. (10p) Kurskodsträdet Stefan har börjat titta på alla kurser han kommer läsa fram till sommaren, och har kommit fram till att det är rätt många att hålla reda på. Det vore bra om han kunde hitta något sätt att organisera dessa så att han inte glömmer bort något. Som en blixt från klar himmel inser han att det här är ett prima läge för lite studieflykt, och han sätter sig prompt ned och börjar skriva ett Java-program för att göra detta. Planen är ett binärt träd, där han lagrar alla kurser som strängar baserat på kurskod och namn, och låter det binära trädet sortera därefter. En nod från Stefans binära träd: Värde Importera Stefans projekt från given_files, och hjälp honom med programmet enligt nedan. a) Stefan behöver en metod för att stoppa in värden i det binära trädet. Skriv klart add-metoden enligt specifikationen i den tillhörande kommentaren. Åt vilket håll det binära trädet är sorterat väljer du själv. Att sortera strängar kan verka knepigt, men Stefan vet att i Java har strängar en compareto-metod som kan användas för att jämföra två strängar lexikografiskt. Lös den här uppgiften med hjälp av den. (6p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter.) (Ett Javadoc-utdrag om String.compareTo finns bifogat i slutet av tentamen.) b) Det vore bra om Stefan kunde kontrollera att föregående metod fungerar som den ska. Det brukar dock bli lite knepigt att kontrollera det för hand, men lite ytlig insikt kan han få genom att helt enkelt kontrollera att en ny nod stoppats in efter varje add-anrop. Till detta behöver han en size-metod. Hjälp honom skriva klart denna. Denna metod får inte använda sig av en räknevariabel i klassen som räknar antalet gånger add anropas, utan måste räkna antalet noder som faktiskt finns i trädet för att producera svaret. (4p) (Denna deluppgift kan lösas oberoende från övriga deluppgifter, men blir svårare att testa utan att ha gjort a) först.)