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

Relevanta dokument
TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Föreläsning Datastrukturer (DAT036)

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

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (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å

Tentamen, Algoritmer och datastrukturer

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer (DAT036)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Datastrukturer. föreläsning 9. Maps 1

Lösningar Datastrukturer TDA

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)

Föreläsning 4 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Föreläsning 8 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

13 Prioritetsköer, heapar

Föreläsning 13 Datastrukturer (DAT037)

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

Föreläsning Datastrukturer (DAT037)

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Föreläsning Datastrukturer (DAT037)

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

Föreläsning 9 Datastrukturer (DAT037)

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.

Graphs (chapter 14) 1

Tentamen i Algoritmer & Datastrukturer i Java

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

Exempeltenta GruDat 2002/2003

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

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

Föreläsning 7 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

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

Tentamen kl Uppgift 4. Uppgift 5

Tentamen i Algoritmer & Datastrukturer i Java

Dugga Datastrukturer (DAT036)

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

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

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

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

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 14 Innehåll

Föreläsning 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 10 Datastrukturer (DAT037)

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

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

Lösningsförslag till tentamen

Grafer, allmänt. Med datastrukturen graf menas vanligen: en mängd av noder (vertices) och en mängd av bågar (edges).

Tentamen i Algoritmer & Datastrukturer i Java

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning 9 Innehåll

Föreläsning 3 Datastrukturer (DAT037)

Algoritmer och datastrukturer 2012, fo rela sning 8

Datastrukturer. föreläsning 8. Lecture 6 1

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

Tentamen Datastrukturer D DAT 036/INN960

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

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

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

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

Föreläsning 9 Innehåll

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 8 Datastrukturer (DAT037)

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

Datastrukturer. föreläsning 10. Maps 1

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

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

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

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.

Näst nästa gång: Nästa gång: mer grafer (kap 10) Grafer 1 1. ! uppspännande träd. ! minimala uppspännande träd. ! Prims algoritm. !

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

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

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 2 Datastrukturer (DAT037)

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 namn och personnummer 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 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 (8) Uppgift 1 Välj ett svarsalternativ på varje fråga. Motivering krävs ej. Varje korrekt svar ger två poäng. Garderingar ger noll poäng. 1. Vilken av följande metoder för insättning av ett nytt element först i en länkad lista utan huvud är korrekt? Klassen ListNode definieras class ListNode { int element; ListNode next; a. void insert(int x,listnode l) { ListNode tmp = new ListNode(); tmp.element = x; tmp.next = l; l = tmp; b. ListNode insert(int x,listnode l) { ListNode tmp = new ListNode(); tmp.element = x; tmp.next = l; return l; c. ListNode insert(int x,listnode l) { ListNode tmp = new ListNode(); tmp.element = x; tmp.next = l; return tmp; d. ListNode insert(int x,listnode l) { ListNode tmp = new ListNode(); tmp.element = x; tmp.next = l.next; l.next = tmp; return l; 2. Antag att man vill konstruera ett program som rankar löparnas sluttider i Göteborgsvarvet. På en resultattavla visas de tio bästa placeringarna, ordnade efter stigande sluttider. Resultatlistan uppdateras vid varje förändring bland topp tio. Vilken datastruktur lämpar sig bäst för att hålla reda på löparnas tider och effektivt leverera informationen som behövs för att uppdatera resultattavlan? a. Hashtabell b. Binärt sökträd c. Stack d. Prioritetskö e. Map f. FIFO-kö

3 (8) 3. Ineffektiva rekursiva algoritmer med många överlappande fall kan ofta göras mer effektiva genom att utnyttja a. en snål algoritm b. backtracking c. divide and conquer d. dynamisk programmering 4. Ett av sambanden 1-3 beskriver tidskomplexiteten hos f. 1. T (0) 0 T ( N) T ( N 1) N 2. T (0) 0 T ( N) T ( N / 2) N 3. T (0) 0 T ( N) T ( N 1) log N int f(int n) { if ( n == 0 ) return 0; else { int s = f(n-1); for ( int i = n; i > 0; i /= 2 ) s += 1; return s; Vilket av a-d är en minsta övre begränsning för lösningen till sambandet i fråga? a. O(log N) b. O(N) c. O(Nlog N) d. O(N 2 ) 5. Alla sorteringsalgoritmer som baseras på successiva byten av närliggande element har generellt tidskomplexiteten a. O(Nlog N) i genomsnitt b. O( Nlog N) i värsta fall c. (N 2 ) i bästa fall d. (N 2 ) i genomsnitt e. O(N 2 ) i värsta fall (10 p)

4 (8) Uppgift 2 Konstruera en rekursiv funktion public static ListNode getlevel(treenode t, int i) som returnerar en lista med alla element som finns på en viss nivå i ett binärt träd. Exempel: Om t är trädet 1 2 3 4 5 6 så skall anropen getlevel(t,0), getlevel(t,1), getlevel(t,2) returnera listorna [1], [2,3], respektive [4,5,6]. För i > 2 returnerar getlevel(t,i) null. Klassen ListNode finns i uppgift 1.1. Tips: Utnyttja ett par användbara listfunktioner från rekursionslabben. (10 p) Uppgift 3 a) Visa hur det binära sökträdet nedan ser ut efter operationen delete(10). 10 5 27 1 8 19 36 4 6 15 24 29 38 (2 p) b) Visa hur det binära sökträdet nedan ser ut efter operationen insert(82). Efter insättningen skall trädet uppfylla AVL-villkoret. 52 17 37 60 46 55 79 64 97 (3 p)

5 (8) Uppgift 4 I en tom hashtabell med sju platser gjordes insättningssekvensen insert(31); insert(18); insert(49); vilket resulterade i tabellen 0 49 1 2 3 31 4 18 5 6 Hashfunktionen är här för enkelhets skull hash(x) = x mod M där M är antalet platser i tabellen. Kvadratisk sondering (probing) används. a) Är det lämpligt att sätta in ytterligare två element i tabellen ovan, utan andra förändringar? Motivera svaret! (2 p) b) Välj minsta lämpliga tabellstorlek som är minst dubbelt så stor som ovan. Visa sedan hur denna tabell ser ut efter sekvensen insert(31); insert(18); insert(49); insert(48); Använd kvadratisk sondering (probing). (4 p) Uppgift 5 a) Är trädet nedan en binär hög? Om inte, förklara varför och flytta i så fall element på lämpligt sätt så att det blir en binär hög. (3 p) 5 20 7 22 25 10 12 38 45 30 15 b) Visa hur fältrepresentationen av högen som blir resultatet i a ser ut. (2 p) Uppgift 6 För att kunna ordna noderna i grafen nedan topologiskt krävs att en ny båge läggs till eller att en befintlig tas bort. Gör detta och ange sedan alla möjliga topologiska ordningar av noderna. C D B E F (7 p)

6 (8) Uppgift 7 I denna uppgift används grafklassen i kursboken. Den finns som bilaga längst bak i tesen. Betrakta följande graf U Q 20 5 14 35 S 70 13 V 57 P 10 R 40 30 T 15 a) Lägg till metoden public Graph computesubgraph(string startnode,double maxdist) i grafklassen. Metoden skall returnera en ny graf som innehåller alla noder i aktuell graf som kan nås inom avstånd maxdist från startnode. Alla bågar i aktuell graf som har både start- och slutnod som också finns i subgrafen skall finnas med i subgrafen. Exempel: Om startnoden är P och maxavståndet 67 så skall metoden returnera delgrafen (observera att bågen (P,Q,70) finns med): Q 70 57 V P 10 R 40 T 15 Ledning: Metoden dijkstra i grafklassen får utnyttjas i lösningen. b) Lägg till metoden 1 public List<String> nodesatuwd(string startnode,int d) (7 p) i grafklassen. Metoden skall returnera en lista med alla noder i aktuell graf som kan nås på oviktat avstånd (exakt) d från startnode. Exempel: Om startnoden är P och avståndet 0, 1, 2, 3, respektive 4 eller större, så skall metoden returnera listan [P], [R,Q], [S,T,U], [V], respektive []. (listelementens inbördes ordning spelar ingen roll). Ledning: Klassen Pair sist i bilagan är användbar i lösningen. (10 p) 1 Nodes at unweighted distance.

