DM507 Algoritmer og datastrukturer

Relaterede dokumenter
DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

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

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave.

Datastrukturer (recap)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Datastrukturer (recap)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Datastrukturer (recap) Datastruktur = data + operationer herpå

Skriftlig eksamen i Datalogi

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

Danmarks Tekniske Universitet

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

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

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Danmarks Tekniske Universitet

Prioritetskøer og hobe. Philip Bille

Skriftlig eksamen i Datalogi

Danmarks Tekniske Universitet

DANMARKS TEKNISKE UNIVERSITET

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Om binære søgetræer i Java

Datastrukturer. Datastruktur = data + operationer herpå

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

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Danmarks Tekniske Universitet

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Datastrukturer. Datastruktur = data + operationer herpå

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

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

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

Divide-and-Conquer algoritmer

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

DM502. Peter Schneider-Kamp

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Skriftlig eksamen i Datalogi

DM507 Algoritmer og datastrukturer

Divide-and-Conquer algoritmer

Introduktion til DM507

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

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

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

Divide-and-Conquer algoritmer

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Divide-and-Conquer algoritmer

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

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Abstrakte datatyper C#-version

Skriftlig eksamen i Datalogi

Eksamensopgaver i LaTeX-delen af IT-1B

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

Danmarks Tekniske Universitet

Vejledende løsninger

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Danmarks Tekniske Universitet

Løsning af møntproblemet

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

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

Forelæsning Uge 4 Mandag

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

Algoritmisk geometri

Tegninger ved skriftlig prøve i fysik A, htx

Førsteårsprojekt F2008 Flere grafalgoritmer, og visualisering SØGES

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

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

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

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2013

Transkript:

DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således at arbejdet strækkes over hele semesteret. Deadline for del II er mandag den 9. april kl. 11:00. De tre dele I/II/III er ikke lige store, men har omfang omtrent fordelt i forholdet 15/30/55. Projektet skal besvares i grupper af størrelse to eller tre. Mål Det overordnede mål for hele projektet i DM507 er træning i at overføre kursets viden om algoritmer og datastrukturer til programmering. Projektet og den skriftlige eksamen komplementerer hinanden, og projektet er ikke ment som en forberedelse til den skriftlige eksamen. Det konkrete mål for del II af projektet er først at implementere datastrukturen ordnet dictionary (ordbog), og derefter bruge den til at sortere tal. Arbejdet vil også virke som forberedelse til del III af projektet. Opgaver Opgave 1 Kort sagt er opgaven at overføre bogens pseudo-kode for ubalancerede søgetræer til en Java-klasse. I detaljer: Du skal i Java implementere en klasse DictBinTree, som tilbyder (i Java termininologi: implements) følgende interface (udleveres): public interface Dict { public void insert(int k); public int[] orderedtraversal(); 1

} public boolean search(int k); Nøgler er af typen int, og der er ikke yderligere data tilknyttet en nøgle (dvs. vi bruger ikke Element fra del II her). Metoden search(k) returnerer blot en boolean, der angiver om nøglen k er i træet. Metoden insert(k) indsætter nøglen k i træet. Metoden orderedtraversal() returnerer en kopi af træets elementer i et array i sorteret orden (fremfor at printe dem på skærmen som i bogens pseudo-kode). Krav i opgave 1 Implementationen skal laves ved hjælp af strukturen binært søgetræ, som beskrevet i Cormen et al. kapitel 12. Som det fremgår af interfacet Dict skal der kun implementeres indsættelse (pseudo-kode side 294), søgning (pseudokode side 290 eller 291), og inorder gennemløb (pseudo-kode side 288). Implementationen skal basere sig på denne pseudo-kode. Træet skal ikke holdes balanceret (der skal ikke bruges metoder fra kapitel 13). Implementationen skal være i form af en Java-klasse, som kan bruges af andre programmer. Klassen skal hedde DictBinTree, og skal implementere interfacet Dict. Klassen skal have én constructor-metode ved navn DictBinTree(), som returnerer en ny, tom dictionary. Der vil være behov for at implementere metoder udover dem i interfacet, til internt brug i klassen. Du skal definere en separat klasse til at repræsentere knuder i træer (og du skal ikke bruge et array eller en arraylist til at repræsentere træet, sådan som for en heap i del I af projektet). Et knudeobjekt skal indeholde referencer til to andre knudeobjekter (dens venste barn og højre børn), med værdi null hvis et barn ikke findes. Det skal også indeholde en nøgle, men behøver i dette projekt ikke at indeholde en reference til en forælder. Objekter af typen DictBinTree skal være et header-objekt, som indeholder en reference til knuden, der er rod i træet, samt anden relevant global information on træet, f.eks. dets størrelse (så man kan oprette et array af den rigtige størrelse i starten af orderedtraversal) samt en tæller (til at holde styr på, hvor langt man er kommet i dette array under orderedtraversal). Dvs. objekter af typen DictBinTree og knudeobjekter er to forskellige slags objekter og defineres i to forskellige klasser. For hvert træ er der ét headerobjekt og mange knudeobjekter. Nye knudeobjekter oprettes under insert (ved brug af new i Java, som for alle objekter). Bemærk at parametrene i bogens pseudo-kode er anderledes end i interfacet ovenfor. Dette skyldes at implementationsdetaljer (såsom at der findes knuder i dictionary en) ikke skal være synlige for brugere af datastrukturen. 2

