Das Delta-Codieren von Elias

Delta-Code von Elias ist ein universaler Code, der die positiven von Peter Elias entwickelten ganzen Zahlen verschlüsselt. Eine Zahl zu codieren:

Schreiben Sie es in der Dualzahl.
  1. Zählen Sie die Bit auf und schreiben Sie diese Zahl von Bit im binären (X) nieder.
  2. Verwenden Sie die binäre Darstellung, die im Schritt 1 wieder geschrieben ist, entfernen Sie das Hauptbit und schreiben Sie die restlichen Bit (Y) nieder.
  3. Hängen Sie die zweite binäre Darstellung (Y) an der ersten binären Darstellung (X) an.
  4. Zählen Sie die im Schritt 2 (X) geschriebenen Bit auf, machen Sie 1 von dieser Zahl und prepend dass viele Nullen Abstriche.
Eine gleichwertige Weise, denselben Prozess auszudrücken:
  1. Trennen Sie die ganze Zahl in die höchste Macht 2 es enthält (2) und der restliche N' binäre Ziffern der ganzen Zahl.
  2. Verschlüsseln Sie N = N' + 1 mit dem Gammacodieren von Elias.
  3. Hängen Sie den restlichen N' binäre Ziffern an dieser Darstellung von N an.

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

Der Code, beginnt mit statt:

Einen Elias Delta-codierte ganze Zahl zu decodieren:

  1. Lesen Sie und zählen Sie zeroes vom Strom auf, bis Sie den ersten erreichen. Nennen Sie diese Zählung von zeroes L.
  2. Das Betrachten von demjenigen, das erreicht wurde, um die erste Ziffer einer ganzen Zahl, mit einem Wert von 2 zu sein, hat die restlichen L Ziffern der ganzen Zahl gelesen. Nennen Sie diese ganze Zahl N.
  3. Stellen Sie denjenigen an erster Stelle unserer Endproduktion, den Wert 2 vertretend. Lesen Sie und hängen Sie die folgenden n-1 Ziffern an.

Beispiel:

001010001

1. 2 Hauptnullen in 001

2. lesen Sie noch 2 Bit d. h. 00101

3. decodieren Sie N = 00101 = 5

4. bekommen Sie N' = 5 - 1 = 4 restliche Bit für den ganzen Code d. h. '0001'

5. verschlüsselte Zahl = 2 + 1 = 17

Dieser Code kann zu negativen oder ganzen Nullzahlen auf dieselben im Gammacodieren von Elias beschriebenen Weisen verallgemeinert werden.

Beispiel-Code

Verschlüsselung

Leere eliasDeltaEncode (char* Quelle, char* dest)

{\ IntReader intreader (Quelle); BitWriter bitwriter (dest);

während (intreader.hasLeft )

{\ interne Nummer num = intreader.getInt ;

interne Nummer len = 0;

interne Nummer lengthOfLen = 0;

für (int Zeitsekretärin = num; Zeitsekretärin> 0; Zeitsekretärin>> = 1)//rechnet 1+floor (log2 (num))

len ++;

für (int Zeitsekretärin = len; Zeitsekretärin> 1; Zeitsekretärin>> = 1)//berechnet Fußboden (log2 (len))

lengthOfLen ++;

für (interne Nummer i = lengthOfLen; i> 0; - i)

bitWriter.outputBit (0);

für (interne Nummer i = lengthOfLen; i> = 0; - i)

bitWriter.outputBit ((len>> i) & 1);

für (interne Nummer i = len-2; i> = 0; ich-)

bitWriter.outputBit ((num>> i) & 1);

}\

bitwriter.close ;

intreader.close ;

}\

</Quelle>

Entzifferung

Leere eliasDeltaDecode (char* Quelle, char* dest)

{\ BitReader bitreader (Quelle); IntWriter intwriter (dest); während (bitreader.hasLeft ) {\

interne Nummer num = 1;

interne Nummer len = 1;

interne Nummer lengthOfLen = 0;

während (! bitReader.inputBit )//potenziell gefährlich mit missgebildeten Dateien.

lengthOfLen ++;

für (interne Nummer i = 0; ich

Siehe auch

Omega von Elias, das codiert

Duomo / Sidney Altman
Impressum & Datenschutz