Algorithmen und Datenstrukturen

Neuigkeiten

  • 05.08.20 - Die Einsichtnahme zur Nachklausur wird am Donnerstag, dem 13. August 2020, ab 17:15 Uhr, in Raum 34-420 stattfinden. Die Einsichnahme endet sobald keine weiteren Studenten mehr vor Ort auf Einsicht warten.
  • 23.07.20 - Die Ergebnisse der Nachklausur im Sommersemester 2020 sind nun im QIS System verfügbar. Zusätzlich können Sie Ihr Ergebnis im Exclaim sehen, insofern Sie dort registriert sind. (Die Statistik in Exclaim ist unvollständig, da nicht alle Studenten dort registriert sind. Die Bestehensquote mit allen Mitschreibern liegt bei 60%).

Archiv

  • Beginn der Vorlesung am Donnerstag, 31. Oktober 2019.
  • Ausgabe erstes Übungsblatt: Donnerstag, 31. Oktober 2019 (1. Vorlesung).
  • Beginn der Übung am Mittwoch, 6. November.
  • 05.11.19 - Neues Übungsblatt (01) ist online.
  • 12.11.19 - Neues Übungsblatt (02) ist online.
  • 12.11.19 - Folien für Kapitel 03 (Sortieren) sind online.
  • 17.11.19 - Binäre Suche der Datei Lineare_Suche.java hinzugefügt.
  • 19.11.19 - Neues Übungsblatt (03) ist online.
  • 24.11.19 - Die Tests zur Aufgabe 3.2 waren leider fehlerhaft und haben immer die Implementierung von Bubble-Sort verwendet. Dies ist nun behoben (Tests einfach wieder ausführen lassen oder die Datei neu hochladen).
  • 26.11.19 - Folien für Kapitel 04 (Algorithmenmuster) sind online.
  • 26.11.19 - Neues Übungsblatt (04) ist online.
  • 27.11.19 - Die heutige Übung muss krankheitsbedingt leider ausfallen!
  • 03.12.19 - Neues Übungsblatt (05) ist online.
  • 05.12.19 - Die “Türme von Hanoi”-Implementierung aus der Vorlesung (Hanoi.java) ist nun online.
  • 10.12.19 - Neues Übungsblatt (06) ist online.
  • 10.12.19 - Folien für Kapitel 05 (Abstrakte Datentypen und Verkettete Listen) sind online.
  • 12.12.19 - N-Damen Problem (Queens.java) und Stack.java sind nun online.
  • 17.12.19 - Neues Übungsblatt (07) ist online.
  • 18.12.19 - Neue Version von algodat-v3 online, da noch kritische Bugs beseitigt wurden.
  • 20.12.19 - Implementierungen BoundedArrayStack.java und BoundedArrayQueue.java aus der Vorlesung sind nun online.
  • 07.01.20 - Die Übung am 08.01.2020 muss leider kranksheitsbedingt ausfallen!
  • 07.01.20 - Neues Übungsblatt (08) ist online.
  • 07.01.20 - Folien für Kapitel 06 (Bäume) sind online.
  • 09.01.20 - Die Materialien zu Blatt 08 sind nun online.
  • 09.01.20 - Implementierungen SingleLinkedList.java (unvollständig!) und BinTree.java aus der Vorlesung sind nun online.
  • 14.01.20 - Neues Übungsblatt (09) ist online.
  • 14.01.20 - Folien für Kapitel 07 (Suchbäume) sind online.
  • 14.01.20 - Frau Korth bietet eine freiwillige Zusatzübung an, zur Vorbereitung auf die Klausur. Um einen passenden Termin zu finden gibt es eine Abstimmung, die für eine Woche offen sein wird.
  • 16.01.20 - Ergänzungen zur Datei BinTree.java aus der heutigen Vorlesung hinzugefügt. Für das Übungsblatt (09) finden Sie aber auch eine passendere Version in den Materialien!
  • 21.01.20 - Neues Übungsblatt (10) ist online, Material folgt nach der Vorlesung.
  • 22.01.20 - Folien für Kapitel 08 (Hashing) sind online.
  • 23.01.20 - Die Zusatzübung wird am Mittwoch, den 12.02.2020, im Block nach der Übung (also 10:00 Uhr), stattfinden, der Raum wird noch bekannt gegeben.
  • 23.01.20 - Materialien zu Blatt 10 sind nun online.
  • 23.01.20 - Die beiden ADT Implementierungen TreeSet.java und TreeMultiSet.java, die in der Vorlesung gezeigt wurden, sind nun online. Sie können beiden in Ihren app/exercise/adt/impl Ordner übernehmen und in Zukunft als Set oder MultiSet Implementierung verwenden, insofern Ihre TreeMap dann korrekt implementiert ist!
  • 23.01.20 - Die Klasse BinarySearchTree.java (unvollständig) aus der Vorlesung ist nun online.
  • 28.01.20 - Neues Übungsblatt (11) ist online.
  • 29.01.20 - Folien für Kapitel 09 (Balancierte Suchbäume) sind online.
  • 04.02.20 - Das letzte Übungsblatt (12) ist online.
  • 13.02.20 - Informationen zur Abschlussklausur (WS 2019/20) sind nun online.
  • 26.02.20 - Informationen zu Einsichtnahme und dem nächsten Prüfungstermin werden bald bekannt gegeben.
  • 26.02.20 - Die Ergebnisse der Abschlussklausur (WS 2019/20) sind nun im QIS System verfügbar. Zusätzlich können Sie Ihr Ergebnis im Exclaim sehen.
  • 04.03.20 - Die Einsichtnahme zur Abschlussklausur wird am Donnerstag, dem 12. März 2020, ab 17:15 Uhr, in Raum 48-379 stattfinden. Die Einsichnahme endet sobald keine weiteren Studenten mehr vor Ort auf Einsicht warten.
  • 04.03.20 - Es wird am 30.03.2020 (morgens) eine Nachklausur angeboten. Genauere Details zu Zeit und Ort werden noch bekannt gegeben. Bitte melden Sie sich bei Interesse frühzeitig an (sobald die Anmeldung verfügbar ist).
  • 10.03.20 - Die Anmeldung zum Nachtermin am 30.03.2020 ist freigeschaltet, bitte melden Sie sich rechtzeitig an! Die Informationen zu diesem Termin sind nun online.
  • 23.03.20 - Gemäß der Maßnahme zur Eindämmung des Corona-Virus wird der Nachtermin erstmal nicht stattfinden (lesen Sie dazu auch Informationen zu Corona). Ein neuer Termin wird mit entsprechendem Vorlauf bekannt gegeben.
  • 24.06.20 - Der nächste Klausurtermin ist nun der 20.07.2020, weitere Informationen finden Sie unten in der entsprechenden Sektion. Ort und Tageszeit werden noch bekannt gegeben. Bitte melden Sie sich rechtzeitig an!
  • 14.07.20 - Ort (Hörsaal 24-102) und genaue Zeit (13:00 Uhr, Einlass ab 12:45 Uhr) der Klausur im Sommersemster 2020 sind nun bekannt. Bitte machen Sie sich mit den Corona Richtlinien der TUK vertraut.

Organisation

Vorlesungen: Donnerstag, 17:15 - 18:45, Raum 46-110, ab 31.10.2019

Übungen: Mittwoch, 8:15 - 9:45, Raum 46-260, ab 06.11.2019

Abgabe der Übung: Montag Abend

  • Theorie: Übungskasten 4. Stock zwischen 32 & 34
  • Praxis: Upload in Exclaim

Organisation der Übung und Zulassung: siehe unten

KIS-Eintrag

Abschlussklausur WS 2019/20

Hier sind die Daten der Klausur:

  • Datum: Montag, der 17.02.2020
  • Ort: Hörsaal 46-215
  • Einlassab 9:00 Uhr
  • Beginn: voraussichtlich um 9:30 Uhr
  • Dauer90 Minuten
  • Ende: voraussichtlich gegen 11:00 Uhr

Alle angemeldeten Teilnehmer haben eine gültige Zulassung – entweder aus diesem oder einem vorhergehenden Semester – und dürfen somit teilnehmen.

Klausur SS 2020

Hier sind die Daten zum zweiten Prüfungstermin, im Sommersemester:

  • Datum: Montag, der 20.07.2020
  • Ort: Hörsaal 24-102
  • Einlassab 12:45 Uhr
  • Beginn: voraussichtlich um 13:00 Uhr
  • Dauer90 Minuten
  • Ende: voraussichtlich gegen 15:30 Uhr

Die Klausur findet im Rahmen der Corona Richtlinien der TUK statt, bitte machen Sie sich im Vorfeld mit den Maßnahmen, insbesondere dem Sicherheitskonzept für die schriftlichen Prüfungen vertraut.

Dozent

Dr. rer. nat. Patrick Michel

Inhalt

Implementierung und Verwendung grundlegender Datenstrukturen und ihrer Operationen. Algorithmus Begriff und grundlegende Algorithmen auf Datenstrukturen. Verständnis von Zeit- und Platzbedarf eines Verfahrens / einer Operation. Verwendung von Sortier- und Suchverfahren für den Zugriff auf Anwendungsdaten. Rekursive Programmierung, Modellierung mit Graphen, etc.

(siehe auch Modulhandbuch)

Anmeldung

Zur Übung müssen sich alle Studenten anmelden. Hierzu verwenden wir das Exclaim System, das auch für die Abgabe der praktischen Übungen genutzt wird.

Vorlesungsmaterial

Hier sind die Folien und andere Materialen aus der Vorlesung verfügbar.

No.KapitelNormal2 auf 1Kommentare
 OrganisatorischesPDFPDF 
01Algorithmen – GrundlagenPDFPDF 
02KomplexitätsanalysePDFPDF 
03SortierenPDFPDF 
04AlgorithmenmusterPDFPDF 
05Abstrakte Datentypen und Verkettete ListenPDFPDF 
06BäumePDFPDF 
07SuchbäumePDFPDF 
08HashingPDFPDF 
09Balancierte SuchbäumePDFPDF 

Hier sind die Quelldateien für das AlgoDat System, die in der Vorlesung geschrieben/präsentiert wurden. Wenn nicht anders angeben liegen die Dateien im package exercise/lecture und damit im Pfad app/exercise/lecture im System.

KapitelDateiKommentar
01Euklidischer_Algorithmus.java 
02Lineare_Suche.javaaktualisiert am 17.11.2019
04Hanoi.java 
04Queens.java 
05Stack.java 
05BoundedArrayStack.java 
05BoundedArrayQueue.javaAuch Ringbuffer genannt.
05SingleLinkedList.javaNicht komplett (siehe Blatt 08 Material).
06BinTree.javaaktualisiert am 16.01.2020
07BinarySearchTree.java 
07TreeSet.java 
07TreeMultiSet.java

Übungsmaterial

Hier sind die Übungsblätter und die dazu notwendige Materialien.

BlattAbgabeMaterialKommentare
Blatt 0004/06.11.algodat-v1“Hinweise zu den Praktischen Übungen” unten beachten!
Blatt 0111/13.11.algodat-v2“Neue Übungsmaterialien pro Blatt” unten beachten!
Blatt 0218/20.11.algodat-v2.1Nur UI neu (Ordner public), V2.1
Blatt 0325/27.11.sheet_03Kein Systemupdate notwendig.
Blatt 0402/04.12.sheet_04Kein Systemupdate notwendig.
Blatt 0509/11.12.sheet_05Kein Systemupdate notwendig.
Blatt 0616/18.12.sheet_06Kein Systemupdate notwendig.
Blatt 0706/08.01.algodat-v3“Neue Übungsmaterialien pro Blatt” unten beachten!
Blatt 0813/15.01.algodat-v4“Neue Übungsmaterialien pro Blatt” unten beachten!
Blatt 0920/22.01.sheet_09Kein Systemupdate notwendig.
Blatt 1027/29.01.sheet_10Kein Systemupdate notwendig.
Blatt 1103/05.02.algodat-v5“Neue Übungsmaterialien pro Blatt” unten beachten!
Blatt 1210/12.02.algodat-v5.1letztes Übungsblatt

Übungen und Zulassungsvoraussetzung

Die Übungsblätter werden wöchentlich ausgegeben, wenn möglich schon vor der Übung am Mittwoch, spätestens aber zur Vorlesung am Donnerstag. Sie sind in Gruppen zu bearbeiten und im Laufe des Montags abzugeben.

  • Theoretische Aufgaben werden auf Papier in den Übungskasten im vierten Stock zwischen Gebäude 34 und 32 abgegeben.
  • Praktische Aufgaben sind in den vorbereiteten Quelldateien zu ergänzen und online im Exclaim System hochzuladen.

Die praktischen Aufgaben werden vom Abgabesystem übersetzt und geprüft; Akzeptiert werden nur Abgaben die auch übersetzt werden können. Der Tutor gibt im Laufe des Dienstags Feedback zu den hochgeladenen Aufgaben.

Bis zur Übung am Mittwoch können die praktischen Aufgaben weiter bearbeitet und verbessert werden. In der Übung werden theoretische und praktische Teile gemeinsam besprochen und Gruppen können im Anschluss Verbesserungen ihrer Lösungen vom Tutor abnehmen lassen.

Um zur Klausur zugelassen zu werden müssen alle bis auf zwei Übungsblätter sinnvoll bearbeitet werden. Das bedeutet, dass alle Aufgaben von der Gruppe bearbeitet wurden und in entscheidenden Teilen korrekt gelöst wurden. Der Tutor entscheidet ob die theoretische und praktische Abgabe diese Kriterien erfüllen und trifft die Entscheidung spätestens nachdem die Gruppe nach der Übung am Mittwoch Gelegenheit hatte weitere, laufende Lösungen vorzuführen.

Hinweise zu den Praktischen Übungen

In den praktischen Übungen sollen Sie die zum Download bereit gestellten Quellen ergänzen und zur Abgabe ins Exclaim System hochladen. Damit Exclaim die Abgabe übersetzen kann, dürfen Sie weder die Klasse umbennen, noch die öffentlichen Methoden, noch die Klasse in ein anderes Paket verschieben.

Sie dürfen gerne neue öffentliche Methoden hinzufügen (um diese über die Oberfläche zum Testen zu verwenden) oder Hilfsmethoden zur Strukturierung Ihres Codes!

  • Zur Abgabe laden Sie für jede Aufgabe getrennt die Klasse der Aufgabe in das System. Sollten Sie Hilfsklassen verwenden oder auf späteren Blättern sonst weitere Klassen zur Lösung notwendig sein, müssen Sie diese ebenfalls hochladen. Insbesondere müssen Sie keine sonst zur Verfügung gestellten Klassen (wie Person, etc.) hochladen!

  • Zur Bearbeitung der Aufgaben können Sie einen beliebigen Text Editor verwenden, wir empfehlen Ihnen aber eine Entwicklungsumgebung wie IntelliJ Idea oder Eclipse. Beide sind in kostenlosen Versionen verfügbar.

  • Schließlich brauchen Sie ein Java 8 JDK (z.B. von Oracle oder ein OpenJDK). Unter Windows kann das JDK in Version 8 schwer zu bekommen sein; sollten Sie Probleme damit haben melden Sie sich bitte per E-Mail! Nach Installation des JDK stellen Sie sicher, dass der Java Interpreter und der Java Compiler im Pfad sichtbar sind: Führen Sie in einem Terminal die beiden Befehle java -version und javac -version aus und überprüfen Sie die ausgegebene Version (bzw. das beide Befehle überhaupt verfügbar sind).

  • Das AlgoDat-System: In der ZIP-Datei von Blatt 00 befindet sich das in der Vorlesung gezeigte System. Wenn Sie ein Java 8 JDK installiert haben und sich beide oben genannten Befehle ausführen lassen, dann können Sie das System starten, indem Sie ./sbt run im Terminal eingeben (Linux / Mac OS X) oder den Befehl sbt.bat run ausführen (Windows). Geben Sie nur ./sbt bzw. sbt.bat ein, landen Sie in der SBT-Shell und können von dort mit der Eingabe run das System starten.

Beim allerersten Start brauchen Sie eine Internet Verbindung und etwas Geduld, da alle nötigen Bibliotheken und Quellen für das System automatisch heruntergeladen und lokal installiert werden. Ist dieser Vorgang einmal abgeschlossen ist er für den Rest des Semesters nicht mehr notwendig!

Solange das System läuft, können Sie:

  • Unter der URL http://localhost:9000 auf die UI zugreifen und damit arbeiten.
  • Ändern Sie etwas im Code der aktuellen Aufgabe und führen dann eine Methode über die UI aus, wird Ihr Code im Terminal automatisch übersetzt und ausgeführt. Auf der UI sehen Sie entweder das Ergebnis der Ausführung oder den Fehler beim Übersetzen.
  • Sie können das System im Hintergrund laufen lassen, da es im Leerlauf keine Last erzeugt.

Tipp: Sie können ein integriertes Terminal in Ihrer IDE benutzen, um von dort das System zu starten und brauchen damit nicht ein weiteres Fenster im Hintergrund zu verwalten.

Alternativ zum AlgoDat-System können Sie die Übungsaufgaben auch manuell (oder in Ihrer IDE) übersetzen und durch eine main Methode testen. Führen Sie dazu im app Ordner Befehle wie javac exercise/sheet_00/Sortierung.java aus, gefolgt von einem passenden java Kommando zum Ausführen Ihrer main. In diesem Fall sind nur die beiden Ordner exercise und model (enthalten im app Order) relevant, die Sie hier für Blatt 00/01/02/03/04/05/06/07/08/09/10/11/12 separat herunterladen können.

Neue Übungsmaterialien pro Blatt

Für jedes Übungsblatt gibt es neue Quelldateien für die Übungen und oft auch ein Update zum AlgoDat-System, mit neuen Funktionen und/oder behobenen Fehlern in der Anwendung. Für Blatt 02, zum Beispiel, finden sie alles notwendige im Archiv algodat-v2.1.

Das jeweils neue Archiv für ein Übungsblatt enthält diese Unterschiede zur jeweiligen Vorgängerversion:

  • Die Quelldateien des aktuellen Übungsblatts XY im Ordner app/exercise/sheet_XY.
  • Die aktuelle Version der Oberfläche (UI) im Ordner public.
  • Die aktuelle Version des Backends (Servers) im Ordner app/controllers bzw. conf.

Sie können also entweder diese vier Ordner jeweils in Ihrem bestehenden Projekt ersetzen oder mit dem entpackten Ordner des Übungsblatts neu anfangen (und Ihren alten app/exercise Ordner übernehmen). In beiden Fällen fällt das initiale Herunterladen weg und das System sollte deutlich schneller starten.

Ob Sie das System in der aktuellen Version des Übungsblatts betreiben, sehen Sie auf der Seite unten rechts (ab V2): Hier sollte unter anderem die (Major-)Version der Oberfläche mit der des Backends übereinstimmen. Sie brauchen jeweils nur die neuste Version des Systems und sie sollte mit allen Vorlesungs- und Übungsquellen abwärtskompatibel sein.