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

Relevanta dokument
Facit Tentamen TDDC (7)

Facit Tentamen TDDC kl (6)

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

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

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

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

Tentamen Datastrukturer (DAT037)

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

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

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 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning 2 Datastrukturer (DAT037)

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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

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

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

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

Datastrukturer. föreläsning 3. Stacks 1

Tentamen i Algoritmer & Datastrukturer i Java

if (n==null) { return null; } else { return new Node(n.data, copy(n.next));

Tentamen Datastrukturer (DAT036)

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

Föreläsning 9 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037)

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

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

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Trädstrukturer och grafer

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

Tentamen TEN1 HI

Länkade strukturer, parametriserade typer och undantag

Föreläsning 14 Innehåll

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 11 Datastrukturer (DAT037)

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

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

13 Prioritetsköer, heapar

TDDC30 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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 9 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.

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

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

Tentamen Datastrukturer (DAT036)

Algoritmer och datastrukturer 2012, föreläsning 6

TDDC30 Programmering i Java, datastrukturer och algoritmer

Träd Hierarkiska strukturer

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

Föreläsning REPETITION & EXTENTA

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 7. Träd och binära sökträd

Föreläsning 7. Träd och binära sökträd

Tentamen, Algoritmer och datastrukturer

Tentamen kl Uppgift 4. Uppgift 5

Föreläsning Datastrukturer (DAT036)

Seminarium 13 Innehåll

Kurskod D0010E Datum Skrivtid 5tim

Föreläsning 9 Innehåll

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

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

Sätt att skriva ut binärträd

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 4 Innehåll

Föreläsning 2. Länkad lista och iterator

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen Datastrukturer D DAT 035/INN960

Lösningsförslag till exempeltenta 1

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

::= HIHI HIHIHI ::= HAHA HAHAHA

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 12. Länkade listor

Transkript:

Facit Tentamen TDDC30 2015-03-19 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Varför väljer man ofta synligheten private hellre än public för medlemsvariabler i en klass? (1p) Svar:Genom att dölja undan medlemsvariabler med private så kan den som använder objekt av den här klassen inte komma åt de här variablerna längre. De kan nu bara ändras av klassens egna metoder, och det här innebär att programmeraren som skriver klassen fritt kan ställa krav och förväntningar på de här medlemsvariablernas innehåll, eftersom det bara är klassen själv som kan läsa och ändra dessa. Det finns då ingen risk för störningar utifrån i de här medlemsvariablerna. b) Vad är syftet med undantag/exceptions? (1p) Svar:Att kunna signalera när något har gått fel och vad som har gått fel, samt kunna bolla vidare ansvaret till rätt nivå av programmet, dvs. rätt nivå i metodanropskedjan. c) Vad innebär det att en metod är abstract? (1p) Svar:Att en metod med exakt det utseendet ska finnas, och måste definieras i någon underklass till klassen ifråga. Själva koden för metoden, hur den är implementerad, kan inte anges i den abstrakta definitionen, och det är den delen som definieras i en underklass för att göra klassen komplett. Om Animal har den abstrakta metoden abstract void introduceyourself();, så måste t.ex. underklassen Cat definiera en void introduceyourself() {-metod, komplett med implementation, för att vara en komplett klass som går att instantiera objekt från. d) I Animal myanimal = new Animal() sker två separata saker. Vad innebär Animal myanimal och vad innebär new Animal()? (1p) 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. e) Vad innebär det att abstrahera i ett programmeringsperspektiv? (1p) Svar:Att abstrahera innebär att man bortser från vissa detaljer för att istället fokusera på det övergripande, det som är viktigt. Målet är att få en bättre överblick utan att bli distraherad av oviktiga detaljer. Ett exempel är ADT'er, där man bortser från implementationsdetaljer och bara fokuserar på de operationer och den övergripande datastrukturen som ADT'n representerar. f) Varför kan man inte anse att en viss sorteringsalgoritm är 'bäst'? (1p) Svar:Vilken sorteringsalgoritm som är bäst lämpad beror ofta på situationen. Exempelvis kan en shakersort vara mer effektiv än en shellsort om man sorterar data lagrad på en bandstation, där söktiden mellan olika index är större ju större avståndet mellan de index som söks mellan är.

