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



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

TDDC30 Programmering i Java, datastrukturer och algoritmer

TDDC30 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

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

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

TDDC30 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

Tentamen Datastrukturer för D2 DAT 035

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

Teoretisk del. Facit Tentamen TDDC (6)

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

TDDC Terminologi Uppdaterad Fö #1

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

Facit Tentamen TDDC kl (6)

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

Facit Tentamen TDDC (7)

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 TEN1 HI

Föreläsning 14 Innehåll

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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

Tentamen TEN1 HI

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen Datastrukturer D DAT 035/INN960

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

Tentamen kl Uppgift 4. Uppgift 5

Tentamen i Algoritmer & Datastrukturer i Java

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

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Seminarium 13 Innehåll

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på layout, ett GUI-baserat program Frågor

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

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

Föreläsning 2 Datastrukturer (DAT037)

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

Träd Hierarkiska strukturer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer (DAT037)

Föreläsning 13 Innehåll

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

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

Föreläsning 4 Datastrukturer (DAT037)

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

DAI2 (TIDAL) + I2 (TKIEK)

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

Föreläsning Datastrukturer (DAT036)

Tentamen, Algoritmer och datastrukturer

Programmering II (ID1019) :00-17:00

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

13 Prioritetsköer, heapar

Datastrukturer och algoritmer

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

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

Tentamen Datastrukturer D DAT 036/DIT960

Föreläsning 9 Innehåll

Exempeltenta GruDat 2002/2003

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

Programmering II (ID1019) :00-11:00

Datastrukturer i Haskell

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

Föreläsning 1 Datastrukturer (DAT037)

Algoritmer och datastrukturer 2012, fo rela sning 8

Fredag 10 juni 2016 kl 8 12

Föreläsning 3 Datastrukturer (DAT037)

DD1321, Tentamen i tillämpad programmering och datalogi Lördagen den 18 dexember 2010 kl 13 18

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)

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

Programmering II (ID1019) :00-12:00

Tentamen Datastrukturer (DAT036)

TDIU01 / 725G

Tentamen Datastrukturer D DAT 036/INN960

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

Datastrukturer. föreläsning 3. Stacks 1

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

Introduktionsmöte Innehåll

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

Föreläsning 3 Datastrukturer (DAT037)

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! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Föreläsning Datastrukturer (DAT037)

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

Tildatenta Lösningsskiss

Transkript:

Tentamen i... TDDC30/725G63 Objektorienterad programmering i Java, datastrukturer och algoritmer Datum 2011-12-19 Tid 14-18 Provkod DAT1 Institution Institutionen för Datavetenskap (IDA) Jour Johan Janzén tel. 282490 Kursadministratör Helene Meisinger Antal uppgifter 8 Maximalt antal poäng 39 Preliminära betygsgränser U: 0-19 poäng 3: 20-27 poäng 4: 28-32 poäng 5: 33-39 poäng Anvisningar: Omotiverade svar ger noll poäng! Tentamen består av två delar: en teoretisk och en praktisk. Den teoretiska delen löses med papper och penna som en traditionell tentamen och lämnas in till tentavakt när du avslutar tentan Börja varje uppgift på nytt papper skriv namn och personnummer på varje inlämnat blad Den praktiska delen löses på datorn anvisad vid tentamenstillfället. Efter tentamen lämnas alla filer som ska examineras kvar på kontot Frågor angående tentan kan ställas via studentklienten. Notera dock att detta inte är en grundkurs i programmering, somliga saker förväntas du kunna.

Teoretisk del Denna del ska lösas med penna och papper. Vid tentamens slut lämnas denna del in till tentamensvakterna. Glöm inte att motivera dina svar! Uppgift 1 (3p) Ge ett kort svar på följande frågor: a) Vad är skillnaden mellan en abstrakt datatyp och dess implementation? b) Vad innebär det att en algoritm har rumskomplexiteten O(n)? c) Vad är skillnaden mellan ett perfekt och ett fullständigt binärt träd? d) Quicksort är en icke-stabil sorteringsalgoritm. Vad innebär det? e) Förklara mycket kort termen överskuggning f) Program skrivna i Java anses vara plattformsoberoende. Varför då? Uppgift 2 (4p) a) Sätt in nedanstående sekvens tal i ett binärt sökträd. Rita upp det färdiga trädet (2p) b) Traversera igenom trädet postorder och levelorder. Skriv ut nodens siffra vid besök (1p) c) Nämn två saker som visar att detta träd inte är en heap (1p) 27 39 54 83 15 17 32 16 22 Uppgift 3 (3p) Du visar upp din implementation av en sorteringsalgoritm (Mergesort) för en bekant och berättar att den är optimal. Hon visar i sin tur upp sin lösning. Ni jämför era program genom att sortera olika stora mängder tal och inser snart att din bekantas lösning alltid är ungefär dubbelt så snabb. Hon ser nöjd ut och anser att att din lösning ju inte alls var optimal, hennes var ju bättre. Har hon rätt? Använd vad du lärt dig om algoritmanalys och förklara för din bekanta.

Uppgift 4 (5p) En riktigt gammal dator ska sortera en stor mängd tal som är sparade sekventiellt på ett magnetiskt band. På grund av bandets fysiska egenskaper går det snabbt att jämföra tal som är sparade nära varandra i sekvensen, men mycket långsamt att jämföra tal som är sparade långt ifrån varandra (bandet måste spolas fram/tillbaka). Datorn har dessutom mycket begränsat arbetsminne. Den har bara plats för en extra temporär variabel. a) Vad är den asymptotiska tidskomplexiteten för att jämföra och sedan byta plats på två tal på ett band? Uppge både bästa och värsta fall. (1p) b) Nämn en sorteringsalgoritm som skulle vara olämplig för uppgiften. Motivera. (1p) c) Vilken sorteringsalgoritm skulle du implementera för att utföra denna uppgift? Motivera (2p) d) Vad är den asymptotiska tidskomplexiteten för att sortera talen på denna maskin med de två algoritmerna i b och c? (1p) Uppgift 5 (3p) Sök fram det 4:e minsta elementet ur sekvensen av tal nedan genom att använda quickselect. Välj det vänstra talet som pivot. Beskriv varje steg. 15 62 31 89 50 27 23 42 86 Uppgift 6 (5p) Rita ett klassdiagram av följande beskrivning. Om du behöver göra några antaganden, skriv ned dessa. En Bank består av ett antal Konton. Det finns tre typer av konton; Kreditkonto, Sparkonto och Lönekonto. Varje konto är associerad till en eller två Personer. En person kan dock ha hur många konton han/hon vill. Man kan utföra samma tre operationer på dessa konton. Dessa är deposit(), withdraw() och checkbalance(). deposit() och withdraw() implementeras dock olika för varje kontotyp, till exempel utgår en avgift för varje uttag från sparkontot. De tre nämna operationerna är säkerhetsskyddade (package private) och kan ändast kommas åt via en Bankomat. Varje bankomat har en referens till varje konto. En person är associerad med sina konton, men är dessutom beroende av en bankomat för att utföra sina bankärenden. Alla konton sparar hur mycket pengar som finns på kontot. Denna siffra är dock att betrakta som privat. Sparkontot har även en inlåningsränta. Denna ränta är publik och är gemensam för alla sparkonton.

Praktisk del Följande uppgifter ska lösas på dator. Skapa ett nytt projekt för varje uppgift. Om det inte är uttryckligen angivet annorlunda i uppgiften får du endast använda den del av Javas standardbibliotek som finns i java.lang. Om du inte kan lösa uppgiften, gör en lämplig förenkling och lös den istället. Skriv ned i källkoden vilka förenklingar du gjort. Poäng ges efter hur pass nära din lösning är att lösa den givna uppgiften. Även icke fungerande kod kan ge poäng om den visar på viss förståelse. Uppgift 7 (7p) Du har i denna uppgift tillåtelse att använda klassen java.util.linkedlist från standardbiblioteket. Lilla Emma skriver på sin önskelista inför julen. Hon inser när hon är klar att hon nog inte kan få allt hon skrivit upp. Det gäller att prioritera... a) Definiera ett gränssnitt PriorityQueue som innehåller metoderna add(int priority, String element), removemin(), size() och empty(). Implementera sedan gränssnittet i en klass med en osorterad länkad lista som datastruktur. Du får, om du vill, skapa hjälpklasser.(3p) b) Definiera ett nytt gränssnitt Queue, som innehåller följande metoder: enqueue(string element), dequeue(), size() och empty(). Modifiera din klass från a) så att den implementerar även detta gränssnitt.(2p) c) Skriv ett litet huvudprogram som demonstrerar att din klass fungerar. Visa med datatyper att din klass kan vara både en prioritetskö och en kö. (2p)

Uppgift 8 (10p) Du har i denna uppgift tillåtelse att använda lämplig del av javas standardbibliotek för att slumpa fram tal. Gustav från Skåne har ont om granar i sin närhet. För julefridens skull försöker han beställa ett träd från Kina (på postorder såklart). Som alla vet är allting upp och ned på andra sidan jorden så trädet han beställde blev naturligtvis felvänt, med roten högst upp. Så kan vi inte ha det, proklamerade Gustav. a) Implementera ett generiskt binärt sökträd med nodstruktur. Implementerna metoderna insert(e element) och removeroot() för trädet. (5p) Gustav har en plan. Han ska klippa ned grenarna en efter en och lägga dem på hög. Hans plan är att sedan limma fast dem i omvänd ordning. Gustav gör sig redo genom att förbereda en plats för sin hög. b) Implementera en generisk stack med metoderna push(e element), pop() och size(). Du får välja vilken intern representation stacken ska ha. (3p) Tyvärr är det långt till Skåne från Kina, barren har torkat och faller av trädet i en stor hög på golvet framför (stackars...) Gustav. c) Skriv ett program som simulerar skeendet ovan: 1. Skapa en klass som representerar ett barr. Ett barr har ett enda attribut, dess längd, som vid instantieringen SLUMPAS till ett tal mellan 0.52 och 3.1 inklusivt. 2. Lägg in 500 barr i ditt sökträd. Noderna ska sorteras efter barrens längd. 3. Flytta alla barr från sökträdet till en stack m h a removeroot() och push(). 4. Avsluta med att låta programmet skriva ut hur många barr som finns i stacken (m h a size()). (2p) Epilog: Gustav är nöjd ändå. Allt som behövs till jul är ju gott sällskap. Och en kopp java, förstås. Lycka till!