Praxisprojekt: Implementierung von theoretischen Algorithmen und Datenstrukturen mit Rust

Prof. Dr. Johannes Köster

Universität Duisburg-Essen

Sommersemester 24

Rust

fn hello(who: &str) {
    println!("Hello {}!", who);
}


fn main() {
    let who = "World";
    hello(who);
}
  • Typ-Inferenz
  • Macros: Code-Generierung zur Compilezeit
  • Ownership and Borrowing: Speicher-Management zur Compilezeit, keine ungültigen Zeiger

Wavelet trees

alabar a la alabarda
01000100010001000110
00100000000100
010010
111010101111
1110
00
00
000000000
0
000
000
n \cdot k \text{ bits}, n=20, k=8,16,\dots
n \cdot \lceil\log_2(|\Sigma|)\rceil + o(n) \text{ bits}

Operationen

alabar a la alabarda
01000100010001000110
00100000000100
010010
111010101111
1110
00
00
000000000
0
000
000
  • \(access(i)\): Zeichen an Position \(i\)
  • \(rank_x(i)\): Anzahl der Vorkommen von \(x\) bis Position \(i\)
  • \(select_x(i)\): Position des \(i\)-ten Vorkommens von \(x\)

Anwendungen

  • Sequenz von Werten
  • Sortierung (Blätter) mit Zugriff auf Originalposition
  • Permutation
  • Koordinatengitter
  • Volltextindex
  • Gerichteter Graph

Unser Ziel

Eine vollständige Graphbibliothek auf Basis von Wavelet-Trees.

 

Schwierigkeit:

Wavelet-Trees sind statisch und lassen sich nicht (in dem Maße wie benötigt) updaten.

 

Welche Strategien lassen sich entwickeln um die Vorteile von Wavelet-Trees auszunutzen und trotzdem eine Graphbibliothek mit Updateoperationen zu ermöglichen?

Semesterplan

Tag Thema
10.4.2024 Einführung, Rust lernen + Manuskript vorbereiten
17.4.2024 Rust lernen + Manuskript vorbereiten
24.4.2024 Rust lernen + Manuskript vorbereiten
1.5.2024 Feiertag
8.5.2024 Journal Club
15.5.2024 Implementierung der Rust-Bibliothek
22.5.2024 Implementierung der Rust-Bibliothek
29.5.2024 Implementierung der Rust-Bibliothek
5.6.2024 Implementierung der Rust-Bibliothek
12.6.2024 Implementierung der Rust-Bibliothek
19.6.2024 Implementierung der Rust-Bibliothek
26.6.2024 Implementierung der Rust-Bibliothek
3.7.2024 Implementierung der Rust-Bibliothek
10.7.2024 Vorbereitung der Abschlusspräsentationen
17.7.2024 Abschlusspräsentationen

10-16 Uhr, 4h Anwesenheit + 2h frei planbar

Journal Club (1/3 Note)

Eigene visuelle Beispiele zu wavelet matrix, rank, select, access, und Graph-Kodierung

Graphbibliothek (1/3 Note)

  • Vollständigkeit (gerichtet, ungerichtet, Edit-Operationen, load&store, klassische Graph-Algorithmen, Vergleich mit anderen Gruppen)
  • Effizienz der entwickelten Lösung
  • Codequalität
  • Testabdeckung
  • Innovationsgrad hinsichtlich des Umgangs mit den Wavelet-Tree-Beschränkungen
  • Dokumentation

Präsentation (1/3 Note)

  • Inhaltliche Vollständigkeit der Folien (auch Fehlschläge oder verworfene Ideen sind wertvoller Inhalt)
  • Verständlichkeit der Folien und des Vortrags

Semesterplan

Gruppenarbeit

Phase 1 (Rust+Manuscript):

Jeder macht die Übungen und liest den Text, aber Austausch und Kooperation sind erwünscht.

 

Phase 2 (Implementierung):

3/4er-Gruppen

Praxisprojekt:

By Johannes Köster