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

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

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.

Föreläsning Datastrukturer (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Algoritmer och datastrukturer 2012, fo rela sning 8

Tentamen Datastrukturer (DAT037)

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

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen, Algoritmer och datastrukturer

Dugga Datastrukturer (DAT036)

13 Prioritetsköer, heapar

Tentamen Datastrukturer för D2 DAT 035

Binära sökträd. Seminarium 9 Binära sökträd Innehåll. Traversering av binära sökträd. Binära sökträd Definition. Exempel på vad du ska kunna

Algoritmer och datastrukturer 2012, föreläsning 6

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

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

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 14 Innehåll

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningar Datastrukturer TDA

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 9 Innehåll

Föreläsning 4 Datastrukturer (DAT037)

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

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

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen 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å

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

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

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

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

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Algoritmer och datastrukturer

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

Datastrukturer. föreläsning 10. Maps 1

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

Självbalanserande AVL-träd Weiss, avsnitt 4.4

Tentamen Datastrukturer (DAT036)

Lösningsförslag till exempeltenta 1

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.

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

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

Föreläsning 10 Datastrukturer (DAT037)

Exempeltenta GruDat 2002/2003

Lösningsförslag till tentamen

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/INN960

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

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

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

Föreläsning Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-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)

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Tentamen TEN1 HI

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

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

Föreläsning 2 Datastrukturer (DAT037)

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

Föreläsning 13 Datastrukturer (DAT037)

Sökning och sortering

Tentamen kl Uppgift 4. Uppgift 5

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Tentamen i Algoritmer & Datastrukturer i Java

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning 6 Datastrukturer (DAT037)

Länkade strukturer, parametriserade typer och undantag

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

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

Algoritmer, datastrukturer och komplexitet

Föreläsning 13 Datastrukturer (DAT037)

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

Föreläsning 2 Datastrukturer (DAT037)

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

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.

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

Transkript:

1 (10) TENTMEN: lgoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. örja varje uppgift på ett nytt blad. Ordna bladen i uppgiftsordning. 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! Programmen skall skrivas i Java 5 eller senare version, vara indenterade och renskrivna, och i övrigt vara utformade 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!

2 (10) Uppgift 1 Välj ett svarsalternativ på frågorna 2-5. Motivering krävs ej. Varje korrekt svar ger två poäng. Garderingar ger noll poäng. 1. Visa implementeringsrelationer mellan DT:er och datastrukturer genom att dra streck mellan begreppen nedan. För poäng krävs att alla relevanta streck ritas ut, men inga irrelevanta. Det bör bli nio eller tio streck, beroende på hur en av strukturerna implementeras. (Svara på separat blad, ej i tesen.) oordnad mängd prioritetskö ordnad mängd hashtabell binär hög fält FIFO-kö stack länkad lista binärt sökträd 2. ntag att en referensvariabel (pekare) kan lagras med 2 bitar, och ett SII-tecken med 8 bitar. Vilket genomsnittligt minnesutnyttjande får man då följande lagringsformer används för att lagra sekvenser av SII-tecken (1 = 100%)?. fält med fältdubblering. enkellänkad lista. binärt träd. a. 7/8, 1/8, 1/10 b. /4, 1/6, 1/8 c. 1/2, 1/4, 1/6 d. /4, 1/5, 1/9. Sorteringsalgoritmer som endast kan jämföra två element i taget har för genomsnittliga indata tidskomplexiteten a. O(n log n) b. Ω(n log n) c. O(n 2 ) d. Ω (n 2 ) forts. på nästa sida ->

(10) 4. Vi söker minsta övre begränsningar för lösningarna till ekvationerna -E. Kombinera ordouttrycken 1-5 med respektive ekvation. T(0) = 0 T(n) = 2T(n-1) + 1 (n > 0) T(0) = 0 T(n) = T(n-1) + n (n > 0) T(1) = 1 T(n) = 2T(n/2) + n (n > 1) D T(1) = 1 T(n) = 2T(n/2) + 1 (n > 1) E T(1) = 1 T(n) = T(n/2) + n (n > 1) 1: O(log N) 2: O(N) : O(N log N) 4: O(N 2 ) 5: O(2 N ) a. -2, -5, -4, D-, E- b. -5, -5, -, D-, E-2 c. -5, -4, -, D-2, E-2 d. -5, -4, -, D-, E-1 forts. på nästa sida ->

