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!

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: Algoritmer och datastrukturer. Läs detta!

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 9 Datastrukturer (DAT037)

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

Föreläsning 14 Innehåll

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen, Algoritmer och datastrukturer

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 4 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 4 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).

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

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Lösningsförslag till tentamen

Föreläsning 9 Innehåll

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

Datastrukturer. föreläsning 10. Maps 1

DUGGA: Objektorienterade applikationer. 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 i Algoritmer & Datastrukturer i Java

Lösningar Datastrukturer TDA

Algoritmer och datastrukturer 2012, fo rela sning 8

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

13 Prioritetsköer, heapar

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

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

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.

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

Tentamen Datastrukturer (DAT036)

Föreläsning 10 Datastrukturer (DAT037)

Datastrukturer. föreläsning 9. Maps 1

Tentamen i Algoritmer & Datastrukturer i Java

Datastrukturer. föreläsning 3. Stacks 1

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 036/INN960

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

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

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

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 Programmeringsteknik II Inledning. Anmälningskod:

Lösningsförslag till exempeltenta 1

Sökning och sortering

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

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

Tentamen i Algoritmer & Datastrukturer i Java

Trädstrukturer och grafer

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

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

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

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

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

Föreläsning 5 Datastrukturer (DAT037)

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

Exempeltenta GruDat 2002/2003

Föreläsning Datastrukturer (DAT037)

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

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Dugga Datastrukturer (DAT036)

Algoritmer och datastrukturer

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

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

Föreläsning 3 Datastrukturer (DAT037)

Länkade strukturer, parametriserade typer och undantag

Föreläsning Datastrukturer (DAT037)

Föreläsning 10 Innehåll

Föreläsning Datastrukturer (DAT036)

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

Föreläsning 8 Datastrukturer (DAT037)

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

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

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

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Transkript:

1 (7) 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! 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 (7) Uppgift 1 Välj ett svarsalternativ. Motivering krävs ej. Varje korrekt svar ger två poäng. Garderingar ger noll poäng. 1. Om vi implementerar en FIFO-kö med en enkellänkad lista så får operationerna enqueue, front och dequeue alla tidskomplexiteten a. O(1) i genomsnitt och O(N) i värsta fall b. O(N) i genomsnitt och O(N) i värsta fall c. O(1) i genomsnitt och O(1) i värsta fall d. O(N) i genomsnitt och O(1) i värsta fall 2. Avsikten med följande algoritm är att beräkna största delsegmentsumman i ett heltalsfält genom att utnyttja tekniken divide and conquer private static int maxsum(int[] a,int lo,int hi) { if ( lo > hi ) return 0; if ( lo == hi ) return a[lo]; else { int mid = (lo+hi)/2; return Math.max(maxSum(a,lo,mid),maxSum(a,mid+1,hi)); public static int maxsum(int[] a) { return maxsum(a,0,a.length-1); Vilket påstående är rätt? a. implementeringen är korrekt b. den rekursiva maxsum terminerar ej i vissa fall c. metoden löser ej problemet 3. Ange en undre begränsning för den genomsnittliga tidskomplexiteten för sortering av n slumpmässigt valda heltal med en maskin som kan göra högst en jämförelse i taget? a. O(log n) b. Ω (n log n) c. O(n log n) d. O(n) e. Ω(n) f. Ω(n 2 ) 4. Vilken datastruktur är mest lämplig som stöd för beräkning av lägesmått, som t.ex. medianen, i en datasamling? a. prioritetskö b. stack c. avbildningstabell (map) d. DAG e. binärt sökträd f. FIFO-kö forts. på nästa sida ->

3 (7) 5. Vilken ekvation beskriver en minsta övre begränsning för kodavsnittets tidskomplexitet? // Assume m > 0 and n > 0 int[][] a = new int[n][n]; TreeSet<Integer> t = new TreeSet<>(); // load m elements into t //... for ( int i = 0; i < n; i++ ) for ( int j = i+1; j < n; j++ ) if ( t.contains(a[i][j]) ) a[n 1-i][j] = a[i][j]; a. T(n) = O(n 3 ) b. T(n) = O(n 2 log n) c. T(m,n) = O(n log n log m) d. T(m,n) = O(n 2 log m) e. T(m,n) = O(max(n 2,log m)) f. T(m,n) = O(max(n 2,m)) g. T(m,n) = O(n 2 m) (10 p)

4 (7) 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,right; public boolean isleaf() { return left == null && right == null; Om man vill rita upp ett träd i ett fönster behöver först trädets utsträckning i planet beräknas. Som grund för beräkningen kan man ta storleken hos en nod. I den här uppgiften antar vi att noderna skall ritas som runda cirklar med diametern D. Inbördes avstånd i trädet framgår av följande generella figur. (upper,left) D D L R Skriv en rekursiv funktion som returnerar en begränsande rektangel till ett binärt träd. public static Rect boundingrect(treenode t,int upper,int left) I figuren ovan har begränsande rektanglar ritats ut för delträden, samt en för hela trädet. Trädet och rektangelns övre vänstra begränsningspunkt skall ges som argument till funktionen. För ett tomt träd skall den punktformiga rektangeln (upper,left,upper,left) returneras och för ett löv (upper,left,upper+d,left+d). Rektanglar representeras med typen public class Rect { public int upper,left,lower,right; Exempel: Om noderna skall ritas med diametern 10 enheter och trädet placeras i ritfönstrets övre vänstra hörn så får nedanstående träd den begränsande rektangeln (0,0,50,60). (10 p)

5 (7) Uppgift 3 a) Antag att vi skall sätta in ett av talen 1, 3, 5, 7, 11, 15, 18, 23 i det binära sökträdet nedan. I vilka fall skulle en sådan insättning bryta mot AVL-villkoret? 14 4 20 2 9 16 6 b) Låt min AVL (h) = minimala antalet noder i ett AVL-träd av höjd h. Ex. Trädet i a är ett minimalt AVL-träd av höjd 3 och min AVL (3) = 7. Definiera min AVL med rekursionsekvationer (analogt med exempel som förekommit i kursen). (2 p) (4 p) Uppgift 4 a) Vad är tidskomplexiteterna för operationerna insert, resp. deletemin i en binär hög i det genomsnittliga fallet? b) Kan ett binärt träd med minst två noder vara både ett binärt sökträd och en binär hög? Ge i så fall exempel, annars en motivering till varför det skulle vara omöjligt. (4 p) Uppgift 5 En graf har följande bågar: {(A,B,2), (A,G,1), (B,D,7), (B,E,3), (B,A,19), (C,A,4), (D,A,10), (D,C,6), (D,F,2), (E,A,35), (E,B,15), (E,G,21), (F,C,3), (F,G,0), (G,A,12), (G,C,8), (G,F,4) a) Rita grafen så att inga bågar korsar varandra. (4 p) b) Bestäm kortaste viktade avstånden från nod E till samtliga övriga noder och ange i vilken ordning noderna besöks med Dijkstras algoritm. (6 p) (2 p)

6 (7) Uppgift 6 I en tillämpning bestämde man sig för att lagra information om städer i en hashtabell. I tabellen tillämpas kvadratisk sondering för kollisionshantering. Objekten som lagras i tabellen har typen: public class City { private String position; private String name; public City(String position,string name) {... public boolean equals(object o); public int hashcode(); // other members omitted Följande objekt skall sättas in i en tabell tab med 11 platser: City gbg = new City( 57,42 N 11,57 Ö, Göteborg ), alingsås = new City( 57,47 N 13,24 Ö, Alingsås ), borås = new City( 57,43 N 12,56 Ö, Borås ), kungsbacka = new City( 57,29 N 12,4 Ö, Kungsbacka ), ulricehamn = new City( 57,47 N 13,24 Ö, Ulricehamn ); Metoderna equals och hashcode beräknas från objektens positioner. Två objekt är lika om deras positionssträngar är lika. hashcode returnerar följande värden: gbg.hashcode() 4 borås.hashcode() 4 kungsbacka.hashcode() 6 alingsås.hashcode() 5 ulricehamn.hashcode() 5 Betrakta sekvensen: tab.insert(gbg); tab.insert(kungsbacka); tab.insert(borås); tab.insert(alingsås); tab.remove(borås); tab.insert(ulricehamn); tab.find(alingsås); Vilket objekt returneras av find? Motivera! Rita upp tabellen och visa var elementen hamnar. (Notera att ovanstående delvis får betraktas som pseudokod. Metodnamnen avviker t.ex. från namnen i javas API.) (8 p)

7 (7) Uppgift 7 Följande klasser kan användas för att representera riktade grafer (utan kostnader på bågarna): class GraphException extends RuntimeException { public GraphException(String name) { super(name); // Represents a vertex in the graph. class Vertex { public String name; // Vertex name public List<Vertex> adj; // Adjacent vertices public int indegree; public Vertex(String name) { this.name = name; adj = new LinkedList<Vertex>(); indegree = 0; public class Graph { private Map<String,Vertex> vertexmap = new HashMap<>();... // other methods omitted // This method is finished and may be used in your code. public boolean hascycle() {... // Print all nodes in an arbitrary topological order. // Implement this method! public void topologicalsort() {... Metoden topologicalsort skall, om möjligt, beräkna och skriva ut alla nodernas namn i en godtycklig topologisk ordning. Om ingen sådan ordning finns skall undantaget GraphException kastas. Exempel: För grafen nedan är B A C E D F G H en av flera möjliga utskrifter. C F A D G H B E (10 p)