DM507/DS814/SE4-DMAD Algoritmer og datastrukturer
Forår 2022
Rolf Fagerberg
Generel information
Kurset starter tirsdag den 1. februar og slutter fredag den
20. maj.
Timer
Uge |
Type |
Dato |
Tid |
Lokale |
Indhold |
5 |
F |
Tirsdag 1/2 |
10-12 |
U45 |
Introduktion til kurset (slides, kapitel 1 i
lærebogen).
Eksempel på en (meget detaljeret) algoritmeanalyse: Ombytningspuslespil
(slides, noter). Et
ombytningspuslespil
fra nettet.
Optagelse af online forelæsning 2021.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 1.1, 1.4 og 1.8.
|
5 |
F |
Torsdag 3/2 |
14-16 |
U55 |
Start på sorteringsalgoritmer: Insertionsort, Selectionsort, Mergesort
(side 147-150 i lærebogen, afsnit 2.1-3 i lærebogen, side 1-9 i
slides). Vi vender tilbage til begreberne
"Invarianter" og "Divide and Conquer" lidt senere i kurset - de dele
af teksten, som beskriver disse begreber, kan indtil videre læses
let.
Optagelse af online forelæsning 2021.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 1.5-7.
|
5 |
E |
|
|
|
Opgaver.
|
6 |
F |
Tirsdag 8/2 |
10-12 |
U45 |
Afslutning af Mergesort (side 147-150 i lærebogen, afsnit 2.1-3 i
lærebogen, side 10-12 i slides).
Asymptotisk analyse (afsnit 3.1 i lærebogen,
slides, Java-programmerne fra
slides: Linear.java,
Quadratic.java, Cubic.java).
Det kan være en fordel at orientere sig i afsnit 3.2 i lærebogen hvis
der i kurset bruges matematiske formler, definitioner og metoder, man
har glemt.
Optagelse af online forelæsning 2021.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 2.1-4 (evt. også 2.5 for ekstra
eksempler).
|
6 |
E |
|
|
|
Opgaver for DM507/DS814,
opgaver for SE4-DMAD (samme opgaver i en
lidt anden gruppering pga. skemaet).
|
7 |
F |
Tirsdag 15/2 |
10-12 |
U45 |
Repetition af asymptotisk analyse (afsnit 3.1 i lærebogen,
slides).
Et eksempel på at forskellige algoritmer for samme beregningsproblem
kan have meget forskellige køretider: the maximum sub-array problem
(wikipedia,
MaxSum1.java, MaxSum2.java,
MaxSum3.java).
Optagelse af online forelæsning 2021.
|
7 |
F |
Torsdag 17/2 |
14-16 |
U55 |
Divide-and-conquer/rekursive algoritmer (side 30 i lærebogen,
slides).
Flere sorteringsalgoritmer: Quicksort (afsnit 7.1-3 i lærebogen, næste
dele af
slides).
Optagelse af online forelæsning 2021 (rekursive algoritmer). Optagelse af online forelæsning 2021 (quicksort).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 5.1-4.
|
7 |
E |
|
|
|
Opgaver.
|
8 |
F |
Tirsdag 22/2 |
10-12 |
U45 |
Flere sorteringsalgoritmer: Heapsort (afsnit 6.1-4 i lærebogen, B.5.3
i lærebogen, sidste del af slides).
Prioritetskøer (afsnit 6.5 i lærebogen, slides).
Optagelse af online forelæsning 2021
(heapsort). Optagelse af online
forelæsning 2021 (prioritetskøer).
Forslag til yderligere videomateriale (ikke pensum):
Mifta Sintaha,
Tim
Roughgarden, Stanford, afsnit 12.1-3 [bemærk at de enkelte
heap-operationer ikke nødvendigvis hedder det samme som i bogen].
|
8 |
E |
|
|
|
Opgaver for DM507/DS814,
opgaver for SE4-DMAD (samme opgaver i en
lidt anden gruppering pga. skemaet).
|
9 |
F |
Tirsdag 1/3 |
10-12 |
U45 |
Denne forelæsning varetages af Lene Monrad Favrholdt.
Nedre grænser for sammenligningsbaseret sortering (afsnit 8.1 i
lærebogen, første del af slides,
eksempler på decisiontrees for insertionsort
(n=1,2,3,4,5,6,7),
mergesort
(n=1,2,3,4,5,6,7))
og heapsort
(n=1,2,3,4,5,6,7)).
Flere sorteringsalgoritmer: sortering af heltal med Countingsort og
Radixsort (afsnit 8.2-3 i lærebogen, anden del af
slides). For at forstå sidste
side af slides om Radixsort, skal man kende det binære talsystem. Gør
man ikke det, så check side 1-5 i disse
slides.
Annoterede slides fra Lenes forelæsning.
Optagelse af online
forelæsning 2021.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 8.6.
|
9 |
F |
Torsdag 3/3 |
14-16 |
U55 |
Denne forelæsning varetages af Lene Monrad Favrholdt.
Dictionaries og deres implementation via binære søgetræer
(side 229-230 i lærebogen, afsnit 10.4 i lærebogen, afsnit 12.1-3 i
lærebogen, første del af slides).
Start på rød-sorte træer (afsnit 13.1-2 i lærebogen, starten af midten af
slides).
Annoterede slides fra Lenes
forelæsning. Optagelse af online forelæsning 2021
(binære søgetræer). Optagelse af
online forelæsning 2021 (start af rød-sorte træer).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 13.1-2 samt 13.3 indtil 22:00.
|
9 |
E |
|
|
|
Opgaver.
|
10 |
F |
Tirsdag 8/3 |
10-12 |
U45 |
Mere om rød-sorte træer, indsættelse i rød-sorte træer (afsnit 13.3-4
i lærebogen, midten af slides.
Bemærk at lærebogen er ret tung læsning i kapitel 13. Det skyldes
dels, at dens pseudo-kode er fungerende kode (robust og gennemtænkt,
så den også virker i specialtilfælde, såsom tomme træer, etc.) med
alle detaljer, og dels at den udtrykker og beviser invarianter på
niveau 2 (mere om invarianter til en senere forelæsning), dvs. under
henvisning til denne kode. Det anbefales (for alle emner, men her
endnu mere end normalt) at læse lærerens slides før man nærlæser
lærebogen.
Udlevering og diskussion af projektet, del I (kun for DM507 og DS814).
Java version:
projektbeskrivelse, del I,
PQ.java, Element.java,
PQSort.java, Testfiler.zip.
Python version: projektbeskrivelse,
del I, PQSort.py,
Testfiler.zip.
Optagelse af online forelæsning 2021
(mere om rød-sorte træer, indsættelse i rød-sorte træer).
Optagelse af online forelæsning
2021 (projekt del
I). Optagelse
af online forelæsning 2021 (mere projekt del I).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 13.4-6.
|
10 |
E |
|
|
|
Opgaver for DM507/DS814,
opgaver for SE4-DMAD (samme opgaver i en
lidt anden gruppering pga. skemaet).
|
11 |
F |
Tirsdag 15/3 |
10-12 |
U45 |
Sletning i rød-sorte træer (afsnit 13.4 i lærebogen, side 14-15 og
27-31 i slides)).
Implementation af dictionaries via hashing (afsnit 11.1-4 i lærebogen
[dog ikke siderne 265-268 og 274-276], slutningen af
slides).
Optagelse af online forelæsning 2021
(sletning i rød-sorte træer, hashing).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 14.1-3 og 15.1.
|
11 |
F |
Torsdag 17/3 |
14-16 |
U55 |
Repetition af hashing. Dekoration af binære søgetræer (afsnit 14.1-2 i
lærebogen, slides).
Optagelse af online
forelæsning 2021 (repetition af hashing).
Optagelse af online
forelæsning 2021 (dekoration af binære søgetræer).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 13.3 fra 22:00.
|
11 |
E |
|
|
|
Opgaver.
|
12 |
F |
Tirsdag 22/3 |
10-12 |
U45 |
Invarianter (siderne 18-20, 32-33, 157, 171-173 og 318-322 i
lærebogen, slides).
Divide and Conquer algoritmer, rekursionsligninger, og analyse heraf
via rekursionstræer og via Master Theorem (afsnit 4.0, 4.4 og 4.5 i
lærebogen, slides side 1-22).
Optagelse af online
forelæsning 2021.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 4.1, 4.2, 4.3 og 4.5 [bemærk at udgaven
af Master Theorem i disse videoer er en smule mindre generel end
lærebogens, og at rækkefølgen af cases er forskellig].
|
12 |
E |
|
|
|
Opgaver for DM507/DS814,
opgaver for SE4-DMAD (samme opgaver i en
lidt anden gruppering pga. skemaet).
|
13 |
F |
Tirsdag 29/3 |
10-12 |
U45 |
Mere om rekursionstræsmetoden og Master Theorem (afsnit 4.0, 4.4 og
4.5 i lærebogen, slides side
20-30).
En berømt Divide and Conquer algoritme: Strassens algoritme for
matrix-multiplikation (afsnit 4.2 i lærebogen,
slides).
Optagelse af online forelæsning
2021.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 3.3.
For en historisk gennemgang af udviklingen i køretid for algoritmer
for matrix-multiplikation, se denne
wikipedia
side (ikke pensum).
|
13 |
F |
Torsdag 31/3 |
14-16 |
U55 |
Dynamisk programmering (afsnit 15.1-2 i lærebogen,
slides).
Bellmans
forklaring om historien bag navnet Dynamisk Programmering (ikke
pensum).
Udlevering af projektet, del II (kun for DM507 og DS814). Java
version: projektbeskrivelse, del II,
Dict.java. Python version:
projektbeskrivelse, del II,
Optagelse af online forelæsning 2021.
Optagelse af online
gennemgang af projektbeskrivelse 2021, Java version.
Optagelse af online gennemgang af
projektbeskrivelse 2021, Python version.
Forslag til yderligere videomateriale (ikke pensum):
Dan
Suthers, University of Hawaii.
|
13 |
E |
|
|
|
Opgaver.
|
14 |
F |
Tirsdag 5/4 |
10-12 |
U45 |
Mere om dynamisk programmering (afsnit 15.4 i lærebogen,
slides).
Optagelse af online forelæsning 2021,
mere optagelse af online
forelæsning 2021.
Forslag til yderligere videomateriale (ikke pensum):
Dan
Suthers, University of Hawaii,
Dan
Suthers, University of Hawaii.
|
14 |
E |
|
|
|
Opgaver for DM507/DS814,
opgaver for SE4-DMAD (samme opgaver i en
lidt anden gruppering pga. skemaet).
|
16 |
F |
Tirsdag 19/4 |
10-12 |
U45 |
Grådige algoritmer (afsnit 16.1-3 i lærebogen,
slides).
Optagelse af online forelæsning 2021.
NB: både
afsnit 16.1 og første del af 16.2 er ret langstrakt, og refererer
nogle gange til dynamisk programmering (kapitel 15) - læs disse afsnit
let, og fokuser på slides.
Midtvejsevaluering af kurset.
|
16 |
F |
Torsdag 21/4 |
14-16 |
U55 |
Bevis for korrekthed af Huffmans algoritme (afsnit 16.3 i lærebogen,
sidste del af slides).
Datastrukturer for disjoint sets (afsnit 21.1-3 i lærebogen,
slides).
Udlevering af Projekt, del III (kun for DM507 og DS814).
Java version: projektbeskrivelse.
tegneserieudgave af del III.
Tilhørende filer: to biblioteksfunktioner
BitInputStream.java,
BitOutputStream.java, samt et eksempel på
brug af dem Test.java (læs kommentarer i
programmet). En samling
testfiler samt liste
med angivelse af korrekt størrelse efter komprimering.
Python version: projektbeskrivelse.
tegneserieudgave af del III.
Tilhørende filer: bibliotek bitIO.py samt et eksempel
på brug af det test.py (læs kommentarer i programmet),
klassen Element.py samt et eksempel på brug af det
PQSortElements.py (læs kommentarer i
programmet). En samling
testfiler samt liste med
angivelse af korrekt størrelse efter komprimering.
|
16 |
E |
|
|
|
Opgaver.
|
17 |
F |
Tirsdag 26/4 |
10-12 |
U45 |
Start på grafalgoritmer: repræsentation af grafer, BFS grafgennemløb
(afsnit 22.1-2 i lærebogen, første halvdel af
slides). Derudover er de første tre
sider af appendiks B.4 i lærebogen (side 1168-70) om basal terminologi
for grafer overladt til selvstændig læsning.
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 9.2 og 10.1-2.
|
17 |
E |
|
|
|
Opgaver for DM507/DS814,
opgaver for SE4-DMAD (samme opgaver i en
lidt anden gruppering pga. skemaet).
|
18 |
F |
Tirsdag 3/5 |
10-12 |
U45 |
Bevis for BFS egenskaber, DFS grafgennemløb (afsnit 22.2-3 i
lærebogen, slides).
DAGs, topologisk sorting (afsnit 22.4 i lærebogen,
slides).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 10.3 og 10.5.
|
18 |
F |
Torsdag 5/5 |
14-16 |
U55 |
Sammenhængskomponenter i uorienterede grafer og stærke
sammenhængskomponenter i orienterede grafer (side 1170-71 og 615-17 i
lærebogen, slides).
Start på Minimum udspændende træer (kapitel 23 i lærebogen,
slides).
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 10.6, 10.4 og 10.7.
|
18 |
E |
|
|
|
Opgaver.
|
19 |
F |
Tirsdag 10/5 |
10-12 |
U45 |
Bevis for korrekthed af algoritmen for strongly connected components
(side 617-20 i lærebogen,
slides).
Mere om Minimum udspændende træer, Prim-Jarniks algoritme, Kruskals
algoritme (kapitel 23 i lærebogen, slides).
|
19 |
E |
|
|
|
Opgaver.
|
20 |
F |
Tirsdag 17/5 |
10-12 |
U45 |
Korteste veje, single source: Bellman-Fords algoritme, Dijkstras
algoritme, shortest paths på DAGs (afsnit 24.0 til 24.3 i lærebogen,
første del af slides). [Flg. er på slides, men er ikke pensum i år: Korteste veje,
all-pairs: Floyd-Warshalls algoritme, Johnsons algoritme (afsnit 25.0
og 25.2-3 i lærebogen, sidste del af
slides.]
Forslag til yderligere videomateriale (ikke pensum):
Tim
Roughgarden, Stanford, afsnit 11.1-4.
|
20 |
E |
|
|
|
Opgaver.
|
Maintained by Rolf Fagerberg
(rolf@imada.sdu.dk)
|
|