Wie kann ein Text komprimiert werden, so dass der Text wieder eindeutig extrahiert werden kann? Woher soll der Algorithmus wissen, wann ein Zeichen zu Ende ist und das neue Zeichen beginnt. Man könnte die Idee haben ein Trennzeichen einzufügen, das zwei kodierte Bitfolgen voneinander abtrennt. Aber wie soll das Trennzeichen aussehen? Woher weiß der Algorithmus, wann ein Trennzeichen beginnt und eine Zeichen-Bitfolge endet?
Die Informatiker fanden eine recht einfache Lösung für das Problem: man verwendet kein Trennzeichen, sondern sorgt dafür, dass jedem Zeichen im Text eine Bitfolge zugeordnet wird, die folgenden Regeln genügt:
-
Jede Bitfolge ist einmalig.
-
Keine Bitfolge stimmt mit dem Anfang einer anderen Bitfolge überein.
-
Wenn einer Bitfolge ein Zeichen zugeordnet werden kann, dann beginnt beim nächsten Bit ein neues Zeichen.
Überlegen Sie sich mit Hilfe dieser beiden Regeln eine Kodierung für die Zeichen in "erdbeere", so dass nach einer Kodierung die Extrahierung eindeutig funktionieren kann.
Eine mögliche Kodierung ist: "b" = 111; "d" = 110; "r" = 10; "e" = 0
Damit wird aus "erdbeere" die Bitfolge: 01011011100100
Bei einer Extrahierung geht der Algorithmus durch die Bitfolge und vergleicht die Bits mit der "Legende".
- 0 gibt es: 0 = e. Der erste Buchstabe ist "e".
- 1 gibt es nicht, also nächstes Bit dazu. 10 gibt es: 10 = r. Der zweite Buchstabe ist "r".
- 1 gibt es nicht, also nächstes Bit dazu. 11 gibt es nicht, also nächstes Bit dazu. 110 gibt es: 110 = d. Der dritte Buchstabe ist "d".
- 1 gibt es nicht, also nächstes Bit dazu. 11 gibt es nicht, also nächstes Bit dazu. 111 gibt es: 111 = b. Der vierte Buchstabe ist "b".
- 0 gibt es: 0 = e. Der fünfte Buchstabe ist "e".
- 0 gibt es: 0 = e. Der sechste Buchstabe ist "e".
- 1 gibt es nicht, also nächstes Bit dazu. 10 gibt es: 10 = r. Der siebte Buchstabe ist "r".
- 0 gibt es: 0 = e. Der achte Buchstabe ist "e".
Damit wurde "erdbeere" eindeutig wieder extrahiert.