TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Relevanta dokument
DAI2 (TIDAL) + I2 (TKIEK)

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

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).

Föreläsning Datastrukturer (DAT036)

Lösningsförslag till tentamen

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

Tentamen, Algoritmer och datastrukturer

Föreläsning 14 Innehåll

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer (DAT036)

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

Föreläsning 9 Datastrukturer (DAT037)

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: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Dugga Datastrukturer (DAT036)

Föreläsning 9 Innehåll

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen Datastrukturer (DAT036)

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

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

Lösningar Datastrukturer TDA

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

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 4 Datastrukturer (DAT037)

Lösningsförslag till exempeltenta 1

Tentamen i Algoritmer & Datastrukturer i Java

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

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.

Exempeltenta GruDat 2002/2003

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

Tentamen Datastrukturer (DAT036)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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.

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

Föreläsning 2 Datastrukturer (DAT037)

13 Prioritetsköer, heapar

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

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

Föreläsning 2 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

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

Föreläsning 10 Datastrukturer (DAT037)

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

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

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Datastrukturer D DAT 035/INN960

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

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 Datastrukturer D DAT 035/INN960

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

Länkade strukturer, parametriserade typer och undantag

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

Träd Hierarkiska strukturer

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037)

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

Tentamen Datastrukturer för D2 DAT 035

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

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

Algoritmer och datastrukturer 2012, föreläsning 6

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

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

DAT043 Objektorienterad Programmering

Tentamen Datastrukturer (DAT037)

Tentamen TEN1 HI

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

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Programmering fortsättningskurs

Tentamen kl Uppgift 4. Uppgift 5

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

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

Datastrukturer. föreläsning 3. Stacks 1

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

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

Föreläsning Datastrukturer (DAT037)

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Seminarium 13 Innehåll

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

Tentamen i Algoritmer & Datastrukturer i Java

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

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

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

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

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

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

Transkript:

1 (8) TENTAMEN: Algoritmer och datastrukturer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Börja varje uppgift på ett nytt blad. 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!

2 (8) Uppgift 1 Välj ett svarsalternativ. Motivering krävs ej. Varje korrekt svar ger två poäng. Garderingar ger noll poäng. Skriv lösningarna på deluppgifterna 1-5 på ett blad. 1. Vilken av sekvenserna nedan räknar upp noderna i trädet i ordningen postorder? A B C F D E H I J a. B D E C H I J F A b. A B C F D E H I J c. A B C D E F H I J d. J I H E D F C B A e. B A D C E H F I J f. F J I H C E D B A 2. Du skall konstruera en algoritm som skriver ut noderna i ett träd i ordningen preorder. Tyvärr saknar språket du måste använda möjlighet att programmera med rekursion. Vilken ADT behövs för att lösa problemet utan rekursion? a. en FIFO-kö b. en tabell (map) c. en stack d. en prioritetskö 3. Vilken av swap-operationerna kan potentiellt eliminera flest inversioner i en sekvens A av N element? a. swap(a,i,i+1) (grannelement) b. swap(a,0,n/2) c. swap(a,0,n-1) 4. Tidskomplexiteten för insättning i en hashtabell är a. O(1) i genomsnitt och O(1) i värsta fall b. O(log N) i genomsnitt och O(N) i värsta fall c. O(1) i genomsnitt och O(log N) i värsta fall d. O(1) i genomsnitt och O(N) i värsta fall e. O(N) i genomsnitt och O(N 2 ) i värsta fall 5. Vad är en minsta övre begränsning till lösningen av rekurensekvationen 1 1 3 /3 1 a. O(log N) b. O(N 2 ) c. O(N 3 ) d. O(N) e. O(N log N) (10 p)

chalmers at unoholmer.se n 3 (8) Uppgift 2 Binära träd kan representeras med klassenn public class TreeNode< <E> { E element; TreeNode left,right; public TreeNode(E element,tr reenode left,treenode right) ) { this.element = element; this.left = left; public interface Function<T,R> { this.right = right; R apply(t arg) ); public boolean isleaf() { return left == null && right == null; I en av kursens laborationer presenteradess funktionenn map som bearbetar varje element i en samling med en given funktion. Här skalll vi användaa en variant av map somm ger resultatet i en lista som användaren tillhandahåller (snarare än att ge resultatett som ett returvärde). public static <T,,R> void map( (Function<T,R> f,,collection<t> arg,collection<r> result) Ex. Antag att listan numbers innehåller talen [5,2,16,3,7] och att vi deklarerar List<Integer> result = new LinkedList<>() ; Efter anropet map( (x -> x+1,numbers,,result)innehåller result r talen [6,3,17,4,8]. a) Implementera metoden public static List<String> prefixtoall( (String prefix,li st<string> strings) som adderar prefix början av varje sträng i strings. Ex. E Om listan stringss innehåller [ A, BC, D ] skall anropet prefixtoall( x,strings) returnera listan [ xa, xbc, xd ]. Tips: Använd map ovan. b) Implementera metoden public static List< <String> leafpaths(treenode<integer> t) Metoden skall returnera en lista av strängar som beskriver alla a spår till löven i trädet t. Ex. Om t är trädet 1 2 3 4 5 6 7 8 så skall leafpaths(t) returnera en listaa med strängarna "L-L-(4)", "L-R-L-(8)", "R-L-(6)" samt "R-R-(7)". (8 p) Version: 2019-06-07 Algoritmer och datastrukturer, LET375, DAI2+I2, 18/19, lp 4 Nr 19

4 (8) Uppgift 3 a) Vad är den minimala respektive maximala höjden hos ett binärt träd som en funktion av antalet element (N) (höjd enligt Weiss). b) Vilket av träden nedan är ett AVL-träd? Motivera svaret! 10 12 51 5 15 10 19 42 63 6 8 18 9 13 43 56 67 15 52 c) Rita trädet nedan som ett binärt träd enligt metoden som beskrivs i kursboken. A B C D E F G H I J K L

5 (8) Uppgift 4 a) Hur ser den binära högen nedan ut efter sekvensen deletemin();insert(10)? Rita trädet! 10 14 16 20 37 23 18 26 21 48 39 (4 p) b) Ordningen mellan barnen till en nod i en binär hög spelar ju, till skillnad från i ett sökträd, ingen roll. Men hur många olika binära högar kan man få bara genom att spegla delträd om vi begränsar oss till fulla träd? (Spegling betyder att inga noder byter förälder, bara att vänster-högerordningen mellan barnen ändras.) T.ex. är T 1 och T 2 ekvivalenta: T 1 X T 2 X Y Z Z Y L R R L Ange ett rekursivt samband M(t) som givet en binär hög i form av ett fullt träd t, ger antalet ekvivalenta speglingar som en funktion av antalet ekvivalenta speglingar av delträden (left(t) resp. right(t)). Ett löv (isleaf(t)) har förstås bara en spegling. Ange också antalet ekvivalenta speglingar som en funktion av trädets höjd h (h def. enl.weiss). Ange också en övre begränsning för antalet ekvivalenta speglingar i ett fullt träd med N noder, uttryckt på formen O(f(N)). (3 p)

6 (8) Uppgift 5 a) Följande operationssekvens skall utföras på en hashtabell med initialt fem platser (M = 5): add(26); add(17); remove(17); add(1); add(16); Hashfunktionen är hash(x) = x mod M. Kvadratisk sondering och fältdubblering används. Visa först hur tabellen ser ut efter de fyra första stegen. Visa därefter hur slutresultatet blir. Tabellen skall ha ett lämpligt antal platser i enlighet med kursbokens beskrivning. Motivera dina val! (4 p) b) I en mjukvara för ett varulager hos en klädkedja finns följande klass: public class Product { private final String id; private final String size; private final String description; private int price; private int noofitemsinstock; public Product(String id,string size,string description) { this.id = id; this.size = size; this.description = description; public Product(String id) { this(id,"",""); // for searching public boolean equals(object o) { if ( this == o ) return true; else if ( o instanceof Product ) { Product other = (Product)o; return id.equals(other.id); else return false; public int hashcode() { return id.hashcode()*37 + size.hashcode(); public String tostring() { return id + " " + size + " " + description; // Other methods omitted. Produktobjekten lagras i ett HashSet: HashSet<Product> store = new HashSet<>(); Man har råkat lägga in en felaktig storleksangivelse på en tröja: store.add(new Product("876575-42","S","Sweater")); och vill rätta till misstaget med: Product tmp = new Product("876575-42"); store.remove(tmp); store.add(new Product("876575-42","M","Sweater")); Vad blir utskriften om följande exekveras efter ovanstående steg? for ( Product p : store ) System.out.println(p); Klassen HashSet finns i bilagan. Motivera svaret! (4 p)

7 (8) Uppgift 6 Metoden indexof undersöker om fältet a är ett delfält i b och returnerar den första positionen i b där elementen i a matchar elementen i b. Om ingen matchning hittas returneras -1. Ex. A = {4,2,6, C = {2,4,3, B = {8,1,4,4,2,6,2,4,2,7 indexof(a,b) returnerar 3 medan indexof(c,b) returnerar -1. public static int indexof(int[] a,int[] b) { int j = 0; while ( j <= b.length - a.length ) { int i = 0; while ( i < a.length && a[i] == b[j + i] ) i++; if ( i == a.length ) return j; j++; return -1; a) Ge ett exempel med två fält som visar hur värsta fallet kan se ut för algoritmen ovan. b) Antag att a har M element och b N element. Ge ett ordouttryck för metodens komplexitet i värsta fall. Motivering krävs. Utnyttja resonemanget i a.

8 (8) Uppgift 7 a) Ange alla möjliga topologiska ordningar av noderna i grafen nedan. För poäng krävs att alla är rätt. A C E B D F (3 p) Riktade grafer kan representeras med följande klasser (som alla ligger i paketet graph): public class GraphException extends Exception public class Graph private Map<String,Vertex> graphtable = new HashMap<>(); class Vertex { String name; int indegree; List<Vertex> neighbours; public Vertex(String name) { this.name = name; neighbours = new LinkedList<>(); public void reset() { indegree = 0; public String tostring() { return name; public void addvertex(string name) { if (! graphtable.containskey(name) ) graphtable.put(name,new Vertex(name)); public void addedge(string from,string to) { addvertex(from); addvertex(to); graphtable.get(from).neighbours.add(graphtable.get(to)); public void topologicalsort() throws GraphException { /* TODO */ b) Skriv en privat metod som beräknar och fyller i ingraden i alla noder. c) Skriv en privat metod som returnerar en lista med alla noder som har ingraden noll. d) Implementera metoden topologicalsort som skriver ut grafens samtliga noder i topologisk ordning. Om noderna inte kan ordnas topologiskt skall inget skrivas ut utan undantaget GraphException kastas. Det räcker om metoden skriver ut en av eventuellt flera möjliga ordningar. Använd en lämplig ADT i lösningen och utnyttja metoderna i b och c. (8 p)