Codage gamma - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Introduction

Le codage gamma ou codage gamma d'Elias est un codage entropique inventé par Peter Elias et utilisé essentiellement en compression de données.

Le code gamma produit est un code préfixe et universel.

Principe

Le codage gamma permet de coder tous les entiers naturels, à l'exception de zéro, sans qu'il y ait besoin de connaitre au préalable l'intervalle des valeurs à coder (contrairement, par exemple, au codage binaire de taille fixe, qui ne permet de coder que des nombres inférieurs à une borne supérieure fixée à l'avance).

Pour cela, le codage gamma se fait en deux étapes :

  1. le codage du nombre de bits nécessaires pour représenter l'entier avec un codage unaire ;
  2. le codage à proprement parler de l'entier avec un codage binaire sur ce même nombre de bits nécessaires.

En pratique, le bit de poids fort de l'entier n'est pas encodé car implicite et c'est le nombre de bits auquel on soustrait 1 qui est encodé au cours de la première étape (pour la même raison).

Mathématiquement, pour coder un entier N, N \in \mathbb{N}^* , on code d'abord \lfloor \log_2 N \rfloor en unaire, puis les \lfloor \log_2 N \rfloor bits de poids faible de N en binaire (en perdant au passage le bit de poids fort qui est implicite).

Longueur du code

La longueur L du code gamma associé à un entier naturel strictement positif N peut être exprimée par :

L = 2 \times \lfloor \log_2 N \rfloor + 1

Codage des entiers relatifs

Il est possible de coder des entiers relatifs avec le codage gamma en utilisant une bijection pour transformer les nombres négatifs ou nul en nombres strictement positifs avant le codage à proprement parler. Après le décodage, l'opération inverse doit être effectuée pour retrouver les entiers relatifs d'origine.

Par exemple, pour coder les entiers relatifs de l'intervale \left [ -A; +\infty \right ), A \in \mathbb{N} , on peut appliquer la fonction \begin{cases}\begin{align}&\scriptstyle f \colon \left [ -A; +\infty \right ) \to \mathbb{N}^* \\ &\textstyle x \mapsto x + A + 1\end{align}\end{cases} avant le codage gamma, et son inverse \begin{cases}\begin{align}&\scriptstyle f \colon \mathbb{N}^* \to \left [ -A; +\infty \right ) \\ &\textstyle x \mapsto {x - A - 1}\end{align}\end{cases} après le décodage gamma.

Pour coder tous les entiers relatifs sur \mathbb{Z} , on peut appliquer la fonction \begin{cases}\begin{align}&\scriptstyle f \colon \mathbb{Z} \to \mathbb{N}^* \\ &\textstyle x \mapsto \begin{cases} 2 \times x, x > 0\\ -2 \times x + 1, x \le 0\end{cases}\end{align}\end{cases} avant le codage gamma, et son inverse \begin{cases}\begin{align}&\scriptstyle f \colon \mathbb{N}^* \to \mathbb{Z} \\ &\textstyle x \mapsto \begin{cases} \tfrac x 2, x \equiv 0 \pmod 2\\ -\tfrac {x - 1} 2, x \equiv 1 \pmod 2\end{cases}\end{align}\end{cases} après le décodage gamma.

Généralisation

Une généralisation du codage gamma est le codage zeta ; le codage gamma peut être vu comme un codage zeta de paramètre 1.

Exemples

Représentation des premiers entiers naturels strictement positifs avec un codage gamma
Décimal
N
Binaire
N
Nombre de bits moins un
U = \lfloor \log_2 N \rfloor
Nombre de bits moins un
(U en codage unaire)
Binaire, privé du bit de poids fort
B = N − 2U + 1
Code gamma
U en unaire suivi de B
1 1 0 0 0
2 10 1 10 0 10 0
3 11 1 10 1 10 1
4 100 2 110 00 110 00
5 101 2 110 01 110 01
Page générée en 0.089 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise