Zum Inhalt springen

Golomb-Code

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 8. Juli 2007 um 17:33 Uhr durch ThePacker (Diskussion | Beiträge) (Anwendung: Der Code ist niemals so effizient wie der Huffman-Code, weil die Codeworte immer mindestens ein Bit länger sind. (Grafik zur Redundanz des Golombcodes hinzugefügt)). 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 Verteilung 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.

Der Rest wird dann in einer "abgeschnittenen binären Darstellung" (en:Truncated_binary_encoding) genannten Codierung abgelegt. 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 ähnlich effizient wie der Huffman-Code sein, ist dabei aber sparsamer mit Speicher, leichter zu implementieren und schneller in der Ausführung.

Datei:GolombRedundancy 2007 07 08.png
Die beiden Grafiken zeigen die Redundanz des Golomb-Code pro Symbol. Auf der Abszisse ist die Auftretenswahrscheinlichkeit des häufigeren Symbols ablesbar.

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.

wird dabei immer mit genau Bits dargestellt.

Literatur

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