DM507/DS814 Algoritmer og datastrukturer

Forår 2020
Rolf Fagerberg


Generel information

Kurset starter mandag den 3. februar og slutter mandag den 25. maj.

Den skriftlige multiple-choice eksamen finder sted online torsdag den 11. juni kl. 09:30 til 12:30.

Der er en spørgetime med underviseren onsdag 10. juni kl. 11:00 på dette Zoom mødelink (optagelse af spørgetimen).

Datoen for reeksamen er onsdag-fredag 6.-7. august, 2020. Reeksamen er mundtlig og foregår på Zoom. Listen af emner man kan trække samt andre oplysninger kan findes her. Rækkefølgen og tider til eksamen kan ses på et opslag på kursets Blackboard side. Der afholdes en spørgetime før reeksamen tirsdag den 4. august kl. 15:00 på Zoom linket for reeksamen.

Der er separat reeksamen i projektdelen. Du skal aflevere en løsning af samme projekt (men ikke eventuelle dele I-III, som allerede er blevet godkendt i forår 2020) på Blackboard under SDU Assignment senest torsdag den 13. august kl. 12:00.

Timer

Uge Type Dato Tid Lokale Indhold
6 F Mandag 3/2 15-17 U55 Introduktion til kurset (slides, kapitel 1 i lærebogen). Eksempel på algoritmeanalyse: Ombytningspuslespil (slides, noter). Et ombytningspuslespil fra nettet. Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 1.1, 1.4 og 1.8.
6 F Fredag 7/2 12-14 U55 Start på sorteringsalgoritmer: Insertionsort, Selectionsort, Mergesort (side 147-150 i lærebogen, afsnit 2.1-3 i lærebogen, side 1-11 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. Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 1.5-7.

Asymptotisk notation (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. Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 2.1-4 (evt. også 2.5 for ekstra eksempler).

6 E       Opgaver
7 F Torsdag 13/2 12-14 U55 Mere om asymptotisk notation (afsnit 3.1 i lærebogen, slides). Rekursive algoritmer (side 30 i lærebogen, slides).
7 E       Opgaver
8 F Mandag 17/2 15-17 U55 Testspørgsmål i asymptotisk analyse.

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

8 F Torsdag 20/2 12-14 U55 Flere sorteringsalgoritmer:

Quicksort (afsnit 7.1-3 i lærebogen, næste dele af slides). Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 5.1-4.

Start på Heapsort (afsnit 6.1-4 i lærebogen, B.5.3 i lærebogen, sidste del af slides). Forslag til videomateriale: Mifta Sintaha.

8 E       Opgaver
9 F Tirsdag 25/2 16-18 U45 Slut på Heapsort (afsnit 6.1-4 i lærebogen, B.5.3 i lærebogen, sidste del af slides). Forslag til videomateriale: Mifta Sintaha.

Prioritetskøer (afsnit  6.5 i lærebogen, slides). Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 12.1-3 [bemærk at de enkelte heap-operationer ikke nødvendigvis hedder det samme som i bogen].

Udlevering og diskusson af projektet, del I. [Java version: projektbeskrivelse, del I, PQ.java, Element.java, PQSort.java, Testfiler.zip.] [Python version: projektbeskrivelse, del I, PQSort.py, Testfiler.zip.]

9 E       Opgaver
10 F Tirsdag 3/3 16-18 U55 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)). Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 8.6.

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 første halvdel af disse slides.

10 F Fredag 6/3 08-10 U55 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. Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 13.1-2 samt 13.3 indtil 22:00.

Rød-sorte træer (kapitel 13 i lærebogen, midten af slides (sletninger gennemgås dog først næste gang)). Forslag til videomateriale: Tim Roughgarden, Stanford, afsnit 13.4-6. 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.

10 E       Opgaver
11 F Torsdag 12/3 Multiple-choice test (25 minutter). Kan findes i Blackboard under E-test som MC test 1.

Sletning i rød-sorte træer (screencast [især de sidste dele], afsnit 13.4 i lærebogen, side 26-30 i slides)).

Implementation af dictionaries via hashing (screencast, afsnit 11.1-4 i lærebogen [dog ikke siderne 265-268 og 274-276], slutningen af slides). Forslag til yderligere videomateriale: Tim Roughgarden, Stanford, afsnit 14.1-3 og 15.1.

11 E       Opgaver. Instruktorernes løsninger til del II, CountingSort.java, counting_sort.py.
12 F Tirsdag 17/3 Udlevering og diskussion af Projekt, del II (screencast) [Java version: projektbeskrivelse, Dict.java.] [Python version: projektbeskrivelse.]

Dekoration af binære søgetræer (screencast, afsnit 14.1-2 i lærebogen, slides). Forslag til yderligere videomateriale: Tim Roughgarden, Stanford, afsnit 13.3 fra 22:00.

Invarianter (screencast, siderne 18-20, 32-33, 157, 171-173 og 318-322 i lærebogen, slides).

12 F Torsdag 19/3 Divide and Conquer algoritmer, rekursionsligninger, og analyse heraf via rekursionstræer og via Master Theorem (screencast, afsnit 4.0, 4.4 og 4.5 i lærebogen, slides side 1-20). Forslag til yderligere videomateriale: 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. Instruktorernes løsninger.
13 F Torsdag 26/3

Mere om rekursionstræsmetoden og Master Theorem (screencast, afsnit 4.0, 4.4 og 4.5 i lærebogen, slides side 21-30).

