TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

DAI2 (TIDAL) + I2 (TKIEK)

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

Föreläsning 9 Innehåll

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

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

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

Tentamen, Algoritmer och datastrukturer

Tentamen Datastrukturer, DAT037 (DAT036)

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

Dugga Datastrukturer (DAT036)

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

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Föreläsning 9 Datastrukturer (DAT037)

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

Lösningsförslag till tentamen

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer D DAT 035/INN960

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

TENTAMEN. Objektorienterade applikationer CHALMERS. 2018/2019, lp 3 DAT055. Uno Holmer

Obligatorisk uppgift 5

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Tentamen Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 10 Datastrukturer (DAT037)

Lösningar Datastrukturer TDA

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

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen 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

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

Datastrukturer. föreläsning 3. Stacks 1

Tentamen i Algoritmer & Datastrukturer i Java

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Lösning av några vanliga rekurrensekvationer

Föreläsning 14 Innehåll

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

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

Exempeltenta GruDat 2002/2003

TENTAMEN: Objektorienterad programmering. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Föreläsning 9 Innehåll

Algoritmer och datastrukturer 2012, föreläsning 6

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

Tentamen Datastrukturer D DAT 036/INN960

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen i Algoritmer & Datastrukturer i Java

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

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

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 Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

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

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 1 Datastrukturer (DAT037)

Observera. Tentamen Programmeringsteknik II Skrivtid:

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

Föreläsning 4 Datastrukturer (DAT037)

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

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

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

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.

13 Prioritetsköer, heapar

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

Tentamen Datastrukturer D DAT 035/INN960

Tentamen i. TDDC67 Funktionell programmering och Lisp

CHALMERS TENTAMEN. 2012/2013, lp 1 DAT042. Uno Holmer. Java API (utdelas av skrivningsvakten) Erland Holmström tel besöker tentamen

Föreläsning 2 Datastrukturer (DAT037)

Länkade strukturer, parametriserade typer och undantag

Tentamen Datastrukturer D DAT 036/DIT960

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

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

Föreläsning 10 Innehåll

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning 3. Stack

Föreläsning 11 Innehåll. Diskutera. Binära sökträd Definition. Inordertraversering av binära sökträd

Transkript:

(7) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgra Börja varje uppgift på ett nytt bla Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem). Skriv rent dina svar. Oläsliga svar r ä t t a s e j! Programkod skall skrivas i Java 5 eller senare version, vara indenterad och renskriven, och i övrigt vara utformad enligt de principer som lärts ut i kursen. Onödigt komplicerade lösningar ger poängavdrag. Programkod som finns i tentamenstesen behöver ej upprepas. Givna deklarationer, parameterlistor, etc. får ej ändras, såvida inte annat sägs i uppgiften. Läs igenom tentamenstesen och förbered ev. frågor. I en uppgift som består av flera delar får du använda dig av funktioner klasser etc. från tidigare deluppgifter, även om du inte löst dessa. Lycka till!

chalmers at unoholmer.se n 2 (7) Uppgift Välj ettt svarsalternativ. Motivering krävss ej. Varje korrekt svar ger två poäng. Garderingar ger noll poäng.. Vilken teknik kan sänka vissa algoritmers tidskomplexitet med m hjälp avv extra minne? a. Divide & Conquer dynamisk programmering c. snåla algoritmer rekursion 2. Vid implementering av stackar och köer med fält eftersträvas s.k. kostnadsamortering vid omallokering av fältet, vilket kräver att det nya fältet dimensioneras så att a. storleken är en tvåpotens det är ett konstant antal element längre än det föregående c. storleken är ett primtal det är dubbelt så stortt som det föregående 3. Vilket begrepp är specielltt användbart vid analys av sortering? a. iteration klusterbildning c. rekursion inversion e. rotation 4. Vid nivåvis genomlöpning av träd används lämpligen a. en prioritetskö och iteration en FIFO-ken hashtabell och rekursion en stack och rekursion e. en stack och iteration 5. Ange minsta övre begränsningar för funktionernas tidskomplexiteter: och iteration c. public static int f(int n) { if ( n == 0 ) return 0; else { int sum = 0; for (int i = 0; i < n; i++) sum++; publicc static int f2(intt n) { if ( n == 0 ) return 0; else { int sum = 0; for (int i = 0; i < n/2; i+ ++) sum++; return sum + f(n/2); return sum + f2(n-); a. f är O(n), f2 är O(nn 2 ) f är O(n), f2 är O(nn log n) c. f är O(nn log n), f2 är O(n 2 ) Båda är O(n 2 ) e. Båda är O(n) f. Båda är O(n log n) (0 p) Version: 206-06-03 Algoritmer och datastrukturer, LET375, DAI2+I2, 5/6, lp 4 Nr 9

3 (7) Uppgift 2 Denna uppgift kan lösas i två svårighetsgrader. Lös antingen a (5 p) eller b (2 p). Du får bara poäng för en av dem. Följande typ kan användas för att representera aritmetiska uttryck som binära trä Uttrycken kan innehålla variabler, heltalskonstanter, samt operatorerna + och *: public class Expression { private char variable; private int constant; private char operator; private enum Type { VARIABLE,CONSTANT,PLUS,MULT private Type t; private Expression left,right; // The operands public Expression(char variable) { // Variable leaf this.variable = variable; t = Type.VARIABLE; this.left = this.right = null; public Expression(int constant) { // Constant leaf this.constant = constant; t = Type.CONSTANT; this.left = this.right = null; // Operator node public Expression(char operator,expression left,expression right) { this.operator = operator; if ( operator == '+' ) t = Type.PLUS; else if ( operator == '*' ) t = Type.MULT; else throw new IllegalArgumentException("Unsupported operator: " + operator); this.left = left; this.right = right; public boolean isvar() { return t == Type.VARIABLE; public boolean isconst() { return t == Type.CONSTANT; public boolean isplus() { return t == Type.PLUS; public boolean ismult() { return t == Type.MULT; public char getvar() { return variable; public int getconst() { return constant ; public char getop() { return operator; public Expression getleft() { return left; public Expression getright() { return right; Exempel: Uttrycket ((*(x+y))+(z*0)) kan representeras med trädet + * * + z 0 x y forts.

4 (7) och med typen Expression: Expression e = new Expression('+', new Expression('*', new Expression(), new Expression('+', new Expression('x'), new Expression('y') ) ), new Expression('*', new Expression('z'), new Expression(0) ) ) Lös antingen a eller Du får bara poäng för en av dem. a) Konstruera en rekursiv tostring-metod för klassen Expression. T.ex. skall e.tostring() returnera strängen ((*(x+y))+(z*0)) b) Uttrycket i a kan förenklas till (x+y) genom att använda de algebraiska lagarna x + 0 = x 0 + x = x x * = x * x = x x * 0 = 0 0 * x = 0 Konstruera metoden public static Expression simplify(expression e) som rekursivt förenklar uttrycksträd genom att tillämpa lagarna ovan. Variabler, konstanter samt null förenklas förstås till sig själva. Om båda operanderna är konstanter skall uttrycket förenklas till sitt numeriska värde. Ex. förenklas 3+2 till 5 och 7*4 till 28. (5 p) Ex. (simplify(e)).tostring() skall returnera strängen (x+y). (2 p) Uppgift 3 a) Rita den binära högen både som träd och som fält efter insättningssekvensen 0,20,5,5,8, 22,9,6,8 i en tom hög. Operationen insert avses. b) Om man istället placerar talen 0,20,5,5,8,22,9,6,8 (i denna ordning) i fältet i a och sedan utför operationen buildheap, kommer då den resulterande högen att se exakt likadan ut? Om du anser det så ge ett övertygande argument, om inte visa hur högen kommer att se ut.

5 (7) Uppgift 4 a) Rita trädet som fås efter insättningssekvensen 30,60,40,70,20,25,5,26 i ett tomt AVL-trä (Slutresultatet efterfrågas, men det kan vara bra att ta med ev. rotationssteg för att underlätta rättningen.) b) Ange inorder, preorder samt postorder genomlöpningar av trädet: A B C D E F G H I J K L Uppgift 5 a) Vilken datastruktur spelar en avgörande roll i en effektiv implementering av Dijkstras algoritm? Rita dessutom en graf för vilken Dijkstras algoritm inte går att tillämpa. (2 p) b) Ange alla möjliga topologiska ordningar av noderna i grafen (som är korrekt ritad): C B A E (5 p) c) Ange med ett ordouttryck en minsta övre begränsning för hur många topologiska ordningar det kan finnas för en graf med N noder. Tips: Grafen i b innehåller en ledtrå ( p) D

