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

Datastrukturer (recap)

Sortering. Eksempel: De n tal i sorteret orden

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

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

Sortering af information er en fundamental og central opgave.

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Datastrukturer (recap)

Datastrukturer. Datastruktur = data + operationer herpå

Datastrukturer. Datastruktur = data + operationer herpå

Datastrukturer (recap) Datastruktur = data + operationer herpå

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig eksamen i Datalogi

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

Skriftlig eksamen i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

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

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

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

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

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Introduktion til DM507

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

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

Prioritetskøer og hobe. Philip Bille

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

Skriftlig eksamen i Datalogi

Danmarks Tekniske Universitet

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

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

Danmarks Tekniske Universitet

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

Om binære søgetræer i Java

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (også kaldet key, nøgle) for dataelementer.

Rolf Fagerberg. Forår 2015

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

Eksamensopgaver i LaTeX-delen af IT-1B

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2013

Rolf Fagerberg. Forår 2015

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

Tilgang til data. To udbredte metoder for at tilgå data: Sekventiel tilgang Random access: tilgang via ID (key, nøgle) for dataelementer.

Abstrakte datatyper C#-version

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Løsning af møntproblemet

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

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

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

DM502. Peter Schneider-Kamp

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Danmarks Tekniske Universitet

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Skriftlig eksamen i Datalogi

Danmarks Tekniske Universitet

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

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

Divide-and-Conquer algoritmer

DANMARKS TEKNISKE UNIVERSITET

DATALOGISK INSTITUT, AARHUS UNIVERSITET

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

Danmarks Tekniske Universitet

Grundlæggende Algoritmer og Datastrukturer

Test af It-komponent

Eksempel: Skat i år 2000

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2014

Rolf Fagerberg. Forår 2012

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

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

Introduktion til datastrukturer

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

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

SWC eksamens-spørgsmål. Oversigt

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

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

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

Vejledende løsninger

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

Transkript:

DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således at afleveringerne, og dermed arbejdet, strækkes over hele semesteret. Deadline for del I er onsdag den 8. april. Projektet skal besvares i grupper af størrelse to (evt. tre, efter aftale med underviser). Mål Målet for del I af projektet er at implementere to datastrukturer: en prioritetskø og en ordnet dictionary (ordbog). Implementationerne skal have veldefinerede interfaces, så de kan bruges som klasser i andre programmer. Prioritetskøen skal bruges direkte som biblioteksfunktion senere i del II af projektet, mens arbejdet med dictionary en kan ses som en forberedelse til elementer af del II. Bemærk: Det overordnede mål med projektet i DM507 er at komplementere kursets hovedfokus på viden om algoritmer og datastrukturer med træning i at overføre denne viden til konkret programmering. Formålet er derfor ikke at forberede deltagerne på den skriftlige eksamen. Bemærk også at projektbeskrivelsen af lang, ikke fordi den er svær, men fordi den er detaljeret og udførlig. Opgaver Opgave 1 Der skal i Java implementeres en datastruktur, som tilbyder (i Java: implementerer) følgende interface: 1