En berømt Divide and Conquer algoritme: Strassens algoritme for matrix-multiplikation (screencast, afsnit 4.2 i lærebogen, slides). Forslag til yderligere videomateriale: 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 E       Opgaver. Instruktorernes løsninger.
14 F Tirsdag 31/3 08-10 Zoom mødelink Dynamisk programmering (optagelse af videoundervisning, afsnit 15.1-2 i lærebogen, slides. Forslag til yderligere videomateriale: Dan Suthers, University of Hawaii,

Bellmans forklaring om historien bag navnet Dynamisk Programmering (ikke pensum).

14 E       Opgaver. Instruktorernes løsninger, optagelse af spørgetime.
14 F Torsdag 2/4 12-14 Zoom mødelink

Mere om dynamisk programmering (screencast, optagelse af videoundervisning, afsnit 15.4 i lærebogen, slides). Forslag til yderligere videomateriale: Dan Suthers, University of Hawaii, Dan Suthers, University of Hawaii.

Midtvejsevaluering af kurset.

16 F Torsdag 16/4 12-14 Zoom mødelink Multiple-choice test (45 minutter). Kan findes i Blackboard under E-test som MC test 2.

Grådige algoritmer (optagelse af videoundervisning, afsnit 16.1-3 i lærebogen, slides). 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.

Udlevering og indledende diskussion af Projekt, del III.

[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 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 angivelse af korrekt størrelse efter komprimering.]

16 E Spørgetime I: mandag 20/4 14:15-15:00

Spørgetime II: onsdag 22/4 14:15-15:00

  Zoom mødelink Opgaver.

Tilhørende filer (Java): to biblioteksfunktioner BitInputStream.java, BitOutputStream.java, samt et eksempel på brug af dem Test.java (læs kommentarer i programmet).

Tilhørende filer (Python): biblioteket bitIO.py, samt et eksempel på brug af det test.py (læs kommentarer i programmet).

Instruktorernes løsninger, optagelse af spørgetime I, optagelse af spørgetime II.

17 F Tirsdag 21/4 10-12 Zoom mødelink Mere gennemgang af projektet, del III (optagelse af videoundervisning, tegneserieudgave af del III).

Bevis for korrekthed af Huffmans algoritme (optagelse af videoundervisning, afsnit 16.3 i lærebogen, sidste del af slides).

Datastrukturer for disjoint sets (optagelse af videoundervisning, afsnit 21.1-3 i lærebogen, slides).

Multiple-choice test i opgaveteksten til projekt del III (15 minutter). Kan findes i Blackboard under E-test som MC test Projekt Del III.

17 F Torsdag 23/4 12-14 Zoom mødelink Afslutning af datastrukturer for disjoint sets (optagelse af videoundervisning, afsnit 21.1-3 i lærebogen, slides).

Start på grafalgoritmer: repræsentation af grafer (optagelse af videoundervisning, afsnit 22.1 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: Tim Roughgarden, Stanford, afsnit 9.2 og 10.1-3.

17 E Spørgetime: mandag 27/4 14:15-15:00   Zoom mødelink Opgaver.

Instruktorernes løsninger, optagelse af spørgetime.

18 F Torsdag 30/4 12-14 Zoom mødelink BFS gennemløb og DFS grafgennemløb (optagelse af videoundervisning, afsnit 22.2-3 i lærebogen, slides). Forslag til yderligere videomateriale: Tim Roughgarden, Stanford, afsnit 10.4-6.
18 E Spørgetime I: mandag 4/5 14:15-15:00

Spørgetime II: onsdag 6/5 14:15-15:00

  Zoom mødelink Opgaver.

Instruktorernes løsninger, optagelse af spørgetime I, optagelse af spørgetime II.

19 F Mandag 4/5 12-14 Zoom mødelink Afslutning på DFS, DAGs, topologisk sorting (optagelse af videoundervisning, afsnit 22.3-4 i lærebogen, slides).

Sammenhængskomponenter i uorienterede grafer og stærke sammenhængskomponenter i orienterede grafer (optagelse af videoundervisning, side 1170-71 og 615-17 i lærebogen, slides).

19 F Torsdag 7/5 12-14 Zoom mødelink Minimum udspændende træer (optagelse af videoundervisning, kapitel 23 i lærebogen, slides).
19 E Spørgetime: mandag 11/5 14:15-16:00   Zoom mødelink Opgaver

Instruktorernes løsninger, optagelse af spørgetime del 1, optagelse af spørgetime del 2.

20 F Tirsdag 12/5 10-12 Zoom mødelink Korteste veje, single source, Bellman-Fords algoritme (optagelse af videoundervisning, afsnit 24.0 og 24.1 i lærebogen, slides side 1-11) . Forslag til yderligere videomateriale: Tim Roughgarden, Stanford, afsnit 11.1-4.
20 E Spørgetime I: mandag 18/5 14:15-16:00

Spørgetime II: onsdag 20/5 14:15-16:00

  Zoom mødelink Opgaver. Instruktorernes løsninger, optagelse af spørgetime I, optagelse af spørgetime II.
21 F Tirsdag 19/5 10-12 Zoom mødelink

Afslutning af korteste veje, single source: Dijkstras algoritme, shortest paths på DAGs. Korteste veje, all-pairs. (Optagelse af videoundervisning, afsnit 24.2-3 i lærebogen, afsnit 25.0 og 25.2-3 i lærebogen, slides. Forslag til yderligere videomateriale: Tim Roughgarden, Stanford, afsnit 11.1-4.

21 E Spørgetime: mandag 25/5 14:15-16:00     Opgaver. Instruktorernes løsninger, optagelse af spørgetime.


Maintained by Rolf Fagerberg (rolf@imada.sdu.dk)