Golomb-Code

Darstellungsform für alle nichtnegativen ganzen Zahlen
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 25. April 2006 um 13:04 Uhr durch 80.130.239.124 (Diskussion) (Kommentare). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Der Golomb Code ist eine Darstellungsform für alle positiven ganzen Zahlen, im Gegensatz zu anderen Codes, die nur einen begrenzten Bereich (z. B. 0-255) darstellen können. Er wurde 1966 von Solomon W. Golomb vorgestellt.
Der Code verwendet wenige Bits für kleine und viele Bits für größere Zahlen. Dabei kann er über einen Parameter gesteuert werden. Je größer der Parameter, um so langsamer wächst die Anzahl der zur Darstellung benötigten Bits, aber um so größer ist die Anzahl der minimal benötigten Bits für die kleinen Zahlen.

Aufgrund dieser Eigenschaften kann der Code für Entropiekodierungen verwendet werden, bei denen die Wahrscheinlichkeiten der zu kodierenden Zeichen (näherungsweise) eine geometrische Reihe bilden.

Arbeitsweise

Der Code arbeitet mit der Idee die darzustellende Zahl durch einen Quotienten   und den Rest   bei einer Division mit einem Parameter   zu ersetzen.

Mit den in diesem Artikel vorgestellten Formeln ist es nicht möglich die 0 darzustellen. Um das zu ermöglichen muss der zu kodierende Wert um 1 erhöht, oder die Subtraktion der 1 aus den Formeln entfernt werden.

Die Zahl  , mit   wird durch

 

und

 

beschrieben. Zur besseren Beschreibung wird noch die Zahl

 

benötigt.

Der Quotient wird dann unär ausgegeben, d. h. es werden   "1" Bits gefolgt von einer "0" abgelegt.

Die Darstellung des Restes wird in vielen Quellen falsch angegeben als:

Der Rest wird auf eine spezielle Weise abgelegt. Die ersten   Werte werden mit   Bits gespeichert. Wobei das höchstwertige Bit 0 ist. Die anderen Werte werden in   Bits abgelegt, wobei das höchstwertige Bit gesetzt ist.

Diese Art der Ablegung funktioniert nicht. Das kann man sich einfach an einem Beispiel mit dem Parameter 7 überlegen.   ist in diesem Fall 2. Das würde bedeuten, dass die ersten 2 Werte für den Rest als '00' und '01' abgelegt werden. Dann stehen noch 4 weitere Kodierungen mit je 3 Bits zur Verfügung '100', '101', '110', '111'. Es stehen somit 6 verschiedene Kodes zur Verfügung. Es werden aber Kodes für insgesamt 7 verschiedene Werte benötigt. Die Anzahl der Kodierungen reicht also nicht aus. In anderen Fällen, z. B.   verschwendet diese Darstellung Bits, da mögliche Bitfolgen ungenutzt bleiben würden.

Richtigerweise muss der Rest in einer "abgeschnittenen binären Darstellung" (en:Truncated_binary_encoding) genannten Codierung abgelegt werden. Diese Darstellung legt einen Teil der Werte, falls möglich, mit   und den anderen Teil, mit   Bit ab. Die Anzahl der Werte, die mit   Bits abgelegt werden kann ist  

Beispiele

Die Darstellung der Zahl 10 mit einem Parameter 4:

 

 

Daraus resultiert die Bitfolge "110 01". Das Leerzeichen zeigt den Übergang vom Quotienten zum Rest.

Ein paar weitere Beispiele:

n 1 2 3 4 5 6 7 8 9 10
b=3 0 0 0 10 0 11 10 0 10 10 10 11 110 0 110 10 110 11 1110 0
b=4 0 00 0 01 0 10 0 11 10 00 10 01 10 10 10 11 110 00 110 01
b=5 0 00 0 01 0 10 0 110 0 111 10 00 10 01 10 10 10 110 10 111
b=7 0 00 0 010 0 011 0 100 0 101 0 110 0 111 10 00 10 010 10 011

Anwendung

Der Golomb Code kann angewendet werden, wenn Zahlen unbekannter Größe abspeichert werden sollen.

Das eigentliche Anwendungsgebiet liegt in der Datenkompression. Wenn die Wahrscheinlichkeiten der Zahlen eine bestimme Verteilung (Exponentielle Verteilung) aufweisen, dann kann der Golomb Code genau so effizient wie der Huffman-Code sein, ist dabei aber sparsamer mit Speicher, leichter zu implementieren und schneller in der Ausführung.

Rice Code

Der Rice Code ist eine Variante des Golomb Codes bei dem der Parameter   eine Potenz von 2 ist. Diese Codes lassen sich sehr einfach mit Bitshiften und logischen Bitoperationen umsetzen.

Angenommen es gilt  . Dann ist

 

und

 

  steht dabei für bitweises verschieben nach rechts und   für bitweise Und-Verknüpfung.

r wird dabei immer mit genau   Bits dargestellt.

Literatur

Golomb S. W. Run Length Encodings, IEEE Transactions on Information Theory IT-12(3):399-401

Kommentare

Wie geht das? Nun, es gibt da keine offensichtliche, im Sinne einer einzig richtigen formulierbaren Antwort, gewissermaßen eines non plus ultra. Wir hoffen, trotzdem geholfen zu haben. CSS zocken macht eh mehr fun Frage ich differenzierter: Wie kann ich die Zahl 12 im Golomb Code kodieren? Versuchs mal bei der 11833.