public interface PQ { public Element extractmin(); public void insert(element e); Her er Element en simpel type, der implementerer et (prioritet,data)-par. Denne type er defineret ved følgende simple klasse: public class Element { public int key; public Object data; public Element(int i, Object o){ this.key = i; this.data = o; De to dele af et objekt e af typen Element skal i dette projekt blot tilgås som e.key og e.data. Elementers prioriteter er altså af typen int, og deres associerede data er af typen Object. Metoden extractmin() returnerer elementet i prioritetskøen med mindst prioritet (er der flere elementer med mindste prioritet, da et vilkårligt af disse elementer). Det må gerne antages at metoden kun kaldes på en ikke-tom prioritetskø. Metoden insert(e) indsætter elementet e i prioritetskøen. Det må gerne antages at metoden kun kaldes på en prioritetskø med plads til endnu et element. Dette betyder, at det overlades til brugeren af prioritetskøen at sikre at ovenstående antagelser er opfyldt under brug, f.eks. ved at holde styr på antal elementer i prioritetskøen 1. Implementationen skal laves ved hjælp af strukturen heap i et array af Elements, baseret på pseudo-koden i Cormen et al. kapitel 6 (hovedsageligt i afsnit 6.5). Bemærk at der i dette projekt skal laves en min-heap struktur, mens bogen formulerer sin pseudo-kode for en max-heap struktur og derfor skal have alle uligheder vendt. Bemærk også at bogens pseudo-kode indekserer arrays startende med 1, mens Java starter med 0 en simpel måde at anvende bogens pseudo-kode på i Java, er at lægge én til den ønskede længde på array et, og så ikke at bruge pladsen med index 0 til noget. Bemærk endvidere at parametrene i metoder ikke er præcis de samme i bogens pseudo-kode som i interfacet PQ. Dette skyldes dels at i objektorienteret programmering kaldes metoder på et objekt Q med syntaksen Q.metode() fremfor metode(q), og dels at bogen kun opererer med prioriteter og ikke elementer. Derudover er A i bogens pseudo-kode et array indeholdende heapen, 1 Dette er ikke en robust måde at lave biblioteksfunktioner på, men er simpelt og godt nok til vores formål. 2

hvilket ikke skal kunne tilgås direkte af brugere af et prioritetskø-objekt Q på anden måde end gennem metoderne fra interfacet. Implementationen skal være i form af en Java-klasse, som kan bruges af andre programmer. Klassen skal hedde PQHeap, og skal implementere interfacet PQ. Klassen skal have én constructor metode PQHeap(int maxelms), der returnerer en ny, tom prioritetskø, og der som argument tager en øvre grænse for antallet af elementer i køen. Der vil være behov for at implementere metoder udover dem i interfacet, til internt brug i klassen. Opgave 2 Der skal i Java implementeres en datastruktur, som tilbyder følgende interface: public interface Dict { public void insert(int k); public int[] orderedtraversal(); public boolean search(int k); Nøgler er af typen int, og elementer består kun af nøgler (der er ikke yderligere data tilknyttet en nøgle). Metoden search(k) returnerer blot en boolean, som 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). 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). Træet skal ikke holdes balanceret (dvs. 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. Man skal desuden definere en separat klasse til at repræsentere knuder i træer. Et objekt af denne type skal indeholde referencer til to andre knudeobjekter (dens børn), med værdi null hvis disse ikke findes. 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. Bemærk at parametrene i bogens pseudo-kode 3

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. Der vil derfor for flere metoder være tale om to udgaver, den officielle fra interfacet, og en intern, som gør det virkelige arbejde. Den officielle kalder blot den interne, og tilføjer i kaldet yderligere parametre med relevante værdier. Opgave 3 Implementer to sorteringsalgoritmer baseret på dine implementationer af ovenstående interfaces PQ og Dict. Den ene algoritme skal implementere Heapsort ved gentagne indsættelser i en prioritetskø, efterfulgt af gentagne extractmin s. Datadelen af elementerne kan her sættes til at være null. Den anden algoritme skal implementere, hvad der kan kaldes Treesort: gentagne indsættelser i en dictionary, efterfulgt af et inorder gennemløb. De to algoritmer skal implementeres hver for sig i to programmer kaldet henholdsvis Heapsort og Treesort. Disse programmer skal bruge de ovenfor udviklede klasser PQHeap og DictBinTree som biblioteksfunkioner. Programmerne skal læse fra standard input (der som default er tastaturet), og skrive til standard output (der som default er skærmen). De skal antage, at input er en sekvens af char s bestående af heltal adskilt af whitespace. Man kan således bruge en Scanner fra biblioteket java.util og metoden nextint() til at indlæse tallene. Programmerne skal som output skrive tallene fra input i sorteret orden på standard output, adskilt af whitespace. Derved skal Heapsort kunne kaldes således i en kommandoprompt: java Heapsort 34 645-45 1 34 0 Ctrl-D og skal så give flg. output på skærmen: -45 0 1 34 34 645 Programmet Treesort skal opføre sig på samme måde. Bemærk at ved 4

hjælp af redirection 2 af standard input og output kan man i en kommandoprompt anvende programmerne (helt uden at ændre i dem) på filer også: java Heapsort < inputfile > outputfile 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 3. En detaljer er, at man under scan af input ikke ved, hvor mange der er. Dette er et problem for Heapsort, som skal kende det maksimale antal elementer i prioritetskøen. Én løsning er at indlæse i en ArrayList, og derfra (når scan af input stopper, og man kender antallet af elementer) lave inserts i en prioritetskø. Formalia Lav en rapport, som beskriver dine løsninger af opgaverne ovenfor. Da besvarelsen i store træk består af kode, skal rapporten struktureres som følger: En kort introduktion, som giver overblik over, hvad rapporten indeholder og besvarer. Din kode (evt. undtagen de mest trivielle dele), indlejret mellem tekstdele, som forklarer hvad koden indeholder og gør. Hvis du har nogle interessante designvalg (dvs. nogle, der ikke er eksplicit beskrevet i opgaveteksten), så beskriv disse i størst detalje. For at indlejre kode(bidder) i tekst i L A TEX kan du f.eks. bruge pakken listings, eller blot environment et verbatim. Et afsnit med beskrivelse af de test, du har udført for at sikre dig at koden fungerer korrekt. Fokuser mest på, hvad du har valgt at teste, mindre på at dokumentere resultatet, sålænge dette er som forventet. Hvis der er måder, du er bekendt med, hvorpå programmet ikke løser den stillede opgave, skal du skrive dette eksplicit. Husk at skrive navnene på personerne i gruppen på forsiden af rapporten. 2 Læs evt. om redirection på Unix Power Tools eller Wikipedia. 3 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.) 5

Rapporten skal afleveres udprintet på papir i instruktorens boks på Imada (vælg een 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 een kopi per gruppe. Derudover skal rapporten (i pdf -format) samt alle Java source-filer 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 eet zip-arkiv (med alle filer på topniveau, dvs. uden nogen directory struktur). Der behøves kun afleveres under een persons navn i gruppen. 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: Onsdag den 8. april, 2015, kl. 12: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. 6