Aufgaben zur Vorlesung Algorithm Engineering SoSe2022

Wahlmöglichkeiten

Wir bieten folgende Wahlmöglichkeiten für die Zusatzaufgabe zur Vorlesung Algorithm Engineering an:


Programmieraufgabe

! Sie finden die Anforderungen zum kurzen schriftlichen Dokument, das zur Abgabe der Programmieraufgabe gehört nun im README.md des C++ Framework !

Wir stellen ein C++ Framework bereit, das Laufzeit und Speicherplatzverbrauch messen (sowie Plots erstellen, [aktuell noch nicht verfügbar]) kann. (Die finalen Benchmarkgraphen/graphkonfigurationen sind ebenfalls noch nicht verfügbar und werden noch bekannt gegeben.) Das Framework stellt naive Beispielimplementierungen zum Vergleich bereit. Jede Aufgabe kann von mehreren Personen bearbeitet werden. Einzelne Aufgaben könnten dabei (nach Rücksprache) auch zu zweit bearbeitet werden. Zusätzlich zur Implementierung soll ein kurzes Dokument verfasst werden, das den verfolgten Ansatz erläutert und anhand von Messungen evaluiert (Details zu den Anforderungen an das Dokument finden Sie im README.md des C++ Framework). Falls Aufgaben zu zweit bearbeitet werden, erwarten wir eine etwas umfangreichere Evaluation/mehr Implementierungsvarianten als bei einer Einzelbearbeitung.

Allgemein geht es bei der Programmieraufgabe nicht nur um eine korrekte Implementierung des jeweiligen Algorithmus, vielmehr erwarten wir, dass Techniken und Optimierungsvarianten, wie sie in der VL vorgestellt werden, auf das jeweilige Problem angewendet werden. Optimierungsvarianten, die ausprobiert wurden, aber zu keiner Laufzeitverbesserung geführt haben, können natürlich ebenso im Bericht aufgeführt werden.

Für die Programmieraufgaben ist es vollkommen ausreichend, sich auf sequentiellen Code zu beschränken. Eine Parallelisierung ist nicht erforderlich.

MST Konstruktion:

Ein MST-Konstruktions-Algorithmus berechnet für einen Eingabegraphen G einen minimalen Spannbaum (bzw. aufspannenden Wald, falls G nicht zusammenhängend ist) von G und gibt diesen als Kantenliste aus.

Aufgabe 1: Filter-Kruskal

Aufgabenbeschreibung:

Implementierung des Filter-Kruskal Algorithmus. Neben allgemeinen Optimierungen sollen insbesondere auch verschiedene Rekursionsabbruchbedingungen und Partitionierungssvarianten (z.B. skewed Partitionierung) evaluiert werden.

Relevante Literatur:

Aufgabe 2: Filter-Boruvka

Aufgabenbeschreibung:

Implementierung eines MST-Algorithmus, der sich am oben genannten Filter-Kruskal Algorithmus orientiert, aber den Algorithmus von Boruvka als Basis-Algorithmus nutzt. Neben allgemeinen Optimierungen können auch verschiedene Rekursionsabbruchbedingungen und Partitionierungsvarianten (z.B. skewed Partitionierung) evaluiert werden.

Relevante Literatur:

Aufgabe 3: Jarnik Prim mit <...> - Priority Queue

Aufgabenbeschreibung:

Implementierung des Jarnik-Prim Algorithmus für MSTs. Als Priority Queue soll eine der folgenden Datenstrukturen verwendet (und optimiert) werden:

Relevante Literatur:

Aufgabe 4: Linear-Time MST Algorithmus mit Blackbox

Aufgabenbeschreibung:

Implementierung des unten genannten MST Algorithmus mit (erwartet) linearer Laufzeit. Der MST-Verifikationsschritt wird dabei mittels einer von uns bereitgestellten BlackBox-Implementierung gelöst und muss nicht selbst implementiert werden. Diese fließt auch nicht in die Laufzeitmessung mit ein.

Relevante Literatur:

Aufgabe 5: Jarnik-Prim auf Sample-MST mit Filtern (eher komplex, geeignet für 2 Personen)

Aufgabenbeschreibung:

Implementierung des unten genannten MST Algorithmus. Als Datenstruktur zur Kantenverifikation soll eine der folgenden Strategien verwendet werden:

Relevante Literatur:

MST Verifikation:

Bei der MST-Verifikation bekommt man anders als bei der MST-Konstruktion als Eingabe bereits einen Graphen G und einen Spannbaum T von G. Ein MST-Verifikationsalgorithmus gibt aus, ob es sich bei T um einen minimalen Spannbaum handelt. Falls T kein minimaler Spannbaum ist, wird zusätzlich eine Kante aus T ausgegeben, die nicht in einem MST von G enthalten sein kann.

Aufgabe 6: Verifikation using RMQs (eher komplex, geeignet für 2 Personen)

Aufgabenbeschreibung:

Implementierung eines MST-Verifikationsalgorithmus auf Basis des oben genannten MST Algorithmus. Hierbei muss auf dem Eingabe-Spannbaum T der Jarnik-Prim-Algorithmus ausgeführt werden. Anschließend wird die Kantenklassifikation wie im Paper beschrieben auf allen Kanten von G ausgeführt. Falls hierbei eine T-leichte Kante gefunden wird, die nicht in T enthalten ist, kann diese als Zeuge ausgegeben und der Algorithmus terminiert werden. Als Datenstruktur zur Kantenverifikation soll eine der folgenden Strategien verwendet werden:

Relevante Literatur:

Wikipedia-Artikel

Wir wollen den Themenbereich Algorithm Engineering in Wikipedia deutlich verbessern. Als Zusatzaufgabe zur Vorlesung Algorithm Engineering soll daher ein oder mehrere Wikipedia-Artikel neu geschrieben oder verbessert werden.

Es folgt unten eine Liste mit Themen aus der Vorlesung, zu denen jeweils die Wikipedia-Artikel zu wünschen übrig lassen. Eigene Ideen für Artikel zu anderen Themen im Bereich Algorithm Engineering sind auch willkommen. Diese sollen mit neuem Text, hinreichend vielen Referenzen, schönen (animierten) Illustrationen, Pseudocode, Analysen, und vielem mehr angereichert oder neu erstellt werden. Eine Aufgabe kann durch mehrere Personen bearbeitet werden, wovon eine/r den englischen Wikipedia-Artikel schreibt und die/der andere die deutsche Version. Die Liste der Vorschläge ist nicht vollständig und kann durch sinnvolle Vorschläge ergänzt werden.

Teil der Aufgabe besteht auch darin den bearbeiteten Text zu "verteidigen", falls Wikipedia-Editoren den Inhalt anfechten. Sollte es zu unbegründeten Konflikten kommen, fließt dies jedoch natürlich nicht in die Bewertung ein.

Aufgabe 1: String Sorting - Übersichtsartikel (etwas umfangreicher, geeignet für 2 Personen)

Relevante Artikel: Relevante Literatur:

Aufgabe 2: Elias-Fano Encoding (JG)

Relevante Artikel: Relevante Literatur:

Miniseminar

Zu jedem Thema soll ein 20 minütiger Vortrag gehalten werden mit anschließender 5-minütiger Diskussion.

Aufgaben: