Skriftlig eksamen i Datalogi

Relaterede dokumenter
Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi

Vejledende løsninger

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Om binære søgetræer i Java

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

DM507 Algoritmer og datastrukturer

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Stakke, køer og lidt om hægtede lister

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Danmarks Tekniske Universitet

Algoritmisk geometri

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Datastrukturer (recap)

DANMARKS TEKNISKE UNIVERSITET

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Danmarks Tekniske Universitet

Datastrukturer (recap)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 23n log n. 4 n (log n) log n

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Prioritetskøer. Prioritetskøer Træer og hobe Repræsentation af hobe Algoritmer på hobe Hobkonstruktion Hobsortering. Philip Bille

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Datastrukturer (recap) Datastruktur = data + operationer herpå

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Løsning af møntproblemet

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Prioritetskøer. Prioritetskøer. Prioritetskøer. Prioritetskøer

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

Danmarks Tekniske Universitet

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Prioritetskøer og hobe. Philip Bille

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig eksamen i Datalogi

DM507 Algoritmer og datastrukturer

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Science and Technology EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer 2 (2003-ordning)

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DM507 Algoritmer og datastrukturer

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Prioritetskøer ved»heap«, simulering

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Sortering. Eksempel: De n tal i sorteret orden

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Danmarks Tekniske Universitet

Ugeseddel 4 1. marts - 8. marts

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Algoritmeanalyse. Øvre grænse for algoritme. Øvre grænse for problem. Nedre grænse for problem. Identificer essentiel(le) operation(er)

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 2 n (log n) 2. 3 n /n 2 n + (log n) 4

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Induktive og rekursive definitioner

DM507 Algoritmer og datastrukturer

Tree klassen fra sidste forelæsning

Sortering af information er en fundamental og central opgave.

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Rekursion og dynamisk programmering

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

DM507 Algoritmer og datastrukturer

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Find største element, sæt det på sidste plads. Grundidé i hobsortering. er er

Transkript:

Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10% Opgave 3 30% Opgave 4 12,5% Opgave 5 12,5% Opgave 6 25% Alle sædvanlige hjælpemidler er tilladt. I tilfælde af unøjagtigheder i opgaveteksterne forventes det, at deltagerne selv præciserer besvarelsernes forudsætninger. Opgavesættet består af 11 paginerede sider (incl. forsiden). Kontroller at din kopi er fuldstændig.

Roskilde Universitetscenter side 2 af 11 sider Opgave 1: Rekursion (10%) En algoritme til konvertering af et positivt decimalt heltal (grundtal 10) til et binært tal (grundtal 2) er følgende: (1) Lad d være det decimale tal. (2) Så længe d > 0: - Sæt r lig med d%2 (r er resten ved heltalsdivision af d med 2). - Sæt r til venstre for sekvensen af tidligere værdier af r. - Sæt d lig med d/2 (hvor / betegner heltalsdivision). (3) Det binære tal udgøres af den konstruerede sekvens af r-værdier. Spørgsmål 1.1 Benyt denne algoritme til at programmere en ikke-rekusiv metode String tobinary(int d) der, givet et positivt decimalt heltal, d, som argument, returnerer det tilsvarende binære tal repræsenteret som en tekststreng. For eksempel skal tobinary(13) returnere strengen "1101". Spørgsmål 1.2 Programmér en rekursiv udgave af metoden tobinary.

Roskilde Universitetscenter side 3 af 11 sider Opgave 2: Generelle træer (10%) Nedenfor ses en skitse til en klasse, EQ, der benytter en union-find-algoritme til at vedligeholde en ækvivalensrelation på mængden af heltal i intervallet [0 ; size-1]. Klassen repræsenterer en opdeling af mængden i ækvivalensklasser. For eksempel kan mængden {0, 1, 2,.., 9 være opdelt i følgende 4 ækvivalensklasser {1, 3, 7, {0, 5, 8, {9, {2, 4, 6. Hver ækvivalensklasse repræsenteres som et træ, i hvilket knuderne er objekter af klassen Node. For hver knude angiver dad knudens far i træet (null, hvis knuden er rod). Den offentlige metode differ benyttes til at afgøre, om to heltal tilhører den samme ækvivalensklasse. Den offentlige metode union benyttes til at forene ækvivalensklasserne svarende til to heltal. class EQ { public EQ(int size) { array = new Node[size]; for (int i = 0; i < size; i++) array[i] = new Node(); private class Node { Node dad; private Node[] array; public boolean differ(int i, int j) { return find(array[i])!= find(array[j]); public void union(int i, int j) { /* indsæt kode (se spørgsmål 2.2) */ private Node find(node n) { return n.dad == null? n : find(n.dad); Spørgsmål 2.1 Programmér en ikke-rekursiv udgave af metoden find. Spørgsmål 2.2 Programmér metoden union.

Roskilde Universitetscenter side 4 af 11 sider Opgave 3: Binære søgetræer og binære hobe (30%) Denne opgaver omhandler en datastruktur, der kaldes en treap. En treap et binært træ, hvor hver knude indeholder en nøgle, en hægte til sit venstre undertræ, en hægte til sit højre undertræ samt en prioritet. En treap er et binært søgetræ, men med den ekstra betingelse, at knudernes prioriteter opfylder betingelsen for hob-orden: enhver knudes prioritet er større end eller lig med sin fars prioritet. Nedenstående figur viser et eksempel på en treap. Nøglerne er i dette tilfælde heltal og er angivet inde i knuderne. Prioriteterne er angivet ved siden af knuderne. 8 7 4 13 16 9 1 16 13 14 2 18 Spørgsmål 3.1 Tegn en treap, der indeholder følgende 7 nøgler med tilknyttede prioriteter: Nøgle Prioritet 3 8 8 10 5 16 9 1 1 4 13 3 18 14 Vi ønsker nu at implementere en klasse Treap i Java, der benytter denne datastruktur. På næste side er vist de fundamentale dele af en sådan implementation. Træets knuder repræsenteres som objekter af klassen TreapNode. Træets rod udpeges ved hjælp af referencen root i klassen Treap. Nøglesammenligninger foretages ved hjælp af metoden compareto. Hvis lhs og rhs er to Comparable-objekter, skal kaldet lhs.compareto(rhs) returnere 1, 0 eller 1, alt efter om lhs er mindre end, lig med eller større end rhs. En knudes prioritet tildeles tilfældigt, når knuden skabes.

Roskilde Universitetscenter side 5 af 11 sider public interface Comparable { int compareto(comparable rhs); public class Treap { public Comparable find(comparable k) { return root!= null? root.find(k) : null; public void insert(comparable k) { root = root!= null? root.insert(k) : new TreapNode(k); public void remove(comparable k) { if (root!= null) root = root.remove(k); private TreapNode root; class TreapNode { TreapNode(Comparable k) { key = k; left = right = null; priority = rand.nextint(); Comparable find(comparable k) { /* se spørgsmål 3.2 */ TreapNode rotatewithleftchild() { /* se spørgsmål 3.3 */ TreapNode rotatewithrightchild() { /* ---------------- */ TreapNode insert(comparable k) { /* se spørgsmål 3.4 */ TreapNode remove(comparable k) { /* se spørgsmål 3.5 */ Comparable key; TreapNode left, right; int priority; static Random rand = new Random();

Roskilde Universitetscenter side 6 af 11 sider Metoden find i klassen TreapNode søger efter en specificeret nøgle, k, i det træ, der har knuden som rod. Hvis der findes en knude med denne nøgle, returneres den pågældende knudes nøgle, key; ellers returneres null. Nedenfor ses en rekursiv udgave af denne metode. Comparable find(comparable k) { if (k.compareto(key) < 0) return left!= null? left.find(k) : null; if (k.compareto(key) > 0) return right!= null? right.find(k) : null; return key; Spørgsmål 3.2 Programmér en ikke-rekursiv udgave af find, der ikke benytter stak. Metoden insert i klassen TreapNode benyttes til at indsætte et ny nøgle i træet. Et udkast til implementation ses nedenfor. TreapNode insert(comparable k) { if (k.compareto(key) < 0) left = left!= null? left.insert(k) : new TreapNode(k); else if (k.compareto(key) > 0) right = right!= null? right.insert(k) : new TreapNode(k); return this; Denne udgave af insert vil sikre, at en treap efter indsættelse fortsat vil være et binært søgetræ. Men det vil ikke nødvendigvis længere være en treap. For at sikre at prioriteterne efter indsættelsen overholder betingelsen for hob-orden, vil vi foretage passende rotationer i træet undervejs. Nedenfor er skitseret en rotation af en knude t med sit venstre barn c. t c c T3 T1 t T1 T2 T2 T3 Spørgsmål 3.3 Programmér metoden rotatewithleftchild i klassen TreapNode, så den udfører denne form for rotation på det undertræ, der har den pågældende knude som rod. Metoden skal returnere roden i det nye undertræ.

Roskilde Universitetscenter side 7 af 11 sider På tilsvarende vis kan vi definere en rotation af en knude med sit højre barn. Bemærk at disse rotationer opretholder træet som et binært søgetræ. Vi kan derfor udnytte dem til at sørge for, at betingelsen for hob-orden opretholdes. Spørgsmål 3.4 Færdiggør den udgave af insert, der er vist nedenfor, således at knudernes prioriteter opretholder betingelsen for hob-orden efter et kald. TreapNode insert(comparable k) { if (k.compareto(key) < 0) { left = left!= null? left.insert(k) : new TreapNode(k); /* A: indsæt kode her */ else if (k.compareto(key) > 0) { right = right!= null? right.insert(k) : new TreapNode(k); /* B: indsæt kode her */ return this; Metoden remove i klassen TreapNode benyttes til at fjerne en nøgle fra træet. Også her kan vi ved hjælp af rotationer sørge for, at hob-ordenen bevares. Spørgsmål 3.5 Færdiggør den udgave af remove, der er vist nedenfor, således at knudernes prioriteter opretholder betingelsen for hob-orden efter et kald. TreapNode remove(comparable k) { if (k.compareto(key) < 0) { if (left!= null) left = left.remove(k); else if (k.compareto(key) > 0) { if (right!= null) right = right.remove(k); else { if (left == null) return right; if (right == null) return left; /* C: indsæt kode her */ return this; Vink. Foretag en passende rotation og fortsæt søgningen rekursivt i det roterede undertræ.

Roskilde Universitetscenter side 8 af 11 sider Opgave 4 (12,5%) Betragt følgende klasse: abstract class Tree { private Tree left, right; Tree(Tree actualleft, Tree actualright) { left = actualleft; right = actualright; boolean isleaf() { return (left == null && right == null); abstract void visit(); void traverse() { if (left!= null) left.traverse(); visit(); if (right!= null) right.traverse(); Klassen Tree kan bruges til at repræsentere et såkaldt træ. En reference til et træ er i dette tilfælde en reference til træets rod. Derfra er der referencer til træets venstre og højre undertræ. Et tomt træ repræsenteres af null. Et "blad" er et ikke-tomt træ hvor begge undertræer er tomme. Betragt nu følgende udvidelse af Tree: class IntTree extends Tree { int data;... Klassen IntTree skal bruges til at repræsentere er træ hvortil der er knyttet et heltal. Bemærk i forbindelse med spørgsmålene 4.1 og 4.2 at variablerne left og right i klassen Tree er private. Spørgsmål 4.1 Tilføj til klassen IntTree en konstruktør der som parametre har et heltal samt to træer. Spørgsmål 4.2 Tilføj til IntTree en metode visit() således at traverse() metoden udskriver alle de tal der er knyttet til træets blade. Tallene skal udskrives fra venstre mod højre (svarende til deres rækkefølge i træet). Spørgsmål 4.3 Forklar hvordan traverse() metoden kan modificeres på en sådan måde at tallene i træets blade udskrives i modsat rækkefølge, dvs. fra højre mod venstre. Det skal bemærkes at dette spørgsmål kan besvares uden kendskab til en besvarelse af spørgsmål 4.2.

Roskilde Universitetscenter side 9 af 11 sider Opgave 5 (12,5%) Betragt følgende klasse: class Thermostate { private int threshold; private boolean on; void setthreshold(int actualthreshold) { threshold = actualthreshold; boolean ison() { return on; Klassen Thermostate skal bruges til at repræsentere en termostat; f.eks. en der sidder på en radiator. Variablen threshold indeholder den temperatur under hvilken termostaten skal være on; hvis f.eks. threshold indeholder værdien 21, så skal variablen on have værdien true hvis den aktuelle temperatur er mindre end 21, og den skal have værdien false hvis den aktuelle temperatur er større end eller lig med 21. Men kan "skrue på" termostaten vha. metoden setthreshold og aflæse den vha. ison. Spørgsmål 5.1 Tilføj til klassen Thermostate en metode update() der på passende vis sætter termostatens variabel on til true eller false givet en aktuel temperatur. Betragt nu følgende udvidelse af Thermostate: class EconomyThermostate extends Thermostate { private int maxthreshold; En økonomitermostat har den egenskab at den maksimalt kan skrues op på den temperatur der er indeholdt i variablen maxthreshold. Spørgsmål 5.2 Tilføj til klassen EconomyThermostate en konstruktør der tager eet argument, nemlig den temperatur den konstruerede økonomitermostat maksimalt skal kunne skrues op på. Spørgsmål 5.3 Tilføj til klassen EconomyThermostate en metode setthreshold der givet en ønsket temperatur "skruer op eller ned" på termostaten, dvs. sætter økonomitermostatens variabel threshold til en passende værdi. Bemærk i forbindelse med spørgsmål 5.3 at variablerne threshold og on i klassen Thermostate er private.

Roskilde Universitetscenter side 10 af 11 sider Opgave 6 (25%) Betragt klassen: public class Dato { int dag,maaned,aar; Spørgsmål 6.1 Tilføj til klassen en konstruktor der kaldes med tre argumenter: dag, maaned og aar: Dato(int dag, int maaned, int aar) Spørgsmål 6.2 Tilføj en tostring-metode til klassen. Metoden skal returnere datoen på en form som f.eks. "26/6-2000". Spørgsmål 6.3 Tilføj en metode foer der kaldes med en anden dato som argument. For to datoer d1 og d2 skal kaldet d1.foer(d2) returnere sand (true) hvis d1 kommer før d2 og ellers returnere falsk (false). Et projekt repræsenteres som et objekt af klassen: public class Projekt { String titel; Dato start,slut; Spørgsmål 6.4 Tilføj en metode status der kaldes med en dato som argument og returnerer projektets status den pågældende dato. Status returneres som en af tekststrengene "ej påbegyndt", "undervejs", "færdigt". (Det kan i dette og senere spørgsmål antages at metoden foer fra spørgsmål 6.3 er til rådighed - også selv om man ikke har besvaret spørgsmålet). Vi ønsker at arbejde med projekter med en midtvejs milepæl. Milepælen er en dato der ligger mellem start og slutdato. class ProjektMedMilepael extends Projekt{ Dato Milepael; Spørgsmål 6.5 Tilføj konstruktorer til Projekt og ProjektMedMilepael. Konstruktorerne skal kaldes med argumenter der bruges til at initialisere objekternes felter. Spørgsmål 6.6 Tilføj en metode status til klassen ProjektMedMilepael. Metoden kaldes som den tilsvarende metode i projekt, men for projekter undervejs returneres "før milepæl" eller "efter milepæl".

Roskilde Universitetscenter side 11 af 11 sider Spørgsmål 6.7 Udvid metoden status i klassen ProjektMedMilepael med kontrol for at datoerne kommer i rigtig rækkefølge (startdato før milepæl før slutdato) og at ingen dato er null. Såfremt en af disse betingelser er tilstede skal metoden kaste en undtagelse. Man kan her benytte Javas standard klasse Exception.