Das Gammacodieren von Elias

Gammacode von Elias ist ein universaler Code, der positive von Peter Elias entwickelte ganze Zahlen verschlüsselt. Es wird meistens verwendet, wenn man ganze Zahlen codiert, deren ober gebunden im Voraus nicht bestimmt werden kann.

Verschlüsselung

Eine Zahl zu codieren:

  1. Schreiben Sie es in der Dualzahl.
  2. Machen Sie 1 von der Zahl von Bit Abstriche, die im Schritt 1 und prepend dass viele Nullen geschrieben sind.

Eine gleichwertige Weise, denselben Prozess auszudrücken:

  1. Trennen Sie die ganze Zahl in die höchste Macht 2 es enthält (2) und die restlichen N binären Ziffern der ganzen Zahl.
  2. Verschlüsseln Sie N im unären; d. h. als N zeroes gefolgt von demjenigen.
  3. Hängen Sie die restlichen N binären Ziffern an dieser Darstellung von N an.

Um eine Zahl zu vertreten, verwendet Gamma von Elias Bit.

Der Code beginnt (der implizierte Wahrscheinlichkeitsvertrieb für den Code wird für die Klarheit hinzugefügt):

Entzifferung

Einen Elias gammacodierte ganze Zahl zu decodieren:

  1. Lesen Sie und Punkt der Klagebegründung 0s vom Strom, bis Sie den ersten 1 erreichen. Nennen Sie diese Zählung von zeroes N.
  2. Das Betrachten von demjenigen, das erreicht wurde, um die erste Ziffer der ganzen Zahl, mit einem Wert von 2 zu sein, hat die restlichen N Ziffern der ganzen Zahl gelesen.

Gebrauch

Das Gammacodieren wird in Anwendungen verwendet, wo der größte verschlüsselte Wert vorzeitig, oder zu Kompresse-Daten nicht bekannt ist, in denen kleine Werte viel häufiger sind als große Werte.

Generalisationen

Das Gammacodieren codiert negative oder ganze Nullzahlen nicht.

Eine Weise, Null zu behandeln, soll 1 vor dem Codieren beitragen und dann 1 nach der Entzifferung Abstriche machen.

Ein anderer Weg ist zum Präfix jeder Nichtnullcode mit 1, und dann codieren Sie Null als einzelner 0.

Eine Weise, alle ganzen Zahlen zu codieren, ist, eine Bijektion aufzustellen, ganze Zahlen (0, 1,-1, 2,-2, 3,-3...) zu (1, 2, 3, 4, 5, 6, 7...) vor dem Codieren kartografisch darstellend.

Das Exponential-Golomb-Codieren verallgemeinert den Gammacode zu ganzen Zahlen mit einem "flacheren" mit der Machtgesetzvertrieb, wie das Codieren von Golomb den unären Code verallgemeinert.

Es schließt das Teilen der Zahl durch einen positiven Teiler, allgemein eine Macht 2, das Schreiben des Gammacodes für einen mehr ein als der Quotient, und den Rest in einem gewöhnlichen binären Code ausschreibend.

Beispiel-Code

Verschlüsseln

Leere eliasGammaEncode (char* Quelle, char* dest)

{\

IntReader intreader (Quelle);

BitWriter bitwriter (dest);

während (intreader.hasLeft )

{\

interne Nummer num = intreader.getInt ;

interne Nummer l = log2 (num);

für (interne Nummer a=0; a

{\

wenn (num & 1

Decodieren

Leere eliasGammaDecode (char* Quelle, char* dest)

{\

BitReader bitreader (Quelle);

IntWriter intwriter (dest);

während (bitreader.hasLeft )

{\

interne Nummer numberBits = 0;

während (! bitreader.getBit && bitreader.hasLeft )

numberBits ++;//setzen fort zu lesen, bis wir denjenigen herbeiholen...

int Strom = 0;

für (interne Nummer a=numberBits-1; a> = 0;-)//Read numberBits Bit

{\

wenn (bitreader.getBit )

Strom | = 1

Siehe auch


Die Krankheit von Gräbern / Somerset
Impressum & Datenschutz