Was ist Lauflängenkodierung?
Lauflängenkodierung (englisch: Run-Length Encoding, kurz RLE) ist eine der einfachsten Kompressionsmethoden. Die Idee ist brillant simpel: Anstatt dieselben Daten mehrmals zu wiederholen, speichert man, wie oft sie wiederholt werden.
Beispiel:
- Original:
AAAAAABBBBBBBCCA(16 Zeichen) - Komprimiert:
6A7B2C1A(8 Zeichen) – 50 % kleiner!
Jede „Lauflänge" besteht aus zwei Teilen: der Anzahl der Wiederholungen und dem Symbol selbst.
Ein visuelles Beispiel: Schwarzweiß-Bilder
RLE wird oft bei einfachen Bildern eingesetzt. Stell dir eine Zeile eines Schwarzweiß-Bildes vor:
Original: 000000001111111100000000000000001111000
Komprimiert: 8×0 8×1 16×0 4×1 3×0
Anstatt 39 Werte zu speichern, speichern wir nur 10 Werte – eine enorme Ersparnis!
Das Faxgerät, das viele Büros früher benutzt haben, verwendet RLE zur Kompression von Schwarz-Weiß-Dokumenten. Da Dokumente meist große weiße Flächen haben, funktioniert RLE dabei sehr gut.
RLE in Python implementieren
def rle_kodieren(daten):
"""Kodiert eine Liste mit Lauflängenkodierung."""
if not daten:
return []
ergebnis = []
zaehler = 1
for i in range(1, len(daten)):
if daten[i] == daten[i - 1]:
zaehler += 1
else:
ergebnis.append((zaehler, daten[i - 1]))
zaehler = 1
ergebnis.append((zaehler, daten[-1]))
return ergebnis
def rle_dekodieren(kodiert):
"""Dekodiert Lauflängenkodierung zurück zu Originaldaten."""
return [symbol for anzahl, symbol in kodiert for _ in range(anzahl)]
# Test
original = [0, 0, 0, 0, 1, 1, 1, 0, 0]
kodiert = rle_kodieren(original)
dekodiert = rle_dekodieren(kodiert)
print("Original:", original)
print("Kodiert:", kodiert) # [(4, 0), (3, 1), (2, 0)]
print("Dekodiert:", dekodiert) # [0, 0, 0, 0, 1, 1, 1, 0, 0]
Wann funktioniert RLE gut – und wann nicht?
RLE ist sehr effektiv, wenn die Daten viele Wiederholungen enthalten:
- Einfache Schwarz-Weiß-Bilder (viele weiße Flächen)
- Hintergründe mit einfarbigen Bereichen
- Texte mit vielen Leerzeichen
RLE ist ineffektiv oder sogar kontraproduktiv, wenn die Daten wenige Wiederholungen haben:
Bei Daten ohne Wiederholungen macht RLE die Datei sogar größer! Das Wort ABCDE würde zu 1A1B1C1D1E – doppelt so groß. Deshalb sollte man vor dem Komprimieren prüfen, ob RLE für den Datentyp geeignet ist.
Vergleich: Original vs. RLE
| Datentyp | RLE-Effizienz |
|---|---|
| Einfarbiges Bild | Sehr hoch |
| Schwarz-Weiß-Dokument | Hoch |
| Foto mit vielen Farben | Niedrig |
| Zufällige Daten | Negativ |
Übungsaufgaben
Kodiere die folgende Zeichenkette mit RLE: WWWWWWBBBBWWWWWWWWWWWWBB. Wie viele Zeichen hat das Ergebnis?
Antwort anzeigen
Gegeben die RLE-kodierte Folge: 3R2G4B1R. Dekodiere sie und gib die ursprüngliche Zeichenkette an.