Im Rahmen meines Studiums (Software-Engineering) durfte ich im letzten Präsenzblock die Vorlesung Multimedia besuchen. Dort haben wir auch den Lempel-Ziv-Welch-Algorithmus angesprochen, einen bekannten Algorithmus zur Entropiekodierung. Um die ganze Theorie dahinter (so viel ist es aber eigentlich gar nicht) besser zu verstehen, habe ich eine kleine Implementierung des Algorithmus in Java erstellt. Wen es interessiert, das Progrämmchen gibt es hier zum Download: Beispielimplementierung des LZW-Algorithmus in Java.
Das Ergebnis des Programms für den String, der auch in der Wikipedia verwendet wird, ist im folgenden Screenshot zu sehen.
Wenn man sich nur mal den erzeugten Code anguckt: Daraus kann nie und nimmer mehr auf den Originaltext geschlossen werden.
Auch wenn der Artikel schon etwas älter ist, richtig ist er nicht.
Sorry Rapha, aber das stimmt nicht. Der erzeugte Code kann sehr wohl mit Hilfe des Wörterbuchs korrekt zum Ausgangswort entschlüsselt werden:
Schreibt man alle Werte rechts der Pfeile hintereinander, erhält man das Ausgangswort.
Nur das dann irgendwie nichts gespart wurde, wenn das Wörterbuch noch mit gespeichert werden muss.
Naja, der LZW lohnt sich erst ab einer gewissen Größe der zu komprimierenden Daten und wird natürlich umso effektiver, je mehr Wiederholungen in diesen Daten auftreten.