Codage de Rice

Restez toujours informé : suivez-nous sur Google (☆)

Introduction

Le codage de Rice, codage de Golomb-Rice ou GPO2 (pour Golomb-power-of-2) est un codage entropique inventé par Robert F. Rice et James R. Plaunt en 1971 et utilisé essentiellement en compression de données.

Le code produit est un code préfixe.

Principe

Le codage de Rice d'un entier naturel N dépend d'un paramètre k et se fait en deux étapes :

  1. le codage du quotient de la division euclidienne de N par 2 avec un codage unaire ;
  2. le codage du reste de la même division avec un codage binaire.

Le codage de Rice de paramètre k est strictement équivalent à un codage de Golomb de paramètre 2.

Mathématiquement, pour coder un entier , on code d'abord en unaire, puis en binaire.

La division par 2 peut être implémentée par un décalage de k bits vers la droite, et la second étape revient à répliquer les k bits de poids faible de la valeur à coder. Ces opérations simples font que le codage de Rice est particulièrement adapté pour une implémentation rapide.

Optimalité

Le codage de Rice est adapté pour des données dans lesquelles les valeurs les plus faibles sont plus probables que les autres (mais où les autres peuvent malgré tout apparaitre).

Il est particulièrement apprécié en informatique car son implémentation est simple est rapide.

Choix du paramètre

Le choix du paramètre k utilisé lors du codage de Rice détermine le taux de compression qu'il est possible d'obtenir.

Le paramètre optimal kopt pour coder V valeurs sur un intervalle de taille I est exprimé par :

Exemples

DécimalBinaireCode de Rice

k = 0
Code de Rice

k = 1
Code de Rice

k = 2
Code de Rice

k = 3
Code de Rice

k = 4
0000000 00 000 0000 0000
10001100 10 010 0010 0001
2001011010 00 100 0100 0010
30011111010 10 110 0110 0011
4010011110110 010 000 1000 0100
50101111110110 110 010 1010 0101
6011011111101110 010 100 1100 0110
70111111111101110 110 110 1110 0111
8100011111111011110 0110 0010 0000 1000
91001111111111011110 1110 0110 0010 1001
10101011111111110111110 0110 1010 0100 1010

Utilisations

Le codage de Rice fait partie des codages entropiques les plus utilisés, lorsque les données à compresser présentent une distribution géométrique (ou approchante) et que la vitesse de l'algorithme est un critère important.

On le retrouve notamment dans de nombreux algorithmes de compression multimédia : audio (FLAC, Monkey's Audio, MPEG-4 ALS, ALAC...), vidéo, image... et dans certains algorithmes de compression d'index (pour les moteurs de recherche).