zurück

Aufgaben zur Vorlesung Algorithm Engineering WS23/24

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


Programmieraufgabe

Programmierwettbewerb: Sliding Block Hashing (Slick), Benchmarkergebnisse

Wir wollen SlickHash in seinen unterschiedlichen Varianten implementieren und gegeneinander antreten lassen. Dazu stellen wir ein C++ Framework bereit, das Laufzeit und Speicherverbrauch messen, visualisieren und gegen anderen Hashtabellen vergleichen kann. Zusätzlich gibt es eine Webseite mit automatisch erstellten Benchmarkergebnissen, die Ihre Implementierung fortlaufend anonym gegen die Ihrer Kommilitonen antreten lässt. (Nicht maßgebend für die anschließende Bewertung Ihrer Übungsleistung.)

Falls Sie sich für die Programmieraufgabe entscheiden, folgen Sie bitte den Anweisungen in der README.md des C++ Frameworks und melden sich nach erstmaligem Einloggen im KIT Gitlab per kurzer E-Mail an.

Aufgabenbeschreibung

Ziel der Programmieraufgabe ist es, eine SlickHash Tabelle mit mindestens den Operationen insert(), at() und contains() zu implementieren. Das entsprechende Interface wird in der Datei slickhash.h im Framework bereits definiert; wer die Aufgabe in Rust bearbeiten will, darf sein eigenes Interface definieren. Allgemein geht es bei der Programmieraufgabe aber nicht nur um eine korrekte Implementierung des Hashtabelle, sondern auch um die Anwendung von Techniken und Optimierungsverfahren, die in der Vorlesung vorgestellt werden, sowie der experimentellen Evaluation. Um die Implementierungen etwas diverser zu gestalten, dürfen Sie sich für einen Aspekt entscheiden, auf den Sie Ihre Implementierung optimieren:

  1. Bulk-Insertion: implementieren Sie build() effizienter als durch wiederholtes Aufrufen von insert().
  2. Queries: optimieren Sie Ihre Implementierung für Anwendungsfälle, deren Laufzeit durch viele at() bzw. contains() Operationen dominiert wird.
  3. Löschen: implementieren Sie die erase() Funktion inklusive backyard cleaning.
  4. Speicherplatz: tunen Sie Ihre SlickHash Implementierung auf Speicherplatzeffizienz.

Je nach Wahl kann eine andere im Preprint beschriebene SlickHash Variante die vielversprechendste Wahl sein.

Zusätzlich zur Implementierung soll ein kurzes Dokument verfasst werden, das den verfolgten Ansatz erläutert und anhand von Messungen evaluiert. An das Dokument stellen wir folgende Anforderungen:

  1. Ungefähr 1–2 DIN A4 Seiten deutsch- oder englischsprachigen Text in ganzen Sätzen, der Ihre Implementierung und angewandten Optimierungen beschreibt. Gehen Sie auch auf Varianten, Parameterwerte und Ideen ein, die zu keiner Verbesserung geführt haben: negative Ergebnisse sind ebenfalls wichtige Ergebnisse.
  2. Untermauern Sie Ihre Behauptungen mit mindestens drei Plots. Stellen Sie sicher, aussagekräftige Plots zu erstellen, und referenzieren sowie interpretieren Sie diese im Text. Die Plots selber zählen nicht zum Seitenlimit.
  3. Sie dürfen das Dokument mit der Textverarbeitungssoftware Ihrer Wahl erstellen, aber geben Sie am Ende bitte eine PDF Datei ab.
  4. Das Seitenlimit von ungefähr 1–2 DIN A4 Seiten ist nicht strikt, aber bemühen Sie sich bitte um einen kurzen und prägnanten Aufschrieb. Aufgeblähte und ungenau formulierte Abgaben sind unerwünscht.

Abgabe (ergänzt am 28.02.2024): Sie können das Dokument zur Abgabe in Ihr Implementierungs-Repository legen oder per E-Mail einreichen.


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 eine Liste mit Themen aus der Vorlesung, zu denen die jeweiligen 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.

Bevor man mit dem Editieren auf Wikipedia beginnt, ist es ratsam, sich vorher einmal in die herrschenden Gepflogenheiten einzulesen. Insbesondere raten wir zu folgenden Hinweisen:

Aufgabe 1: String Sorting - Übersichtsartikel [AH]

Relevante Artikel:

Relevante Literatur:

Aufgabe 2: Elias-Fano Encoding [PT]

Relevante Artikel:

Relevante Literatur:

Aufgabe 3: weitere Aufgaben auf Anfrage


Miniseminar

Zu jedem Thema soll ein 20 minütiger Vortrag gehalten werden mit anschließender 5-minütiger Diskussion. Eine schriftliche Ausarbeitung ist explizit nicht vorgesehen.

Paper Autoren Reserviert
RecSplit: Minimal Perfect Hashing via Recursive Splitting E. Esposito, T. M. Graf, S. Vigna LB
Binary Fuse Filters: Fast and Smaller Than Xor Filters T. M. Graf, D. Lemire
Simulating Population Protocols in Sub-Constant Time per Interaction P. Berenbrink, D. Hammer, D. Kaaser, U. Meyer, M. Penschuck, H. Tran
A 'Learned' Approach to Quicken and Compress Rank/Selection Dictionaries A. Boffa, P. Ferragina, G. Vinciguerra JB
Space-Efficient, High-Performance Rank and Select Structures on Uncompressed Bit Sequences D. Zhou, D. G. Andersen
An Efficient Approach to Merging Paired-End Reads and the Incorporation of Uncertainties T. Flouri, J. Zhang, L. Czech, K. Kobert, A. Stamatakis
A Back-to-Basics Empirical Study of Priority Queues D. Larkin, S. Sen, R. E. Tarjan
Engineering Predecessor Data Structures for Dynamic Integer Sets P. Dinklage, J. Fischer, A. Herlez
Multilevel Algorithms for Acyclic Partitioning of Directed Acyclic Graphs J. Herrmann, M. Y. Özkaya, B. Ucar, K. Kaya, Ü. V. Catalyürek
Compressing Graphs and Indexes with Recursive Graph Bisection L. Dhulipala, I. Kabiljo, B. Karrer, G. Ottaviano, S. Pupyrev, A. Shalita CK
Graph Partitioning using Quantum Annealing on the D-Wave System H. Ushijima-Mwesigwa, C. F. A. Negre, S. M. Mniszewski
Hierarchical Agglomerative Graph Clustering in Nearly-Linear Time L. Dhulipala, D. Eisenstat, J. Lacki, V. Mirrokni, J. Shi
Incremental DFS Algorithms: A Theoretical and Experimental Study S. Baswana, A. Goel, S. Khan
Efficient and Robust Approximate Nearest Neighbor Search using Hierarchical Navigable Small World Graphs Y. A. Malkov, D. A. Yashunin JH
SAT-and-Reduce for Vertex Cover: Accelerating Branch-and-Reduce by SAT Solving R. Plachetta, A. van der Grinten
Approximation Multiobjective Shortest Path in Practice F. Bökler, M. Chimani
Shortest-path Feasibility Algorithms B. V. Cherkassky, L. Georgiadis, A. V. Goldberg, R. E. Tarjan, R. F. Werneck
Distance Closures: Unifying Search- and Lookup-based Shortest Path Speedup Techniques D. Bahrdt, S. Funke, S. Makolli, C. Proissl PS
Practical Fully Dynamic Minimum Cut Algorithms M. Henzinger, A. Noe, C. Schulz