4 (10) 5. Metoden countleafs skall räkna antalet löv i ett binärt träd. En av metoderna är korrekt implementerad, vilken? public class TreeNode { int element; TreeNode left,right; public static int countleafs1(treenode t) { if ( t.left == null && t.right == null ){ return 1; else return countleafs1(t.left) + countleafs1(t.right); public static int countleafs2(treenode t) { if ( t == null ) return 0; else if ( t.left == null && t.right == null ){ return 1; else if (t.left!= null ) return countleafs2(t.left); else return countleafs2(t.right); public static int countleafs(treenode t) { if ( t == null ) return 0; else if ( t.left == null && t.right == null ){ return 1; else return countleafs(t.left) + countleafs(t.right); public static int countleafs4(treenode t) { if ( t.left == null && t.right == null ){ return 1; else if (t.left!= null ) return countleafs4(t.left); else if (t.right!= null ) return countleafs4(t.right); else return countleafs4(t.left) + countleafs4(t.right); public static int countleafs5(treenode t) { if ( t.left == null && t.right == null ){ return 1; else if (t.left!= null ) return countleafs5(t.left); else if (t.right!= null ) return countleafs5(t.right); a. countleafs1 b. countleafs2 c. countleafs d. countleafs4 e. countleafs5 (10 p)

5 (10) Uppgift 2 Följande typ kan användas för att representera noder i ett binärt träd. public class TreeNode { int element; TreeNode left; TreeNode right; Här följer några sådana träd D 1 1 2 2 6 7 6 7 4 5 6 7 5 6 8 9 8 9 8 9 a) Skriv en rekursiv funktion som avgör om ett träd matchar ett annat träd. Ett tomt träd matchar alla träd men inga icketomma träd matchar ett tomt träd. En nod matchar en annan nod om de har samma innehåll. För att t1 skall matcha t2 krävs att varje nod i t1 matchar en nod i motsvarande position i t2. public static boolean matches(treenode t1,treenode t2) Ex. matches(null,) -> true matches(null,null) -> true matches(,null) -> false matches(,) -> true matches(,) -> true matches(,) -> false matches(,) -> false matches(d,) -> false matches(d,) -> true (5 p) b) Skriv en rekursiv funktion som avgör om ett träd innehåller ett annat träd. lla träd innehåller det tomma trädet och ett tomt träd innehåller inga icketomma träd. t1 innehåller t2 om t2 matchar t1, eller något delträd i t1. public static boolean contains(treenode t1,treenode t2) Ex. contains(,null) -> true contains(null,null) -> true contains(null,) -> false contains(,) -> true contains(,) -> true contains(,) -> false contains(,) -> true contains(,d) -> true contains(,) -> false contains(,d) -> false contains(,d) -> true (5 p)

6 (10) Uppgift a) På vilka platser kan ett element sättas in i sökträdet nedan utan att bryta mot VL-villkoret? nge i samtliga fall inom vilket intervall detta element måste ligga. 48 5 21 40 51 5 b) Visa hur VL-trädet nedan ser ut efter insättning av 0 och lämplig VL-rotation. ( p) 11 8 22 2 15 29 26 2 ( p) Uppgift 4 a) Kan ett och samma binära träd med minst två noder vara både en binär hög (minhög) och ett binärt sökträd? Ge ett exempel på ett sådant träd, eller om det är omöjligt förklara varför? ( p) b) Vilket har garanterat lägst tidskomplexitet vid insättning av N element i en binär hög? tt sätta in elementen ett och ett med operationen insert, eller att lägga in elementen i fältet och därefter anropa buildheap? Motivera! ( p) c) Kommer elementen i en icketom binär hög h alltid att finnas på samma platser före och efter följande operationssekvens? Varför i så fall? Om inte, ge ett motexempel! x = h.deletemin(); h.add(x); (2 p)

7 (10) Uppgift 5 En idrottsförening har konstruerat ett javaprogram för att hantera sitt medlemsregister. I programmet används följande klass för att representera medlemmar (här något förenklad): public class Member { private int id; // medlemsnumret private String name; private String email; public Member(int id,string name,string email) { this.id = id; this.name = name; this.email = email; public boolean equals(object other) { if ( this == other ) return true; if ( other instanceof Member ) { Member m = (Member)other; return id == m.id; return false; public int hashode() { return id; Medlemsobjekten lagras i en hashtabell av samma typ som i kursboken. Kollisionshanteringen i tabellen sker med kvadratisk sondering, men klubbmedlemmarna är lite oeniga om hur man skall implementera operationen remove. Optimisterna tycker att tabellpositioner för borttagna element kan återanvändas för nya insättningar, medan pessimisterna menar att det är säkrast att låta dessa positioner vara spärrade för insättningar tills tabellen hashas om till dubbel storlek. Hashfunktionen definieras public int hash(member m,int tablesize) { return m.hashode() % tablesize; ntag att följande medlemsobjekt skapats: Member nisse = new Member(28, Nisse Hult, nisse@hult.se ); Member lisa = new Member(, Lisa Nilsson,lisa@nilsson.no ); Member kalle = new Member(15, Kalle Modin, kalle@modin.dk ); Member sven = new Member(2, Sven Eklund,sven@eklund.se ); Member malin = new Member(15, Malin randin, malin@brandin.fi ); Visa med en figur hur en initialt tom hashtabell med 1 platser ser ut efter sekvensen nedan om man tillåter insättning av nya element på platser där element tagits bort. add(nisse); add(lisa); add(kalle); add(sven); remove(nisse); add(malin); Fungerar tabellen som den skall eller kan problem uppstå? Motivera! (5 p)

8 (10) Uppgift 6 a) nge för var och en av graferna g1 g4 alla möjliga topologiska ordningar av noderna. g1 g2 g g4 D E D D (4 p) etrakta grafen 1 4 2 8 D 1 E 4 F 7 5 G 2 b) nge en möjlig besöksordning till noderna vid bestämning av de kortaste oviktade avstånden från D till alla övriga noder. (2 p) c) I vilken ordning besöks noderna i Dijkstras algoritm vid bestämning av de kortaste viktade avstånden från D till alla övriga noder? (2 p) d) Ge ett exempel på en graf där Dijkstras algoritm ej kan användas och förklara varför. (1 p)

9 (10) Uppgift 7 Ett tändstickspussel har en spelplan bestående av numrerade punkter ordnade i ett kvadratiskt rutnät. Exempel: 0 1 2 4 5 6 7 8 9 10 11 12 1 14 15 16 17 18 19 20 21 22 2 24 De horisontella och vertikala avstånden mellan två närliggande punkter motsvarar längden hos en sticka. Varje sticka är märkt med numren på de två punkter den får ansluta. Det finns en sticka för varje par av horisontella respektive vertikala grannpunkter, alltså 40 stickor ovan, eller 2N(N-1) för ett pussel av storlek N. Pusslet läggs på följande sätt: Stickorna blandas i en burk. Spelaren tar upp en sticka i taget och kan välja att antingen placera den på sin plats i spelplanen, eller kasta bort den. Pusslet är löst när alla punkter är förbundna, men det får bara finnas en väg mellan två punkter. Nedan följer några lösningar för pussel av storlek 5: Uppgiften går ut på att implementera datastrukturer och algoritmer till ett program som kan lösa tändstickspussel. Den grafiska presentationen ingår ej i uppgiften. Stickor representeras av klassen public class Stick { public int oneend,theotherend; public Stick(int oneend,int theotherend) { this.oneend = oneend; this.theotherend = theotherend; De tre stickorna längst upp till vänster i den vänstra figuren ovan motsvaras av Stick(0,1), Stick(1,6), samt Stick(5,6). forts.

10 (10) Pusslet implementeras av klassen public class SticksGame { private static List<Stick> getrandomsticks(int size) public static List<Stick> solve(int size) a) Implementera metoden getrandomsticks. Parametern size anger pusslets storlek. Metoden skall returnera en lista med 2*size*(size-1) objekt av typen Stick, motsvarande alla horisontella och vertikala grannpunkter enligt föregående sida. Objekten i listan skall vara slumpmässigt ordnade. (4 p) b) Implementera metoden solve. Parametern size anger pusslets storlek. Metoden skall returnera en lista av stickobjekt som utgör en lösning till pusslet. Utnyttja metoden i a samt använd lämpliga datastrukturer. (8 p)