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

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. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering af information er en fundamental og central opgave.

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

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

Datastrukturer. Datastruktur = data + operationer herpå

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Datastrukturer. Datastruktur = data + operationer herpå

DM507 Algoritmer og datastrukturer

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

Introduktion til DM507

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

Rolf Fagerberg. Forår 2015

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

Skriftlig eksamen i Datalogi

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

Rolf Fagerberg. Forår 2013

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

Eksamensopgaver i LaTeX-delen af IT-1B

Rolf Fagerberg. Forår 2015

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

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

Abstrakte datatyper C#-version

Skriftlig eksamen i Datalogi

DANMARKS TEKNISKE UNIVERSITET

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

Test af It-komponent

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Datastrukturer (recap)

Skriftlig eksamen i Datalogi

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

Tegninger ved skriftlig prøve i fysik A, htx

DM502. Peter Schneider-Kamp

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

Datastrukturer (recap) Datastruktur = data + operationer herpå

Eksempel: Skat i år 2000

Prioritetskøer og hobe. Philip Bille

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

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

Rolf Fagerberg. Forår 2014

Videregående Programmering for Diplom-E Noter

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

Grundlæggende Algoritmer og Datastrukturer

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

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

Eksamensopgaver datalogi, dlc 2011 side 1/5. 1. Lodtrækningssystem

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

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

Rolf Fagerberg. Forår 2012

Kursusarbejde 3 Grundlæggende Programmering

Virksomhedens IT værktøjer

Skriftlig Eksamen Algoritmer og sandsynlighed (DM538)

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

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

Brugermanual til Assignment hand in

Kapitel 6 Events i C#

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

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

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

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

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Lærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen

Sammenlign og byt. Et eksempel på dokumentering af et program

SWC eksamens-spørgsmål. Oversigt

Danmarks Tekniske Universitet

Hvad er Objekter - Programmering

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

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

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

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

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

SWC Elementer i klassedefinition

Eksamensopgaver i DM17, Januar 2003

Programmering 2. dprog2 E

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Undervisningsbeskrivelse

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

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

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

Forelæsning Uge 5 Mandag

Transkript:

DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således at arbejdet strækkes over hele semesteret. Deadline for del I er fredag den 18. marts. 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 først at implementere datastrukturen prioritetskø, og derefter bruge den til at sortere tal. Prioritetskøen vil blive brugt igen senere i del III af projektet. Det overordnede mål for hele projektet er træning i at overføre kursets viden om algoritmer og datastrukturer til konkret programmering. Projektet og den skriftlige eksamen komplementerer derfor hinanden, og projektet er ikke specielt tænkt som en forberedelse til den skriftlige eksamen. Opgaver Opgave 1 Du skal i Java implementere en datastruktur, som tilbyder (i Java: implements) følgende interface: public interface PQ { public Element extractmin(); public void insert(element e); Her er Element en type, der implementerer et (nøgle,data)-par. Denne type er defineret ved følgende klasse: 1

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 blot tilgås som e.key og e.data. Vi vil omtale e.key som elementets prioritet. Elementers prioriteter er altså af typen int, og deres associerede data er af typen Object. Metoden extractmin() returner det element i prioritetskøen som har mindst prioritet. 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. Implementationen skal laves ved hjælp af strukturen heap i et array af Elements, og skal basere sig på pseudo-koden i Cormen et al. kapitel 6 på siderne 163, 154, 152 og 164. Dog kan følgende simplificeringer gøres: på side 163 kan første if udelades pga. antagelsen om at prioritetskøen ikke er tom, og på side 164 kan de to stykker pseudo-kode på siden bygges sammen til én (pga. at vi ikke skal lave en eksplicit increasekey() (eller rettere, for min-heaps, en decreasekey())), hvorved man kan spare brugen af samt if i det første stykke pseudo-kode. 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), som returnerer en ny, tom prioritetskø. Argumentet maxelms angiver det maksimale antal elementer i køen. Der vil være behov for at implementere metoder udover dem i interfacet, til internt brug i klassen. Bemærk følgende detaljer: Du skal i dette projekt lave en min-heap struktur, mens bogen formulerer sin pseudo-kode for en max-heap struktur. Pseudo-koden skal derfor have alle uligheder vendt. Bogens pseudo-kode indekserer arrays startende med 1, mens Java starter med 0. En simpel måde at anvende bogens pseudo-kode på i 2

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. Parametrene i metoderne i interfacet PQ er ikke præcis de samme i bogens pseudo-kode som. Dette skyldes dels at i objektorienteret programmering kaldes metoder på et objekt Q via syntaksen Q.metode() fremfor metode(q), og dels at bogen kun opererer med prioriteter og ikke elementer med ekstra data. Derudover er A i bogens pseudokode et array indeholdende heapen, hvilket ikke skal kunne tilgås direkte af brugere af et prioritetskø-objekt Q på anden måde end gennem metoderne fra interfacet. Opgave 2 Du skal implementere en sorteringsalgoritme baseret på at bruge metoderne i interfacet PQ. Algoritmen skal bestå i at lave gentagne insert s i en prioritetskø, efterfulgt af at lave gentagne extractmin s. Da vi kun skal sortere tal kan data-delen af elementerne sættes til at være null. 1 Algoritmen skal implementeres i et program kaldet Heapsort. Dette program skal bruge din ovenfor udviklede klasse PQHeap som blackbox/biblioteksfunktion. Programmet Heapsort skal læse fra standard input (der som default er tastaturet), og skrive til standard output (der som default er skærmen). Input skal læses via klassen Scanner fra biblioteket java.util og skal bruge dens metode nextint() til at indlæse tallene. Mere præcist er input en sekvens af char s bestående af heltal adskilt af whitespace. Programmet skal som output skrive tallene i sorteret orden, adskilt af whitespace. Derved skal Heapsort kunne kaldes således i en kommandoprompt: java Heapsort 34 645-45 1 34 0 Ctrl-D (Control-D betyder slut på data under Linux og Mac, under Windows brug Ctrl-Z og derefter Enter) og skal så give flg. output på skærmen: -45 0 1 34 34 645 1 Senere i del III af projektet skal data-delen faktisk bruges til noget. 3

Bemærk at ved 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 tal 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 insert s i en prioritetskø. Formalia Du skal kun aflevere dine to Java source-filer PQHeap.java og Heapsort.java. 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. 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: Fredag den 18. marts, 2015, kl. 12:00. 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.) 4

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. 5