Print View

1. Vorlesung DienstagTue Oct 15, 2019 02:15 PM -  | 03:45 PM

  • Überblick
  • Überblick über vergleichsbasierte Sortieralgorithmen (Wiederholung)
    • Sortieren durch Vergleichen (Bubblesort)
    • Sortieren durch Einfügen
    • Sortieren durch Auswahl
    • Quicksort
    • Sortieren durch Verschmelzen (mergesort)
  • Asymptotische Laufzeitanalyse, O-Notation (Wiederholung)
  • Analyse von Quicksort mit randomisierter Pivotauswahl

2. Vorlesung DonnerstagThu Oct 17, 2019 02:15 PM -  | 03:45 PM

3. Vorlesung DienstagTue Oct 22, 2019 02:15 PM -  | 03:45 PM

  • Abstrakte Datentypen
  • Spezifikation abstrakter Datentypen
    • verbale Spezifikation
    • modellierende Spezifikation
    • algebraische Spezifikation. Beispiel: Mengen
  • Referenzimplementierung direkt aus der Spezifikation in Haskell (Menge.hs, Protokoll der Haskell-Sitzung)
  • Beweis von Eigenschaften durch algebraische Manipulation

4. Vorlesung DonnerstagThu Oct 24, 2019 02:15 PM -  | 03:45 PM

5. Vorlesung DienstagTue Oct 29, 2019 02:15 PM -  | 03:45 PM

  • Spezifikation von abstrakten Datentypen: Vor- und Nachbedingungen
  • Abstraktionsfunktion; Darstellungsinvarianten der Implementierung von Datenstrukturen
  • Korrektheit der Implementierung von abstrakten Datentypen
  • Beispiel: Menge durch eine Feld konstanter Länge implementiert: SmallIntSet.java
  • Unterstützung für Datenabstraktion in verschiedenen Programmiersprachen
  • Wörterbuch als abstrakter Datentyp (dictionary, Map)
  • Wörterbuchoperationen
  • Wiederholung: binäre Bäume und Suchbäume
SmallIntSet.java

6. Vorlesung DonnerstagThu Oct 31, 2019 02:15 PM -  | 03:45 PM

  • Höhenbalancierte Bäume (AVL-Bäume)
  • Rotationen und Doppelrotationen
  • Einfügen
  • Löschen

7. Vorlesung DienstagTue Nov 05, 2019 02:15 PM -  | 03:45 PM

  • Erweiterte Suchabfragen in Suchbäumen. Beispiel: Rang
  • Skip-Listen: Analyse; Einfügen und Löschen

8. Vorlesung DonnerstagThu Nov 07, 2019 02:15 PM -  | 03:45 PM

  • Erwartungswert der Höhe H einer Skipliste (Ausarbeitung), partielle Summation
  • a-b-Bäume, insbesondere 2-3-Bäume
Erwartete Höhe einer Skipliste.pdf

9. Vorlesung DienstagTue Nov 12, 2019 02:15 PM -  | 03:45 PM

  • Digitale Suchbäume (tries) zum Speichern von Zeichenketten
  • Präfix und Suffix
  • komprimierte digitale Suchbäume
  • Suffixbäume

10. Vorlesung DonnerstagThu Nov 14, 2019 02:15 PM -  | 03:45 PM

  • Graphen
    • Wiederholung der Grundbegriffe
    • Speicherung von Graphen im Computer: Adjazenzmatrix und Adjazenzliste

11. Vorlesung DonnerstagThu Nov 21, 2019 02:15 PM -  | 03:45 PM

  • Teilwortsuche mit Hilfe der Verschiebefunktion: Algorithmus von Knuth-Morris-Pratt
  • Berechnung der Verschiebefunktion
Verschiebefunktion.py

12. Vorlesung DienstagTue Nov 26, 2019 02:15 PM -  | 03:45 PM

  • Teilwortsuche: Algorithmus von Boyer und Moore
  • Fingerabdrücke nach Rabin-Karp: Grundidee, Darstellung einer Zeichenkette als Zahl

13. Vorlesung DonnerstagThu Nov 28, 2019 02:15 PM -  | 03:45 PM

  • Fingerabdrücke: Rabin-Karp
  • Textsuche mit endlichen Automaten
  • Graphenalgorithmen

14. Vorlesung DienstagTue Dec 03, 2019 02:15 PM -  | 03:45 PM

  • Graphenalgorithmen
  • kürzeste Wege, der Algorithmus von Dijkstra; Korrektheit und Laufzeit
  • der kürzeste-Wege-Baum

15. Vorlesung DonnerstagThu Dec 05, 2019 02:15 PM -  | 03:45 PM

  • Prioritätswarteschlange als abstrakter Datentyp; Zugriffszeiger zur Angabe von gespeicherten Elementen
  • Implementierung einer Prioritätswarteschlange als Halde mit Zugriffshenkeln: Halde.py
rudimentäre Klasse Halde.py mit den Operationen Einfügen und Min-Entfernen

16. Vorlesung DienstagTue Dec 10, 2019 02:15 PM -  | 03:45 PM


  • Implementierung einer Prioritätswarteschlange als Halde mit Zugriffshenkeln: Halde.py
  • Algorithmus von Dijkstra unter Verwendung dieser Prioritätswarteschlange; Dijkstra.py
  • kürzeste Spannbäume, der gierige Algorithmus
  • Bäume in der Informatik und in der Graphentheorie
  • Reduktion auf den Fall verschiedener Knotengewichte durch Stören der Kosten
Dijkstra.py
Halde.py

17. Vorlesung DonnerstagThu Dec 12, 2019 02:15 PM -  | 03:45 PM

  • das UNION-FIND-Problem; Vereinigung nach Größe. Erwähnt: die inverse Ackermannfunktion α(n)
  • der Algorithmus von Prim für kürzeste Spannbäume
  • der Algorithmus von Borůvka (1926)

18. Vorlesung DienstagTue Dec 17, 2019 02:15 PM -  | 03:45 PM

  • Hash-Tabellen und gestreute Speicherung;
  • Behandlung von Kollisionen: Verkettete Listen, offene Adressierung, lineares Sondieren
  • Kuckuckshashing

19. Vorlesung DonnerstagThu Dec 19, 2019 02:15 PM -  | 03:45 PM

  • Analyse von Kuckuckshashing
  • Codierungsargument

20. Vorlesung DienstagTue Jan 07, 2020 02:15 PM -  | 03:45 PM

  • gute Hash-Funktionen
  • Hashcodes
  • Erwähnung: kryptographische Hashfunktionen

21. Vorlesung DonnerstagThu Jan 09, 2020 02:15 PM -  | 03:45 PM

  • Systematisches Durchsuchen von Lösungsbäumen/Backtracking: Das Acht-Damen-Problem
  • Die Klasse P der in Polynomialzeit lösbaren Probleme
  • Polynomielle Reduzierbarkeit zwischen Problemen (Turing-Reduzierbarkeit): A <P B
  • Hamiltonkreis <P Rundreiseproblem
8Damen.py

22. Vorlesung DienstagTue Jan 14, 2020 02:15 PM -  | 03:45 PM

  • Das Erfüllbarkeitsproblem (Satisfiability, SAT)
  • Graphenfärbung
  • Reduktion: Färbbarkeit <P SAT
  • Die Klasse NP, Entscheidungsprobleme, Zertifikatskriterium
  • NP-schwere und NP-vollständige Probleme
  • Bedeutung der NP-Schwerheit

23. Vorlesung DonnerstagThu Jan 16, 2020 02:15 PM -  | 03:45 PM

  • Beispiele von Reduktionen: SAT <P 3-Färbbarkeit
  • 3-SAT
  • Listen variabler Länge, amortisierte Analyse

24. Vorlesung DienstagTue Jan 21, 2020 02:15 PM -  | 03:45 PM

  • Effizienz von Listenoperationen in Python
  • Mengen und Wörterbücher als abstrakte Datentypen in Java (die Collection- und Map-Klassen), Quellcode
  • dynamische Speicherverwaltung, Stapel und Halde, garbage collection
  • Radix-Sort zum Sortieren von kurzen Daten
  • Optimale präfixfreie Kodes

26. Vorlesung DienstagTue Jan 28, 2020 02:15 PM -  | 03:45 PM

  • Optimale Suchbäume, dynamische Programmierung
  • Implementierungen in Python: optSuchbaum.py
  • Variante: unsystematisches Lösen der Teilprobleme und Tabellieren der Ergebnisse (memoization) zur Vermeidung von Mehrfachberechnungen
  • Rückverfolgung der Lösung (abspeichern oder neu berechnen)
  • Algorithmus von Dantzig für kürzeste Wege mit negativen Kantengewichten

27. Vorlesung DonnerstagThu Jan 30, 2020 02:15 PM -  | 03:45 PM

  • Editierabstand
  • randomisierte Auswahl des k-kleinsten Elements, Quickselect
  • Geometrische Algorithmen:
  • konvexe Hülle einer sortierten Punktmenge in linearer Zeit (inkrementeller Algorithmus)

28. Vorlesung DienstagTue Feb 04, 2020 02:15 PM -  | 03:45 PM

  • dichtestes Punktpaar, teile und herrsche
  • Dynamische Programmierung; das Rundreiseproblem

29. Vorlesung DienstagTue Feb 11, 2020 02:15 PM -  | 03:45 PM

  • Nachtrag: Orientierungstest
  • Punkt in Polygon
  • Probleme der Gleitkommarechnung
  • Übersicht über Algorithmenentwurfsprinzipien:
    • teile und herrsche
    • dynamische Programmierung
    • systematisches Durchsuchen von Lösungsbäumen (backtracking)
    • gierige Algorithmen (greedy)
    • heuristische Suchverfahren
    • lokale Optimierung, steilster Abstieg, heuristische Suchverfahren (z. B. Simulated annealing, genetische Algorithmen)
  • lokale Optimierung, steilster Abstieg
  • heuristische Suche: Simulated annealing, Zielfunktion, Nachbarschaftsrelation

30. Vorlesung Donnerstag. Dynamische ProgrammierungThu Feb 13, 2020 02:15 PM -  | 03:45 PM

  • längste monoton aufsteigende Teilfolge
  • Analyse von Zwei-Personen-Spielen, Min-Max-Algorithmus, α-β-Suche