Facit Tentamen TDDC30 2015-03-19 kl 08-12 2 (6) 2. (6p) "Datastrukturer" a) Värdena 2 8 9 4 6 1 3 5 7 ligger i en fullständig maxheap. Rita upp hur heapen ser ut och hur värdena ligger i den. (2p) Svar:Obs: Det finns andra korrekta svar. 9 58 57 6 5 4 3 2 1 b) Organisera om siffrorna i trädet nedan så att trädet utgör ett binärt sökträd. (2p) ( Organisera om siffrorna innebär att pilarna och noderna förblir på samma plats, endast siffrorna får byta plats i bilden.) 9 52 57 4 1 3 6 5 8 Svar:Obs: Det finns andra korrekta svar. 4 51 56 3 5 8 2 7 9 c) Ange i vilken ordning noderna i trädet från b) besöks av en preorder-, postorder-, levelorderoch inorder-traversering. (2p) Svar:Preorder-traversering: 9 2 4 6 7 1 3 5 8 Postorder-traversering: 6 4 2 1 5 8 3 7 9 Levelorder-traversering: 9 2 7 4 1 3 6 5 8 Inorder-traversering: 2 6 4 9 1 7 5 3 8

Facit Tentamen TDDC30 2015-03-19 kl 08-12 3 (6) 3. (6p) "Tidskomplexitet" a) Rangordna tillväxten, från långsammast tillväxt(bäst) till snabbast tillväxt(sämst), hos tidskomplexiteterna O(1), O(n ⁵ ), O(nlog(n)), O(5n), O(8n²), O(n), O(2). (2p) Svar:O(1), O(2), O(n), O(5n), O(nlog(n)), O(8n²), O(n ⁵) b) Ange tidskomplexiteten i värsta fallet, med avseende på n, för följande metoder. (n är alltid ett positivt heltal.) (2p) int zap(int n) { return n*n; int count(int n) { int sum = 0; if (n > 5) { for (int i = 0; i < n; ++i) { sum += zap(i); else { sum = zap(n); return sum; void bip(int n) { for (int i = 0; i < 5; i = i+1) { System.out.println(n); Svar:zap) O(1) count) O(n) bip) O(1) c) Förenkla följande tre uttryck för tidskomplexitet: (2p) Svar: 1) O(5n² + n + 10) O(7n) => O(n³) 2) O(25n) O(25log(n)) => O(nlog(n)) 3) O(2n) + O(3n) => O(n)

Facit Tentamen TDDC30 2015-03-19 kl 08-12 4 (6) 4. (6p) "Algoritmer" a) Sortera värdena [ 7 2 1 2 4 6 5 ] med bubblesort. 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:[ 7 2 1 2 4 6 5 ] [ 7 2 1 2 4 5 6 ] [ 7 1 2 2 4 5 6 ] [ 1 7 2 2 4 5 6 ] [ 1 2 7 2 4 5 6 ] [ 1 2 2 7 4 5 6 ] [ 1 2 2 4 7 5 6 ] [ 1 2 2 4 5 7 6 ] [ 1 2 2 4 5 6 7 ] b) Sortera värdena [ 3 4 9 1 7 8 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. Välj alltid det högraste värdet inom intervallet som pivot-element. (2p) Svar:[ 3 4 9 1 7 8 6 2 5 ] [ 3 4 2 1 7 8 6 9 5 ] [ 3 4 2 1 5 8 6 9 7 ] [ 1 4 2 3 5 8 6 9 7 ] [ 1 2 4 3 5 8 6 9 7 ] [ 1 2 3 4 5 8 6 9 7 ] [ 1 2 3 4 5 6 8 9 7 ] [ 1 2 3 4 5 6 7 9 8 ] [ 1 2 3 4 5 6 7 9 8 ] c) Vad innebär det att en sorteringsalgoritm är stabil? Illustrera med ett exempel på en sorteringsalgoritm som kan implementeras stabil, och ett på en som inte kan implementeras stabil, med förklaring om varför dessa kan/inte kan implementeras stabila. (2p) Svar:Att en sorteringsalgoritm är stabil innebär att den inte byter inbördes ordning mellan två värden av samma storlek under sorteringens gång. Bubblesort Kan implementeras stabil. Se svaret till 4a ovan, hur den andra 2'an inte kan byta inbördes ordning med den första 2'an om sorteringen stannar redan vid lika värden. Quicksort Kan ej implementeras stabil. Ett exempel likt det i 4b ovan: [ 3 4 2 1 7 5 6 5 5 ] Här byter den sista 5'an inbördes ordning med övriga 5'or.

Facit Tentamen TDDC30 2015-03-19 kl 08-12 5 (6) Praktisk del 5. (8p) Att räkna löv Anna arbetar med ett binärt sökträd, och har kommit så långt att hon har de flesta metoderna, bland annat add(..) och size(..). Det finns dock mer att göra och Anna har inte riktigt tid att ta tag i allt just nu, så hon har lejt in er i ett par timmar. En nod från Annas binära träd: Värde Importera Annas projekt från given_files, och hjälp henne med programmet enligt nedan. a) För att kontrollera sin implementation vill Anna lägga till en getleaves-metod, som helt enkelt returnerar en lista på alla löv i trädet, i godtycklig ordning men utan dubletter. Hjälp Anna genom att skriva klart leaves-metoden enligt dess dokumentation i koden. (6p) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 6b. Anna vill att hennes färdiga träd följer ett gränssnitt. Hon har redan skrivit gränssnittet i filen AnnasTreeInterface, men hennes kod använder inte gränssnittet än, och måste nog anpassas lite för att göra det. Uppdatera Annas träd så att det använder gränssnittet. (2p)

Facit Tentamen TDDC30 2015-03-19 kl 08-12 6 (6) 6. (10p) Den öde ön Stefan har blivit inspirerad av alla rika kändisar som på senare tid köpt sig sina egna privata öar. Det vore allt bra kul att äga sin egen öde ö, nånstans att relaxa på beachen med lite kokosnötter och sol. Problemet är bara att en öde ö är ganska dyr, 3.2 miljoner för den ö Stefan har ögonen på, så det vill till att Stefan börjar spara redan nu. Stefan antar att han kan investera sina besparingar på börsen för 7% avkastning i medel, och för att förenkla det hela antar han också att han måste skatta 0.27% på det totala beloppet och kompensera för en inflation på 1%, alla dessa per år. För att kunna experimentera med olika sparbelopp så börjar Stefan knappa på en liten dator-simulation i Java. Han tänker använda en dubbellänkad lista för att lagra beloppen han sparar samt den avkastning han får, och köra på med sin simulation tills han sparat ihop till sin ö! Importera Stefans projekt från given_files, och hjälp honom med programmet enligt nedan. a) Stefan vet ungefär hur strukturen kommer se ut, varje nod kommer ha en referens till föregående och nästa nod, och om inga sådana finns blir dessa referenser null. Listan kommer också hålla reda på vilken nod som ligger först och sist. Dock har han inte riktigt hunnit skriva klart addfirst(...) och addlast(...)-metoderna. Hjälp honom skriva klart dessa så att de bygger en korrekt dubbellänkad lista. (6p) b) Obs: Har du har bonus på labb 3 och 4 tillgodoräknas du deluppgift 5b och 6b. Den här koden blir nog bra, fast Stefan inser att det vore bra om han kunde vara lite mer konsekvent i sin kodstruktur. För att åstadkomma detta så skriver han ihop UML-diagrammen nedan, som representerar hur han helst skulle vilja att hans dubbellänkade lista samt nod såg ut. Konvertera Stefans dubbellänkade lista så att den följer UML-diagrammen till punkt och pricka. (4p) DoublyLinkedList - Node first - Node last + void addfirst(...) + void addlast(...) + int size() + boolean isempty() + double sum() Node - double data ~ Node next ~ Node prev # Node(...) + double getdata() + Node getnext() + Node getprev()