7 (8) BILAGA // Represents an edge in the graph. class Edge { public Vertex dest; // Second vertex in Edge public double cost; // Edge cost public Edge( Vertex d, double c ) { dest = d; cost = c; // Represents an entry in the priority queue for Dijkstra's algorithm. class Path implements Comparable<Path> { public Vertex dest; // w public double cost; // d(w) public Path( Vertex d, double c ) { dest = d; cost = c; public int compareto( Path rhs ) { double othercost = rhs.cost; return cost < othercost? -1 : cost > othercost? 1 : 0; // Represents a vertex in the graph. class Vertex { public String name; // Vertex name public List<Edge> adj; // Adjacent vertices public double dist; // Cost public Vertex prev; // Previous vertex on shortest path public int scratch;// Extra variable used in algorithm public Vertex( String nm ) { name = nm; adj = new LinkedList<Edge>( ); reset( ); public void reset( ) { dist = Graph.INFINITY; prev = null; scratch = 0; // Graph class: evaluate shortest paths. // // CONSTRUCTION: with no parameters. // // ******************PUBLIC OPERATIONS******************************** // void addedge( String v, String w, double cvw ) // --> Add additional edge // void dijkstra( String s ) --> Single-source weighted // Graph computesubgraph( String s, double d) --> Sub graph within d // List<String> nodesatuwd(string s, int d) --> Nodes at distance d // ******************************************************************* v.g.v. -->

8 (8) public class Graph { public static final double INFINITY = Double.MAX_VALUE; private Map<String,Vertex> vertexmap = new HashMap<String,Vertex>( ); /** * Add a new edge to the graph. */ public void addedge( String sourcename, String destname, double cost ) { Vertex v = getvertex( sourcename ); Vertex w = getvertex( destname ); v.adj.add( new Edge( w, cost ) ); /** * If vertexname is not present, add it to vertexmap. * In either case, return the Vertex. */ private Vertex getvertex( String vertexname ) { Vertex v = vertexmap.get( vertexname ); if( v == null ) v = new Vertex( vertexname ); vertexmap.put( vertexname, v ); return v; /** * Initializes the vertex output info prior to running * any shortest path algorithm. */ private void clearall( ) { for( Vertex v : vertexmap.values( ) ) v.reset( ); public void dijkstra( String startname ){... // uppgift 7a // Compute the subgraph of this graph where all nodes are // reacheable from startnode within at most maxdist distance. // Nodes at longer distance are omitted. public Graph computesubgraph(string startnode,double maxdist)... // uppgift 7b // Compute a list of all nodes at the exact // unweighted distance d from startnode public List<String> nodesatuwd(string startnode,int d)...