Wie beim Morse-Code wird auch für die Codierung und Decodierung von Text eine Übersetzungs-Tabelle benötigt. In dieser Tabelle ist für jedes mögliche Zeichen einer Textnachricht eine Folge aus 0 und 1 zu finden:
0100000 | 0 | 0110000 | @ | 1000000 | P | 1010000 | ` | 1100000 | p | 1110000 | |
! | 0100001 | 1 | 0110001 | A | 1000001 | Q | 1010001 | a | 1100001 | q | 1110001 |
" | 0100010 | 2 | 0110010 | B | 1000010 | R | 1010010 | b | 1100010 | r | 1110010 |
# | 0100011 | 3 | 0110011 | C | 1000011 | S | 1010011 | c | 1100011 | s | 1110011 |
$ | 0100100 | 4 | 0110100 | D | 1000100 | T | 1010100 | d | 1100100 | t | 1110100 |
% | 0100101 | 5 | 0110101 | E | 1000101 | U | 1010101 | e | 1100101 | u | 1110101 |
& | 0100110 | 6 | 0110110 | F | 1000110 | V | 1010110 | f | 1100110 | v | 1110110 |
' | 0100111 | 7 | 0110111 | G | 1000111 | W | 1010111 | g | 1100111 | w | 1110111 |
( | 0101000 | 8 | 0111000 | H | 1001000 | X | 1011000 | h | 1101000 | x | 1111000 |
) | 0101001 | 9 | 0111001 | I | 1001001 | Y | 1011001 | i | 1101001 | y | 1111001 |
* | 0101010 | : | 0111010 | J | 1001010 | Z | 1011010 | j | 1101010 | z | 1111010 |
+ | 0101011 | ; | 0111011 | K | 1001011 | [ | 1011011 | k | 1101011 | { | 1111011 |
, | 0101100 | < | 0111100 | L | 1001100 | \ | 1011100 | l | 1101100 | | | 1111100 |
- | 0101101 | = | 0111101 | M | 1001101 | ] | 1011101 | m | 1101101 | } | 1111101 |
. | 0101110 | > | 0111110 | N | 1001110 | ^ | 1011110 | n | 1101110 | ~ | 1111110 |
/ | 0101111 | ? | 0111111 | O | 1001111 | _ | 1011111 | o | 1101111 | DEL | 1111111 |
Beispiel: Der Kleinbuchstabe t entspricht der Folge 1110100
Diese Tabelle wurde 1967 erstmals als Standard veröffentlicht unter der Bezeichnung American Standard Code for Information Interchange (ASCII) und bildet die Grundlage für die in heutigen Computern gebräuchliche Codierung von Textdaten (siehe Wikipedia).
Das Mobiltelefon der drei Roboter ist mit einem Kompressionsverfahren für Textnachrichten ausgestattet. Es handelt sich um ein verlustfreies Kompressionsverfahren, das sich eine Eigenart der deutschen Sprache zunutze macht. In der deutschen Sprache kommen immer wieder Doppelbuchstaben vor, wie dieser Satz schön illustriert. Die obenstehende Codierungstabelle wird deshalb mit folgender Regel ergänzt:
Kommt ein Buchstabe einmal vor, so setze ein 0 vor den Binärcode des Buchstaben,
kommt ein Buchstabe zweimal vor, so setze ein 1 vor den Binärcode des Buchstabens.
01010010 | b |
11010010 | bb |
Im folgenden wird gezeigt, wie eine Textnachricht codiert werden kann und welche Auswirkungen die Kompression hat. Als Beispiel dient das Wort
Schifffahrtsgesellschaft |
Ohne Kompression ist die Codierung relativ einfach: Jeder Buchstabe muss durch den entsprechenden Code der obenstehenden Tabelle ersetzt werden:
S | 1010011 |
c | 1100011 |
h | 1101000 |
i | 1101001 |
f | 1100110 |
f | 1100110 |
f | 1100110 |
a | 1100001 |
h | 1101000 |
r | 1110010 |
t | 1110100 |
s | 1110011 |
g | 1100111 |
e | 1100101 |
s | 1110011 |
e | 1100101 |
l | 1101100 |
l | 1101100 |
s | 1110011 |
c | 1100011 |
h | 1101000 |
a | 1100001 |
f | 1100110 |
t | 1110100 |
Fügt man die einzelnen Codeteile zusammen, so ergibt sich folgende, aus 168 bit (= 24 x 7) bestehende Nachricht:
1010011110001111010001101001110011011001 1011001101100001110100011100101110100111 0011110011111001011110011110010111011001 1011001110011110001111010001100001110011 01110100 |
Mit Kompressionsregel wird das Codieren etwas anspruchsvoller, denn nicht immer entspricht ein Zeichen genau einem Code. In der Beispielnachricht gibt es zwei Stellen, wo die Kompressionsregel eine Einsparung ermöglicht, indem zwei Zeichen durch einen Code repräsentiert werden:
S | 01010011 |
c | 01100011 |
h | 01101000 |
i | 01101001 |
ff | 11100110 |
f | 01100110 |
a | 01100001 |
h | 01101000 |
r | 01110010 |
t | 01110100 |
s | 01110011 |
g | 01100111 |
e | 01100101 |
s | 01110011 |
e | 01100101 |
ll | 11101100 |
s | 01110011 |
c | 01100011 |
h | 01101000 |
a | 01100001 |
f | 01100110 |
t | 01110100 |
Die Kompression hat sich in diesem Fall nicht gelohnt, denn die resultierende Nachricht besteht aus 176 bits (= 22 x 8) und ist somit länger als die unkomprimierte Nachricht:
0101001101100011011010000110100111100110 0110011001100001011010000111001001110100 0111001101100111011001010111001101100101 1110110001110011011000110110100001100001 0110011001110100 |
Denksportaufgabe: Gibt es andere Komprimierungsregeln, die effizienter sind bei der Kompression deutscher Sprache?
Das Dekomprimieren geschieht übrigens einfach in umgekehrter Reihenfolge:
Hast du schon eine Lösung gefunden, dann kannst du sie hier überprüfen: