02105+02326 Algoritmer og Datastrukturer


Hold og undervisere | Ugeplan | Afleveringsopgave | Eksamenssæt | Generel info | Ofte stillede spørgsmål

Hold og undervisere

Kursusansvarlig: Philip Billephbi@dtu.dk, kontortid mandag + torsdag 12.30-13.00.

Øvelsestimer. Torsdage 8.00-10.30.

Hold Lokale Retning Type Underviser
1 308/holdområde 1. sal syd (+ 308/aud. 13 kl. 10.00-10.30) diplom regne Lasse Kokholm
2 308/holdområde 1. sal nord (+ 308/aud. 12 kl. 10.00-10.30) diplom regne Anders Palmelund
3 324/030 civil regne Emil Imbert Villumsen
4 324/040 (+ 306/aud. 33 kl. 10.00-10.30) civil regne Mathias Kaas-Olsen
5 324/060 civil regne Nicolai Andre Brogaard Riis
6 324/020 civil/diplom gennemgang Frederik Rye Skjoldjensen

Til kurserne er der også reserveret foyerområder i 324 (F003, F004, F005, F008) og et holdlokale 070 som frit kan benyttes. Se kort over områder og lokaler i 308 og 324. Udover de 6 undervisere ovenfor vil Simon Graverholt Søkilde og Anders Roy Christiansen bevæge sig frit rundt i alle lokaler og områder. Som et ekstra tilbud vil der være et undervisninghold med hjælpelærer tilstede i 324/040 torsdage 13.00-14.30. Der vil være særligt fokus på programmering.

Forelæsninger. Torsdage 10.45-12.00 i 116/aud. 81.

Ugeplan

Ugeplanen er tentativ. Den vil blive opdateret i løbet af semestret. Der arbejdes med opgaver fra uge x i uge x+1.

Litteratur "Introduction to Algorithms", 3rd edition (CLRS) af Cormen, Leierson, Rivest og Stein og noter. Man er meget velkommen til at også at benytte supplerende bøger og andre kilder. Se forslag her.

Råd. Slides er designet til forelæsning. Bogen er den primære reference til stoffet. Vi anbefaler at skimme bogen før forelæsning og læse den grundigt efterfølgende. Vi anbefaler at printe slides og skrive noter i dem under forlæsningen.

Uge Emner Slides Ugeseddel Litteratur Demoer
0 Opvarmning: forberedelse, programmeringsforståelse. Opvarmning Kursusguide
1 Basale begreber I: introduktion, algoritmer, datastrukturer, toppunkter. 1x1 · 4x1 Introduktion CLRS kap. 1 Rekursiv toppunktsalgoritme
2 Basale begreber II: søgning, sortering. 1x1 · 4x1 Søgning og sortering CLRS kap. 2 Binær søgning · Indsættelsessortering · Fletning · Flettesortering
3 Basale begreber III: kompleksitet, O-notation, empirisk analyse. 1x1 · 4x1 Analyse af algoritmer CLRS kap. 3
4 Datastrukturer I: stakke, køer, hægtede lister, træer. 1x1 · 4x1 Introduktion til datastrukturer CLRS intro til del III + kap. 10 Stak med tabel · Kø med tabel · Dynamisk tabel 1 · Dynamisk tabel 2
5 Datastrukturer II: Prioritetskøer og hobe. 1x1 · 4x1 Prioritetskøer og hobe CLRS kap. 6 + appendix B.5 Bobl op og ned
6 Grafalgoritmer I: Grafer, repræsentation, søgning, modellering. 1x1 · 4x1 Introduktion til grafer CLRS introduktion til del VI + kap. 22.1-22.4 + appendix B.4-B.5. DFS · BFS
7 Grafalgoritmer II: topologisk sortering, implicitte grafer. 1x1 · 4x1 Orienterede grafer CLRS introduktion til del VI + kap. 22.1-22.4 + appendix B.4-B.5. Topologisk sortering
8 Datastrukturer III: foren og find, dynamiske sammenhængskomponenter. 1x1 · 4x1 Foren og find CLRS kap. 21 pånær 21.4. + Algorithms, 4ed. kap. 1.5 Hurtig forening · Vægtet forening
9 Grafalgoritmer III: mindste udspændende træ, Prims algoritme, Kruskals algoritme. 1x1 · 4x1 Mindste udspændende træ CLRS kap. 23. Prims algoritme · Kruskals algoritme
10 Grafalgoritmer IV: Dijkstras algoritme, korteste veje i vægtede grafer, korteste veje i DAGs. 1x1 · 4x1 Korteste veje CLRS kap. 24 pånær 24.1 og 24.4. Dijkstras algoritme
11 Datastrukturer IV: ordbøger, hashing. 1x1 · 4x1 Hashing CLRS kap. 11 pånær 11.5. hægtet hashing · lineær probering
12 Datastrukturer V: algoritmer på træer, predecessor datastrukturer, binære søgetræer. 1x1 · 4x1 Binære søgetræer CLRS kap. 12 pånær 12.4. Binære søgetræer
13 Opsamling: spørgetime, gennemregning af gammelt eksamenssæt, videregående kurser i algoritmik.


Afleveringsopgave

Den obligatoriske opgave er her.

Eksamenssæt

Civil Civil - vejledende løsning Diplom Diplom - vejledende løsning
02105-2009 02105-2009-vejledende
02105-2010 02105-2010-vejledende 02326-2010 02326-2010-vejledende
02105-2011 02105-2011-vejledende 02326-2011 02326-2011-vejledende
02105-2012 02105-2012-vejledende 02326-2012 02326-2012-vejledende
02105-2013 02105-2013-vejledende 02326-2013 02326-2013-vejledende
02105-2014 02326-2014


Generel info

CodeJudge. Kurset benytter CodeJudge systemet til afprøvning af kode. CodeJudge kan tilgås her.

Piazza. Kurset benytter Piazza som onlineforum til diskussion og hjælp med opgaver. Piazza kan tilgås her.

Ofte stillede spørgsmål

Hvilke programmerings- og matematikforudsætninger kræver kurset? De generelle forudsætninger er at man har gennemført (eller er godt i gang med) et indledende kursus i programmering og matematik. Mere specifikt skal man kunne anvende standard programmeringssprogskonstruktioner i imperative sprog som løkker, betinget udførsel, funktionskald, etc. Man kan frit vælge blandt et par standard programmeringssprog (fx Java og C++) til implementationsopgaverne. Kurset benytter og introducerer diverse emner fra diskret matematik (fx grafer) og det er derfor en fordel at have et kursus i diskret matematik, men ikke et krav. Det er ofte meget individuelt hvor meget programmering og matematik man behøver. Hvis man er tvivl om man har nok, anbefaler vi at bruge lidt tid på at arbejde med pensum og opgaverne fra de første par uger og vurdere derefter.

Jeg trænger til hurtigt at få genopfrisket mine programmeringskundskaber. Hvad anbefaler i? Vi anbefaler bogen "Introduction to Programming in Java", Sedgewick og Wayne. Bogen er skrevet af algoritmikere, er meget kompakt, målrettet mod teknisk programmering og dækker næsten alt det relevante for kurserne i kapitel 1, som kan hentes gratis på bogens hjemmeside.

Jeg får fejl X når jeg uploader mit program til CodeJudge. Hvad skal jeg gøre?/hvordan finder jeg ud af hvad fejlen er?/hjælp!? CodeJudge bør primært bruges som et sidste check for at ens kode virker korrekt (producerer et korrekt output svarende til input) og kører hurtigt. For at finde fejl og debugge din kode anbefaler vi at man konstruerer små testeksempler, afprøver ens kode på dem og arbejder med at finde fejlene.

Hvilke supplerende bøger/materialer anbefaler i? Vi anbefaler følgende glimrende kilder:

Er der vejledende løsninger til opgaverne? Der er vejledende løsninger til et stort udvalg af eksamensopgaverne (se ovenfor) som du kan bruge som gode eksempler på opgavebesvarelser. Til opgaverne på ugesedlen kan du til ethvert tidspunkt få hjælp, vejledning og hints fra en underviser. Det gælder også opgaver fra andre uger end den nuværende. Du er også meget velkommen til at aflevere skriftlige besvarelser på enhver opgave på ugesedlerne (ikke kun de frivillige afleveringsopgaver) til en underviser og dermed få feedback på dit skriftlige arbejde. Endelig er de fleste af de sværere opgaver på ugesedlerne klassiske opgaver, som der findes meget materiale om (både online og i bøger), som vi glædeligt vil være behjælpelige med at pege jer i retning af.

Hvad betyder "giv en algoritme"? Det betyder at man præsenterer en effektiv løsning, beskriver sin løsning kort, præcist og entydigt og argumenterer for korrekthed.

Hvornår afholdes den skriftlige eksamen? Dato og tid kan findes på Campusnet/Portalen. Typisk er dato bestemt vha. skemagruppen for kurset.