- 20.04.2017:
Die Nachklausur ist korrigiert. Sie können Ihre Punktzahl im KVV nachlesen. Das Notenschem
ist hier. Die Nachklausur kann eingesehen werden am Freitag, den 21.04.2017, von 09:00–09:55 Uhr
im SR055. Bei dieser Gelegenheit kann auch die erste Klausur noch einmal eingesehen werden.
- 13.04.2017:
Am Dienstag, den 18.04.2017 findet von 16–18 Uhr die Nachklausur
statt. Außer Schreibutensilien ist lediglich ein beidseitig handbeschriebenes DIN-A4 Blatt
als Hilfsmittel erlaubt. Bitte bringen Sie ein Personaldokument
mit Lichtbild sowie Ihren Studierendenausweis mit. Die Nachklausur findet statt
im SR 006. Bitte bis 16:10 Uhr die Plätze einnehmen. Klausurbeginn um 16:15 Uhr.
Die Einsicht der Nachklausur ist am Freitag, den 21.04.2017, von 09:00–09:55 im SR 055.
Bei dieser Gelegenheit kann auch die erste Klausur noch einmal eingesehen werden.
- 15.02.2017:
Die Klausur ist korrigiert. Sie können Ihre Punktzahl im
KVV nachlesen.
Das Notenschema ist hier. Die Klausur kann eingesehen werden am
Freitag, den 17.02.2017, von 08:00–08:55 Uhr im SR053.
Die Nachklausur ist am Dienstag, den 18.04.2017,
von 16–18 Uhr im SR 006. Falls Sie an der Nachklausur
teilnehmen möchten, melden Sie sich bitte bis zum
11.04.2017 im KVV dazu an. Weitere Details werden noch bekannt gegeben.
- 08.02.2017: Am Dienstag, den 14.02.2017 findet von 10–12 Uhr die Klausur
statt. Außer Schreibutensilien ist lediglich ein beidseitig handbeschriebenes DIN-A4 Blatt
als Hilfsmittel erlaubt. Bitte bringen Sie ein Personaldokument
mit Lichtbild sowie Ihren Studierendenausweis mit. Die Klausur findet statt
im SR 005. Bitte bis 10:10 Uhr die Plätze einnehmen. Klausurbeginn um 10:15 Uhr.
- 24.01.2017: Das dreizehnte Aufgabenblatt ist verfügbar.
Dies ist das letzte reguläre Aufgabenblatt.
- 17.01.2017: Das zwölfte Aufgabenblatt ist verfügbar.
Dies ist das vorletzte reguläre Aufgabenblatt.
- 10.01.2017: Das elfte Aufgabenblatt ist verfügbar.
- 09.01.2017: Die Klausur zur Vorlesung findet statt am
Dienstag, den 14. Februar 2017, von 10–12 Uhr im SR 005.
Alle, die an der Klausur teilnehmen möchten, müssen sich dazu
anmelden. Die Anmeldung erfolgt im KVV
unter Exam Registration. Die Anmeldung muss bis zum 7. Februar 2017
erfolgt sein.
Genauere Details zum Ablauf der Klausur werden noch bekannt gegeben.
- 03.01.2017: Frohes neues Jahr! Das zehnte Aufgabenblatt ist verfügbar.
- 13.12.2016: Das neunte Aufgabenblatt ist verfügbar. Alle Aufgaben
sind Zusatzaufgaben.
- 06.12.2016: Das achte Aufgabenblatt ist verfügbar.
- 29.11.2016: Das siebte Aufgabenblatt ist verfügbar.
- 22.11.2016: Das sechste Aufgabenblatt ist verfügbar.
- 15.11.2016: Das fünfte Aufgabenblatt ist verfügbar.
- 08.11.2016: Das vierte Aufgabenblatt ist verfügbar.
- 07.11.2016: Die Klausur findet statt am Dienstag,
den 14.02.2017 von 10–12 Uhr im SR 005. Die Nachklausur
findet statt am Dienstag, den 18.04.2017, von 16–18 Uhr im
SR 046. Details
werden noch bekannt gegeben.
- 01.11.2016: Das dritte Aufgabenblatt ist verfügbar.
- 25.10.2016: Das zweite Aufgabenblatt ist verfügbar.
- 01.10.2016: Die Website ist online. Die erste Vorlesung findet
statt am Dienstag, den 18.10.2016 um 10 Uhr ct.
Die Übungen beginnen am 26.10.2016.
Die Übungszettel werden ausschließlich online erscheinen
und zwar hier auf dieser Seite.
- Grundlagen
- Berechnungsmodelle
- Rekursionsgleichungen
- O-Notation
- elementare Wahrscheinlichkeitstheorie
- Techniken
- Teile und Herrsche
- Dynamisches Programmieren
- Abschneiden und Suchen
- Gierige Algorithmen
- Lineares Programmieren
- Hashing und Fingerprinting
- untere Schranken
- Paradigmen
- Worst-Case Analyse
- Average-Case Analyse
- Probabilistische Algorithmen
- Amortisierte Analyse
- Online-Algorithmen und kompetitive Analyse
- Approximationsalgorithmen
- Algorithmen und Datenstrukturen
- Suchen, Sortieren und Auswählen
- Viterbi-Algorithmus
- TSP
- Datenstrukturen: Splaybäume, Erdbebenheaps, Disjoint Set Union,
Bloom Filter
- Graphenalgorithmen: Flüsse, Paarungen, Schnitte, minimale
aufspannende Bäume, kürzeste Wege
- Simplex Algorithmus mit Anwendungen, Ellipsoid Algorithmus
- Internet-Algorithmen: Page-Rank, konsistentes Hashing
- Ski-Rental, Paging
- Komplexität
- Klassenzoo: LOGSPACE, P, NP, coNP, PSPACE, etc
- NP-Vollständigkeit, Satz von Cook, Reduktionskonzept
- Umgang mit schwierigen Problemen
- Dienstag, den 18.10.2016
- Administrativa
- Einleitung
- Auswahlproblem.
- S: total geordnete Menge mit n paarweise verschiedenen
Elementen. Rang eines Elements s aus S:
1 + Anzahl Elemente in S kleiner als s.
- Gegeben: Menge S und Zahl k; Gesucht: das Element mit Rang k.
- Annahme: haben eine Funktion splitter(S), welche
garantiert eine Element mit Rang mindestens n/4 und höchstens
3n/4 findet. Wenn splitter nichts kostet, dann
können wir das Auswahlproblem in O(n) Zeit lösen.
Siehe hier.
- Montag, den 24.10.2016
- Implementierung von splitter
- Einfache Möglichkeit: Wähle
zufälliges Element. Mit Wahrscheinlichkeit
1/2 erwischt man einen guten Splitter.
Dies liefert lineare Laufzeit im Erwartungswert
(Hoares Quickselect).
- Der BFPRT-Algorithmus
- Unterteile S in Fünfergruppen. Bestimme
Median jeder Gruppe, bestimme rekursiv den Median der
Mediane, verwende Ergebnis als Splitter.
- Durch genaue Analyse anhand eines Bildes sieht man:
der Median der Mediane ist ein guter Splitter.
- Durch Induktion sieht man, dass die Laufzeit auch
mit dem zusäzlichen rekursiven Aufruf noch linear bleibt
(denn 3/4 + 1/5 < 1, also nimmt die Problemgröße
weiterhin geometrisch ab. Achtung: die Rechnung verkompliziert
sich etwas durch die Rundungsproblematik.)
- Prune and Search (Abschneiden/Stutzen
und Suchen): in jedem Schritt wird ein konstanter Anteil
der Eingabe (z.B., ein Viertel) verworfen (abgeschnitten) und
auf den Rest wird rekurriert (weitergesucht).
- Dienstag, den 25.10.2016
- Grundlagen und Modellierung:
- Berechnungsmodell Registermaschine:
eine mathematische Abstraktion für die von-Neumann-Maschine
- Laufzeit und Speicherbedarf: Gesamtkosten der ausgefürten
Anweisungen und gesamter Platzbedarf
der Registermaschine bei einer festen Eingabe
- Einheitskostenmdell: Jede Anweisung und jede Speicherzelle
hat Kosten 1.
- logarithmisches Kostenmodell: Die Kosten für eine
Anweisung und eine Speicherzelle entspricht der Anzahl der
Bits zur Darstellung der beteiligten Zahlen
- Bei kombinatorischen Algorithmen benutzt man normalerweise
das EKM, bei zahlentheoretischen Algorithm das LKM
- worst-case Laufzeit: Ordnet jeder Eingabegröße
die maximale Laufzeit zu, die eine Eingabe dieser Größe
benötigt
- O-Notation, Pseudocode
- Montag, den 31.10.2016 (vertreten von Boris Klemz)
- Grundlegende Entwurfstechniken
- Teile und Herrsche (Divide and Conquer): Unterteile
in Teilprobleme, löse diese rekursiv,
setze Teillösungen zur Gesamtl&oum;sung zusammen
- Karatsuba-Multiplikation
- Gegeben zwei n-bittige Zahlen a und b, berechne das Produkt
ab.
- Die Schulmethode benötigt quadratisch viele elementare
Additionen und Multiplikationen.
- Karatsuba: Verwende den Teile und Herrsche Ansatz. Unterteile
die n-bittigen Zahlen in vier n/2-bittige Zahlen, führe
die Berechnung rekursiv aus, und setze das Ergebnis zusammen.
- Der naive Ansatz benötigt 4 rekursive Multiplikationen.
Dadurch lässt sich keine Verbesserung erreichen.
- Durch eine geschickte rekursive Beziehung kann man die
Anzahl der rekursiven Multiplikationen auf 3 reduzieren.
- Die resultierende Rekursionsgleichung ergibt eine wesentlich
bessere Laufzeit.
- Techniken für Rekursionsgleichungen
- Methode 1: Rate eine Lösung und beweise die Korrektheit
durch Induktion.
- Methode 2: Setze wiederholt ein, bis ein Muster zu Tage tritt.
Werte die resultierende Summe aus.
- Methode 3: Rekursionsmethode: visualisiere die Rekursion als Baum:
- ein Knoten für jeden Funktionsaufruf, beschriftet mit der
Problemgröße.
- Berechne den Gesamtaufwand auf jeder Ebene.
- Summiere über alle Ebenen.
- Methode 4: Master Theorem:
- Allgemeines Rezept zur Lösung vieler
Rekursionsgleichungen. Nicht immer anwendbar, aber oft.
- Siehe auch hier und
hier.
- Dienstag, den 01.11.2016 (vertreten von Boris Klemz)
- Bestimmen des engsten Punktpaars mit Teile und Herrsche
- Dynamisches Programmieren: Rucksackproblem
- Montag, den 07.11.2016
- Dynamisches Programmieren: Rundreiseproblem
- Dynamisches Programmieren: Versteckte Markov Modelle
- Motivation und Beispiel
- Definition
- Dienstag, den 08.11.2016
- Viterbi-Algorithmus
- Gierige Algorithmen: Intervallauswahl
- Montag, den 14.11.2016
- gierige Algorithmen: Intervallauswahl
- Gegeben: n Intervalle
- Gesucht: grtößtmögliche Teilmenge paarweise
disjunkter Intervalle
- Algorithmus: gehe Intervalle aufsteigend nach Endpunkten durch,
nimm Intervall, wenn es nicht mit bisherigen Intervallen
im Konflikt steht.
- Laufzeit: O(n log n).
- Korrektheitsbeweis durch Austauschargument: können
optimale Lösung schrittweise in gierige Lösung überführen,
ohne die Anzahl der Intervalle zu verringern.
- Elegante Formulierung des Korrektheitsbeweises: Indirekter Beweis.
Nimm optimale Lösung, die gieriger Lösung am meisten ähnelt.
Entweder sind Lösungen identisch, oder wir können sie
durch Austauschargument ähnlicher machen, im Widerspruch zur Annahme.
- Intervallunterteilung
- Gegeben: n Intervalle
- Gesucht: Partition der Intervalle in minimale Anzahl
von Mengen, den nur paarweise disjunkte Intervalle enthalten.
- Algorithmus: gehe Intervalle aufsteigend nach Anfangspunkten
durch. Füge Intervall I zur ersten Menge hinzu, die kein
Intervall enthält, das I von links überlappt.
Eröffne ggf. eine neue Menge.
- Laufzeit: O(n log n).
- Korrektheitsbeweis: Tiefe d der Intervallmenge:
Maximale Anzahl an Intervallen, die einen gemeinsamen Punkt haben.
- Beobachtung: Jede gültige Lösung benötigt mindestens d
Mengen.
- Fakt: Der gierige Algorithmus benötigt höchstens d Mengen.
- Dienstag, den 15.11.2016
- Gierige Algorithmen: Offline-Caching
- Montag, den 21.11.2016
- Datenstrukturen: Das Problem der disjunkten Mengen
- Gegeben: Feste Menge S von n Elementen
- Ziel: Speichere Partition von S in paarweise disjunkte Mengen
- Operationen:
- Find(s): Finde Menge der aktuellen Partition, die s entält
- Union(Si, Sj): Vereinige Mengen Si
und Sj in der aktuellen Partition
- Anwendungen: Zusammenhangskomponenten eines Graphen, Algorithmus
von Kruskal, Perkolation, Segmentierung eines Bildes, FORTRAN
- Einfache Datenstruktur: Darstellung als Wald von disjunkten Mengen
- Jedes Element wird durch ein Objekt dargestellt
- Jede Menge wird durch ein festes repräsentatives Element dargestellt
- Jedes Element besitzt einen Nachfolgerzeiger. Die Nachfolgerzeiger
der repräsentativen Elemente sind NIL, bei den anderen Element
ist garantiert, dass die Nachfolgerzeiger zum repräsentativen
Element f¨hren
- Find: folge Nachfolgezeigern bis zum repräsentativen Element
- Union: Mache ein repräsentatives Element zum Nachfolger des anderen
- Die Laufzeit kann sehr schlecht werden, wenn die Bäume hoch werden
- Union-by-Rank Heuristik: Hänge immer den niedrigeren Baum unter
den höheren Baum. Speichere den Rang eines Knoten, um die
Höhen zu verfolgen
Dienstag, den 22.11.2016
- Analyse der UNION-FIND-Struktur mit Pfadkompression und Union by Rank I
Montag, den 28.11.2016
- Analyse der UNION-FIND-Struktur mit Pfadkompression und Union by Rank II
Dienstag, den 29.11.2016
- Abschluss UNION-FIND
- Amortisierte Analyse
Montag, den 5.12.2016
Dienstag, den 6.12.2016
- Universelles Hashing
- Perfektes Hashing
Montag, den 12.12.2016
- Perfektes Hashing
- Bloom-Filter
Dienstag, den 13.12.2016
Dienstag, den 03.01.2017
- Page-Rank
- Prioritätswarteschlangen
Montag, den 09.01.2017
- Prioritätswarteschlangen
- Quake-Heaps
Dienstag, den 10.01.2017
Montag, den 16.01.2017 (vertreten von Boris Klemz)
- Abschluss der amortisierten Analyse von Quake-Heaps
- Flüsse in Netzwerken: Definitionen und
Beispiele
Dienstag, den 17.01.2017 (vertreten von Boris Klemz)
- Restnetze und der Algorithmus von Ford-Fulkerson
Montag, den 23.01.2017
- Der Algorithmus von Edmonds-Karp
Dienstag, den 24.01.2017
- Lineares Programmieren: Motivation und Definitionen
Montag, den 30.01.2017
Dienstag, den 31.01.2017
- Abschließende Bemerkungen zum Simplex-Algorithmus
- Effiziente Algorithmen und schwierige Probleme
Montag, den 06.02.2017 (vertreten von Boris Klemz)
- NP-Vollständigkeitstheorie: Motivation, Definitionen, Beispiele
Dienstag, den 07.02.2017 (vertreten von Boris Klemz)
- NP-Vollständigkeitstheorie: Reduktionen
Montag, den 13.02.2017
- NP-Vollständigkeitstheorie: Satz von Cook-Levin
Dienstag, den 14.02.2017
Freitag, den 17.02.2017 (SR 053, 08:00–08:55 Uhr)
Dienstag, den 18.04.2017 (SR 006, 16:00–18:00 Uhr)
Freitag, den 21.04.2017 (SR 055, 09:00–09:55 Uhr)
- Einsicht der Nachklausur und der Klausur
Literatur
- T. H. Cormen, C. Leiserson, R. Rivest, C. Stein.
Introduction to Algorithms, MIT Press 2009
Der Klassiker. Dick, enzyklopädisch, detailliert, manchmal
schwer verdaulich.
- J. Kleinberg, E. Tardos. Algorithm Design, Addison-Wesley 2005.
Das andere moderne Standardwerk. Konzentriert sich mehr auf Techniken.
Sehr anwendungsbezogene Aufgaben, weniger Datenstrukturen.
- S. Dasgupta, C. Papadimitriou, U. Vazirani. Algorithms,
Mcgraw-Hill 2006.
Angenehm zu lesen, nicht so umfassend wie die beiden vorherigen Bücher.
Spezielles Schmankerl: ein Kapitel über Quantenalgorithmen.
- U. Schöning. Algorithmik, Spektrum 2011.
Auf deutsch. Umfassend. Für Leute, die Schöning noch aus
der GTI-Vorlesung in guter Erinnerung haben.
- V. Heun. Grundlegende Algorithmen, Vieweg+Teubner 2003.
Eine Alternative auf deutsch. Stark bei den Algorithmen für
Zeichenketten.
- B. Vöcking u. a.. Taschenbuch der Algorithmen, Springer 2008.
Zur Ergänzung und Unterhaltung. Allgemeinverständliche Darstellung
vieler Algorithmen für Schüler_innen.
Es wird eine Klausur am Ende des Semesters geben,
sowie eine Ersatzklausur vor Beginn des
nächsten Semesters.
Dabei gilt die Freiversuchsregel. Das heißt, man kann die
Ersatzklausur nutzen,
um das Ergebnis aus der Hauptklausur
zu verbessern (nur bei erstmaligem Absolvieren des Moduls).
Die Klausur findet statt am Dienstag, den 14.02.2017 von
10–12 Uhr im SR 005.
Die Nachklausur findet statt am
Dienstag, den 18.04.2017, von 16–18 Uhr im
SR 006.
Für den Scheinerhalt muss man
-
regelmäßig an dem Tutorium teilnehmen (bei mindestens 80% der
Termine);
-
mindestens 60% der Punkte auf den Übungszetteln erreichen und
mindestens zweimal im Tutorium vorrechnen; und
-
die Klausur mit mindestens 50% der Gesamtpunktzahl
bestehen.
Die erfolgreiche Teilnahme am Übungsbetrieb und Teilnahme an der Klausur
sind unabhängige Leistungen.
Die Scheine sind benotet. Die Note beruht nur auf den
Klausurergebnissen.
Die Vorlesung findet statt Montag und Dienstag, 10–12 Uhr, im
SR 005 in der Takustraße 9.
Die Tutorien werden betreut von Boris Klemz.
Mittwoch |
12:00–14:00 |
Arnimallee 7, Seminarraum 140 |
Boris Klemz |
14:00–16:00 |
Takustr. 9, Seminarraum 053 |
Boris Klemz |
Sprechzeit des Dozenten: Dienstag 16–17 Uhr in Zimmer 114 und
nach Vereinbarung.
Die Übungszettel werden jede Woche hier verlinkt. Sie werden
ausschließlich online erscheinen.
Die normale Bearbeitungszeit ist von Dienstag zum Freitag
10 Tage später. Die Zettel sind vor 12 Uhr
in den Briefkasten neben Raum 111, Takustraße 9, einzuwerfen. Die Bearbeitung
erfolgt in Zweiergruppen.
Übungszettel, die nach dem angegebenen Termin
abgegeben werden, zählen als nicht bearbeitet.
Nr. | Ausgabe | Abgabe |
pdf | tex | Bemerkungen |
1 |
01.10.2016 |
28.10.2016 |
|
|
|
2 |
25.10.2016 |
04.11.2016 |
|
|
|
3 |
01.11.2016 |
11.11.2016 |
|
|
|
4 |
08.11.2016 |
18.11.2016 |
|
|
|
5 |
15.11.2016 |
25.11.2016 |
|
|
|
6 |
22.11.2016 |
02.12.2016 |
|
|
Leichte Anpassungen in Aufgaben 1b und 3b. |
7 |
29.11.2016 |
09.12.2016 |
|
|
|
8 |
06.12.2016 |
16.12.2016 |
|
|
|
9 |
13.12.2016 |
06.01.2017 |
|
|
Weihnachtszettel |
10 |
03.01.2017 |
13.01.2017 |
|
|
|
11 |
10.01.2017 |
20.01.2017 |
|
|
|
12 |
17.01.2017 |
27.01.2017 |
|
|
vorletztes Blatt |
13 |
24.01.2017 |
03.02.2017 |
|
|
letztes Blatt |