Tentamen, Algoritmer och datastrukturer

Relevanta dokument
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

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

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

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

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

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

Seminarium 13 Innehåll

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

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Föreläsning 9 Innehåll

DAI2 (TIDAL) + I2 (TKIEK)

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Tentamen Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 3 Datastrukturer (DAT037)

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

Tentamen Datastrukturer (DAT036)

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

Föreläsning 10 Innehåll

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

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

13 Prioritetsköer, heapar

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 14 Innehåll

Exempeltenta GruDat 2002/2003

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Tentamen, EDAA10 Programmering i Java

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 i Algoritmer & Datastrukturer i Java

Föreläsning Datastrukturer (DAT036)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

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ösningar Datastrukturer TDA

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

Föreläsning 4 Innehåll

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

Tentamen Datastrukturer D DAT 035/INN960

Lösningsförslag till tentamen Datastrukturer, DAT037,

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Föreläsning 3 Datastrukturer (DAT037)

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

Föreläsning 9 Datastrukturer (DAT037)

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 13 Innehåll

Dugga Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer (DAT037)

TENTAMEN I DATAVETENSKAP

Algoritmer och datastrukturer 2012, föreläsning 6

Tentamen i Objektorienterad modellering och design Helsingborg

Trädstrukturer och grafer

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

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

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

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning 1 Datastrukturer (DAT037)

Lösningsförslag till tentamen 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.

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

Tentamen TEN1 HI

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

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Datastrukturer som passar för sökning. Föreläsning 10 Innehåll. Inordertraversering av binära sökträd. Binära sökträd Definition

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

Fredag 10 juni 2016 kl 8 12

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

BST implementering, huvudstruktur

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

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

Grundläggande programmering med C# 7,5 högskolepoäng

Lösningsförslag till exempeltenta 1

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

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.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA10 Programmering i Java

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tentamen i Grundläggande Programvaruutveckling, TDA548

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

Datastrukturer som passar för sökning. Föreläsning 11 Innehåll. Binära sökträd Definition. Inordertraversering av binära sökträd

Föreläsning 12 Innehåll

Tentamen i Programmering

Tentamen TEN1 HI

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

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

Tentamen Datastrukturer (DAT036)

Transkript:

UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och för godkänt kommer det att krävas 8 poäng. reliminärt ger uppgifterna följande poäng:. 5 p 2. 5 p 3. 5 p 4. 5 + 5 = p 5. + 2 + 2 + 6 = p Tillåtet hjälpmedel: Java-snabbreferens.. Ange för vart och ett av följande påstående om det är sant eller falskt. Motivera dina svar. a) Binärsökning är alltid den lämpligaste sökalgoritmen för att söka efter ett element i en vektor. b) Antag att det tar ca 5 sekunder att sortera element med urvalssortering på en viss dator. Att sortera 4 tal på samma dator tar då ca 4 sekunder. c) Rekursiva algoritmer är alltid effektivare än motsvarande iterativa algoritmer. I kursen har vi bl a behandlat följande abstrakta datatyper: lista, stack, kö och prioritetskö. d) Antag att du skall undersöka om parenteser är korrekt nästlade i en text. Välj den abstrakta datatyp av de ovanstånde som passar bäst för att lösa problemet. Beskriv hur den abstrakta datatypen kan användas för att lösa problemet. En abstrakt datatyp kan ofta implementeras på flera olika sätt. Nämn ett sätt att effektivt implementera den valda abstrakta datatypen. 2. a) Betrakta grafen nedan. I vilken/vilka ordningar kan noderna i grafen komma att besökas vid en bredden-först-traversering utgående från nod E (det räcker att visa en korrekt ordning)? b) Beskriv hur man kan anpassa algoritmen för bredden-först-traversering så att man kan beräkna det kortaste avståndet mellan två noder (i grafer liknande den i deluppgift a). c) I kursen har flera andra grafalgoritmer presenterats, bl a Djupet-först-traversering och Dijkstras algoritm. Svara på följande frågor för var och en av dessa två algoritmer: Kan algoritmen användas för att hitta den kortaste vägen mellan två noder i en graf? Om ditt svar är nej, visa med ett exempel att man inte kan göra detta med algoritmen. Om svaret är ja, motivera det. Om du svarar ja på frågan ovan, bör algoritmen användas i stället för bredden-försttraversering? Motivera svaret. &! " % # $

2(6) 3. Antag att vi har följande klass som beskriver en lista: public class Singleinkedist<E> { private istnode<e> first; /** Skapar en tom lista. */ public Singleinkedist() { first = null; /** Returnerar en lista med de element som matchar e. Om inga sådana element finns returneras en tom lista. */ public Singleinkedist<E> allmatches(e e) { // skriv egen kod här // övriga metoder i klassen /* Nested class. Represents a node which contains an element of type E. */ private static class istnode<e> { private E element; private istnode<e> next; /* Creates a listnode which contains e. */ private istnode(e e) { element = e; next = null; Implementera metoden allmatches. 4. I uffmankodning byts en symbol (t.ex. ett tecken i ett alfabet) ut mot en binärkod bestående av ettor och nollor. Sekvensen av nollor och ettor är kortare ju vanligt förekommande en symbol är. Därför blir uffmankoden kortare än om man använt binära koder av fix längd. uffmankodningen av ett alfabet kan visas i ett strikt binärt träd. I uffmanträdet motsvarar löven alfabetets symboler. Vägen från roten till lövet motsvarar symbolens binära kod. Vänster motsvarar och höger motsvarar. I figur visas ett exempel på en binär kodning för det hawaianska alfabetet. Bokstaven A har exempelvis koden och U har koden. Ordet AOA får koden. Man kan bygga upp uffmanträdet så att koden blir entydig och att de mest frekventa symbolerna får kortare koder än de mer sällsynta symbolerna. A K O U E M N I Figur : uffmanträd som visar huffmankodningen för det hawaianska alfabetet.

3(6) Klassen uffmantree representerar ett uffman-träd (se nedan). En nod i trädet innehåller en symbol (,, O, ) om noden är ett löv, i annat fall innehåller attributet symbol ett blanktecken. Attributet weight används när man bygger upp trädet och är inte intressant i den här uppgiften. public class uffmantree private Node root; konstruktor där trädet byggs upp och övriga metoder /** Returnerar en sträng som innehåller den klartext som motsvarar den binära koden code. */ public String decode(string code) { /** Skriver ut de binära koderna och motsvarande symboler. */ public void printencoding() { /** Statiskt nästlad klass - beskriver en nod i trädet. */ private static class Node { private char symbol; private double weight; private Node left; private Node right; /* Skapar en nod som innehåller symbolen symbol och som har vikten weight. */ private Node(char symbol, double weight) { this.symbol = symbol; this.weight = weight; /* Skapar en nod som innehåller symbolen symbol och som har vikten weight. Noden ska ha left som vänster barn och right som höger barn. */ private Node(char symbol, double weight, Node left, Node right) { this(symbol, weight); this.left = left; this.right = right; a) Implementera metoden decode. edning och anvisningar: Exempel: ett anrop av decode( ) ska returnera strängen AOA. Du får förutsätta att den binära koden är korrekt. Rekursion behöver inte användas i den här deluppgiften. För att komma fram till en symbol följer man ett spår genom trädet. b) Implementera metoden printencoding(). edning och anvisningar: Rekursiv teknik ska användas. Det är tillåtet (och lämpligt) att lägga till en privat hjälpmetod. Däremot ger tillägg av extra attribut i klassen poängavdrag. Om trädet ser ut som i exemplet i figur ska ett anrop av printencoding() ge följande utskrift:

4(6) K O U A M E N I Tabtecken ser ut så här: \t. 5. Konstruktorn i klassen uffmantree ser ut så här. /** Skapar ett uffmanträd som representerar en binär kodning av symbolerna i symbols med frekvenser enligt frequencies. */ public uffmantree(char[] symbols, double[] frequencies) {. Exempel: För att bygga upp trädet i figur användes konstruktorn på följande sätt: char[] symbols = new char[3]; double[] frequencies = new double[3]; symbols[] = \ ; frequencies[] =.68; symbols[] = A ; frequencies[] =.262; symbols[2] = E ; frequencies[2] =.72; symbols[3] = ; frequencies[3] =.45; symbols[4] = I ; frequencies[4] =.84; symbols[5] = K ; frequencies[5] =.6; symbols[6] = ; frequencies[6] =.44; symbols[7] = M ; frequencies[7] =.32; symbols[8] = N ; frequencies[8] =.83; symbols[9] = O ; frequencies[9] =.6; symbols[] = ; frequencies[] =.3; symbols[] = U ; frequencies[] =.59; symbols[2] = ; frequencies[2] =.9; uffmantree tree = new uffmantree(symbols, frequencies); Inuti konstruktorn byggs hela trädet upp enligt följande algoritm: Börja med att låta varje symbol representeras av en nod. Varje nod har en vikt (attributet weight) som är lika med symbolens frekvens. Noderna utgör roten till träd som till en början bara innehåller en nod. agra dessa rotnoder i en prioritetskö..9.3 M.32.44.45 Välj de två noder som har minst vikt och plocka ut dem ur prioritetskön. Bygg ihop dem till ett träd genom att låta dem bli vänster- respektive högerbarn till en ny rotnod. Den nya rotnodens vikt ska vara summan av de sammanslagna delträdens vikter. Sätt in den nya rotnoden i prioritetskön.

5(6) U.32.39.44.45.9.3 Upprepa punkt 2 tills bara en rotnod återstår i prioritetskön..44.7.45 U.32.39.9.3... a) Förklara varför det passar bra att använda en prioritetskö för att hålla reda på rotnoderna. b) Beskriv hur man vanligen på ett effektivt sätt implementerar en en prioritetskö. I din förklaring ska ingå en figur med ett exempel. c) Javas klass riorityqueue<e> (se bilaga till skrivningen) beskriver en prioritetskö. För att vi ska kunna sätta in Node-objekt i en sådan kö måste vi modifiera klassen Node så den implementerar interfacet Comparable (se bilaga till skrivningen). Gör dessa ändringar. d) Implementera konstruktorn. Använd algoritmen som beskrivas ovan med hjälp av Javas klass riorityqueue<e> (se bilaga till skrivningen).