For rekursive metoder vil der være tale om to udgaver: den offentlige fra interfacet, samt en privat, som gør det virkelige arbejde. Den offentlige er ikke rekursiv, men kalder blot den private, og tilføjer i kaldet yderligere parametre med relevante værdier. For metoder baseret på en løkke kan den ekstra parameter blot oprettes inden løkken går i gang. Som hjælp under udvikling af DictBinTree udleveres sammen med dette projekt et testprogram, som bruger klassen DictBinTree. Opgave 2 Du skal implementere en sorteringsalgoritme kaldet Treesort baseret på metoderne i interfacet Dict. Algoritmen består i at lave gentagne insert s i en dictionary, efterfulgt af et kald til orderedtraversal. Elementerne i det returnerede array skal så blot skrives ud. Krav i opgave 2 Algoritmen skal implementeres i et program kaldet Treesort. Dette program skal bruge din ovenfor udviklede klasse DictBinTree som blackbox/biblioteksfunktion. Ligesom det udleverede program Heapsort fra del I af projektet skal Treesort læse fra standard input (der som default er tastaturet), og skrive til standard output (der som default er skærmen). Dette skal gøres som følger: Input læses via klassen Scanner fra biblioteket java.util og bruger dens metode nextint() til at indlæse tallene. Output laves via System.out.println(). Input til Treesort er en sekvens af char s bestående af heltal adskilt af whitespace, og programmet skal som output skrive tallene i sorteret orden, adskilt af whitespace. Som eksempel skal Treesort kunne kaldes således i en kommandoprompt: java Treesort 34 645-45 1 34 0 Ctrl-D (Control-D angiver slut på data under Linux og Mac, under Windows brug i stedet Ctrl-Z og derefter Enter) og skal så give flg. output på skærmen: -45 0 1 34 3

34 645 Bemærk at ved hjælp af redirection 1 af standard input og output kan man i en kommandoprompt anvende Treesort (helt uden at ændre i det) på filer også: java Treesort < inputfile > outputfile Som test af Treesort kan man køre det på testfilerne fra del I. Det er vigtigt at I afprøver ovenstående i en kommandoprompt, da programmerne skal kunne testes automatisk. Man må af samme grund heller ikke i sin kildekode have package statements, eller organisere sin kode i en folderstruktur 2. Formalia Du skal kun aflevere dine Java source-filer. Disse skal indeholde grundige kommentarer. De skal også indeholde navnene og SDU-logins på gruppens medlemmer. Filerne skal afleveres elektronisk i Blackboard med værktøjet SDU Assignment, som findes i menuen til venstre på kursussiden i Blackboard. De skal enten afleveres som individuelle filer eller som ét zip-arkiv (med alle filer på topniveau, dvs. uden nogen directory struktur). Der behøves kun afleveres under én persons navn i gruppen. Filerne skal også afleveres udprintet på papir i instruktorens boks på Imada (vælg én af instruktorerne, hvis personerne i gruppen går på forskellige hold). Spørg Imadas sekretær hvis man ikke ved, hvor instruktorboksene er. Der skal blot afleveres én kopi per gruppe. Afleveringens sider skal sættes sammen med hæfteklamme. Det er vigtigt at overholde alle syntaktiske regler ovenfor (navngivning af klasser, kald af programmer, zip-arkiv uden directory struktur, ingen package statements), da programmerne som sagt vil blive testet på automatiseret måde. Aflever materialet senest: 1 Læs evt. om redirection på Unix Power Tools eller Wikipedia. 2 NB: Dette sker ofte automatisk hvis man bruger en IDE som Eclipse eller NetBeans under udvikling af koden. I så fald må man fjerne package statements og folderstruktur inden aflevering, (og derefter igen teste funktionaliteten, herunder redirection, med javac og java i en kommandoprompt). 4

Mandag den 9. april kl. 11:00. Bemærk at aflevering af andres kode eller tekst, hvad enten kopieret fra medstuderende, fra nettet, eller på andre måder, er eksamenssnyd, og vil blive behandlet som sådan. Man lærer desuden heller ikke noget. Brug følgende regel: alt konkret kode, som afleveres, skal være skrevet af de personer, hvis navn optræder på afleveringen. 5