Codage gamma d\'Elias

Le code gamma d'Elias de est un code universel codant des nombres entiers positifs. Il est employé le plus généralement en codant les nombres entiers dont supérieur-bondissent ne peuvent pas être déterminés à l'avance.

Pour coder un nombre : L'écrire dans le binaire.

  • Soustraire 1 du nombre de peu écrit dans l'étape 1 et ajouter au début que beaucoup de zéros.

    Une manière équivalente d'exprimer le même processus : Séparer le nombre entier dans la puissance la plus élevée de 2 qu'elle contient (2 N ) et les éléments binaires restants du N du nombre entier.

  • Coder le N dans le unaire ; c'est-à-dire, comme N les zéros ont suivi de celui.
  • Apposer les éléments binaires restants du N à cette représentation du N .

    Le code commence : 1 = 20 + 0 = 1 2 = 21 + 0 = 01 0 3 = 21 + 1 = 01 1 4 = 22 + 0 = 001 00 5 = 22 + 1 = 001 01 6 = 22 + 2 = 001 10 7 = 22 + 3 = 001 11 8 = 23 + 0 = 0001 000 9 = 23 + 1 = 0001 001 10 = 23 + 2 = 0001 010 11 = 23 + 3 = 0001 011 12 = 23 + 4 = 0001 100 13 = 23 + 5 = 0001 101 14 = 23 + 6 = 0001 110 15 = 23 + 7 = 0001 111 16 = 24 + 0 = 00001 0000 17 = 24 + 1 = 00001 0001

    Pour décoder un nombre entier gamma-codé par Elias : Lire et compter 0s du jet jusqu'à ce que vous atteigniez le 1. premier appel ce compte de N de zéros.

  • Vu celui qui a été atteint pour être le premier chiffre du nombre entier, avec une valeur 2 du N , lire les chiffres restants du N du nombre entier.

    Le codage gamma est employé dans les applications où la plus grande valeur codée n'est pas connue en avant du temps, ou aux données de la compresse dans lesquelles les petites valeurs sont beaucoup plus fréquentes que de grandes valeurs.

    Généralisations < ! -- Cette section est liée du codage de delta d'Elias de -->

    Le codage gamma ne code pas les nombres entiers zéro ou négatifs. L'one-way de manipuler zéro est d'additionner 1 avant le codage et puis de soustraire 1 après le décodage. Une autre manière est de mettre en tête chaque code différent de zéro avec un 1 et puis de coder zéro en tant que 0 simple. L'one-way pour coder tous les nombres entiers est d'installer un Bijection , traçant les nombres entiers (0, 1, -1, 2, -2, 3, -3,…) (1, 2, 3, 4, 5, 6, 7,…) avant le codage.

    Code d'exemple

    Coder lang=" de eliasGammaEncode vide (source de char*, char* DEST) { Intreader d'IntReader (source) ; Bitwriter de BitWriter (DEST) ; tandis que (intreader.hasLeft ()) { international numérique = intreader.getInt () ; international l = log2 (numérique) ; pour (international a=0 ; a < l ; a++) { bitwriter.putBit (faux) ; //put 0s pour indiquer combien le peu qui suivra } bitwriter.putBit (vrai) ; //mark la fin du 0s pour (international a=0 ; a < l ; a++) //Write le peu en tant que tout simplement binaire { si (numérique et 1 << a) bitwriter.putBit (vrai) ; autrement bitwriter.putBit (faux) ; } } intreader.close () ; }

    Décoder

    lang=" de eliasGammaDecode vide (source de char*, char* DEST) { Bitreader de BitReader (source) ; Bitwriter de BitWriter (DEST) ; numberBits d'international = 0 ; tandis que (bitreader.hasLeft ()) { tandis que (! bitreader.getBit () || bitreader.hasLeft ())numberBits++ ; //keep sur la lecture jusqu'à ce que nous cherchions celui… courant d'international = 0 ; pour (international a=0 ; a < numberBits ; peu de numberBits d'a++) //Read { si (bitreader.getBit ()) += courant 1 << a ; } //write il comme nombre de bits 32 courant de current= | 1 ; le peu de //last n'est pas codé ! pour (international a=0 ; a < 32 ; peu de numberBits d'a++) //Read { si (courant et (1 << a)) bitwriter.putBit (vrais) ; autrement bitwriter.putBit (faux) ; } } }

    Voir également

    Codage de delta d'Elias de
    Codage d'Elias Omega de
  • .

    Random links:Aspatria | Barsils | Gare de Lenham | Hjälmaren | Terri Farley | Codificación_gamma_de_Elias