chalmers at unoholmer.se n 6 (7) Uppgift 6 I hashtabellen nedan tillämpass kvadratiskk sondering för kollisionshantering. Hashfunktionen är hash(x) = x mod M, där M är tabellstorlekt ken. a) Utför sekvensen insert(9); insert(24); remove(9); insert(2); remove(24); insert(3); insert(0); remove(0); i en hashtabell med platser och visa med en figur hur resultatet blir. (4 p) b) Med utgångspunkt från resultatet i a, visa tabellens utseendee efter insert(3); och omhashning. Den nya tabellen skall dimensioneras i enlighet med principen för fältdubblering, men tänk efter noga vad denna storlek skall vara v i det här fallet. (4 p) Uppgift 7 Ett bevattningssystem för växter skall byggas av slangar av olika dimensioner, samt förgrenings- så kopplingar, s.k. Y-rör (eng. split). Precis som vid brandsläckning bör systemet dimensioneras att de tunnare slangarna leds till växterna med låg vattenförbrukning och dee grövre slangarna till de med hög förbrukning. Dessutom är dett fördelaktigt att placera storförbrukarna nära vattenkällan och småförbrukarna längre bort. Nedan presenterass några växter med sina förväntade vattenförbrukningar i liter per vecka: 3 5 6 7 8 22 Om vi tänker oss en liten anläggning medd ett exemplar av varje av varje växt så finns ett optimaltt sätt att konfigurera slangar och kopplingar: 3 5 6 7 8 2 Detta liknar principen naturenn använder för att dimensionera och förgrena kärl i växterr och djur. forts. Version: 206-06-03 Algoritmer och datastrukturer, LET375, DAI2+I2, 5/6, lp 4 Nr 9

7 (7) Uppgiften är att konstruera en algoritm som givet vattenbehoven för ett antal växter kan skapa ett nätverk av ovanstående typ. Till vår hjälp finns klasserna: public abstract class Consumer implements Comparable<Consumer> { public abstract int getdemand(); public int compareto(consumer other) { if ( getdemand() < other.getdemand() ) return -; else if ( getdemand() > other.getdemand() ) return ; else return 0; public class Plant extends Consumer { private int demand; public Plant(int demand) { this.demand = demand; public int getdemand() { return demand; public class Split extends Consumer { // Y-rör private Consumer left,right; public Split(Consumer left,consumer right) { this.left = left; this.right = right; public int getdemand() { return left.getdemand() + right.getdemand(); Uppgift: Konstruera metoden public static Consumer computenetwork(collection<integer> demands) som givet en lista av vattenförbrukningar för ett antal växter skapar och returnerar ett förgreningsnät av samma typ som visas i exemplet ovan. Om listan är null eller tom skall undantaget IllegalArgumentException kastas. Använd en lämplig datastruktur i algoritmen. Metoden skall alltså returnera roten till trädet, vilket motsvarar ingången på det största Y-röret längst ner i figuren på förra sidan. (0 p)